Python----matplotlib库

简介: Python----matplotlib库

matplotlib 是提供数据绘图功能的第三方库,其pyplot 子库主要用于实现各种数据展示的图

形绘制。

import matplotlib.pyplot as plt

plt库的字体:

字体名称 字体英文表示

宋体 SimSun

黑体 SimHei

楷体 KaiTi

微软雅黑 Microsoft YaHei

隶书 LiSu

仿宋 FangSong

幼圆 YouYuan

华文宋体 STSong

华文黑体 STHeiti

苹果丽中黑 Apple Ligothic Medium

为了正确显示中文字体,要做如下设置:

为了正确显示中文字体,要做如下设置:

>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['SimHei'] #黑体
>>> plt.rcParams['axes.unicode_minus']=False # 正常显示负号

plt的操作绘图函数:

plt 子库提供了一批操作和绘图函数,每个函数代表对图像进行的一个操作,比如创建绘图区域、添加标注或者修改坐标轴等。这些函数采用plt.<b>0形式调用,其中<b>是具体函数名称。


函数 描述

plt.figure(figsize=None, facecolor=None) 创建一个全局绘图区域

plt.axes(rect) 创建一个坐标系风格的子绘图区域

plt.subplot(nrows, ncols, plot_number) 在全局绘图区域中创建一个子绘图区域

plt.subplots_adjust() 调整子图区域的布局

plt.figure(figsize=None, facecolor=None):

使用figure(函数创建一个全局绘图区域,并且使它成为当前的绘图对象,figsize参数可以指定绘图区域的宽度和高度,单位为英寸。

import matplotlib.pyplot as plt
 
# 创建一个宽度为8英寸,高度为6英寸的图形,并将背景色设置为白色
fig = plt.figure(figsize=(8, 6), facecolor='w')
 
# 绘制一个简单的图表
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
 
# 显示图表
plt.show()

结果:

plt.subplot(nrows, ncols, plot_number):

subplot都用于在全局绘图区域内创建子绘图区域,subplot是在绘图中创建多个图表的一种方法。它许将多个图表组织在一个大的图表中,以便在同一个图像中进行比较和可视化不同的数据。

import matplotlib.pyplot as plt
 
# 创建一个2x2的图像,并将第一个子图放置在左上角
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.title('Subplot 1')
 
# 创建第二个子图,放置在右上角
plt.subplot(2, 2, 2)
plt.plot([1, 2, 3, 4], [1, 8, 27, 64])
plt.title('Subplot 2')
 
# 创建第三个子图,放置在左下角
plt.subplot(2, 2, 3)
plt.plot([1, 2, 3, 4], [1, 2, 3, 4])
plt.title('Subplot 3')
 
# 创建第四个子图,放置在右下角
plt.subplot(2, 2, 4)
plt.plot([1, 2, 3, 4], [1, 3, 5, 7])
plt.title('Subplot 4')
 
# 调整子图之间的间距
plt.tight_layout()
 
# 显示图像
plt.show()

plt.axes(rect):

axes0默认创建一个subplot(111)坐标系,参数rec = [left,bottom,width,height]中四个变量的范围都为[0,1],表示坐标系与全局绘图区域的关系。

import matplotlib.pyplot as plt
 
# 创建一个10x10的图像
plt.figure(figsize=(10, 10))
 
# 创建一个左边界为0.1,底边界为0.2,宽度为0.8,高度为0.6的轴
ax = plt.axes([0.1, 0.2, 0.8, 0.6])
 
# 在轴上绘制一条直线
ax.plot([0, 1], [0, 1])
 
# 设置轴的标题和标签
ax.set_title('Custom Axes')
ax.set_xlabel('X')
ax.set_ylabel('Y')
 
# 显示图像
plt.show()

plt.subplots_adjust():

在使用plt.subplots()创建多个子图时,子图默认是紧密排列的,可能会导致子图之间的重叠或者不美观。而plt.subplots_adjust()函数可以通过调整一些参数来改变子图的间距。


参数如下:


left:子图左边缘与画布左边缘之间的距离。

right:子图右边缘与画布右边缘之间的距离。

bottom:子图底边缘与画布底边缘之间的距离。

top:子图顶边缘与画布顶边缘之间的距离。

wspace:子图之间的水平间距。

hspace:子图之间的垂直间距。

以下例子调整了两个子图之间的间距为0.5,即为原来的一倍

import matplotlib.pyplot as plt
 
# 创建两个子图
fig, (ax1, ax2) = plt.subplots(2, 1)
 
# 绘制第一个子图
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Subplot 1')
 
# 绘制第二个子图
ax2.plot([1, 2, 3], [6, 5, 4])
ax2.set_title('Subplot 2')
 
# 调整子图间距
plt.subplots_adjust(hspace=0.5)
 
# 显示图形
plt.show()

效果如下:

没有调整之前:

plt的读取和显示相关函数:

plt子库提供了一组读取和显示相关的函数,用于在绘图区域中增加显示内容及读入数据,如下表所示,这些函数需要与其他函数搭配使用。


操作 描述

plt.legend() 在绘图区域中放置绘图标签(也称图注)

plt.show() 显示创建的绘图对象

plt.matshow() 在窗口显示数组矩阵

plt.imshow() 在axes上显示图像

plt.imsave() 保存数组为图像文件

plt.imread 从图像文件中读取数组

plt库的基础图表函数:

操作 描述

plt.plot(x,y,label,color,width) 根据x,y数组绘制直/曲线

plt.boxplot(data,notch,position) 绘制一个箱型图(Box-plot)

plt.bar(x,height,width=0.8,bottom=None) 绘制一个条形图

plt.barh(y, width,height=0.8,left=None) 绘制一个横向条形图

plt.polar(theta,r) 绘制极坐标图

plt.pie(data, explode) 绘制饼图

plt.psd(x, NFFT=256, pad_to, Fs) 绘制功率谱密度图

plt.specgram(x,NFFT=256,pad_to,F) 绘制谱图

plt.cohere(x,y,NFFT=256,Fs) 绘制X-Y的相关性函数

plt.scatter(x,y) 绘制散点图(x,y是长度相同的序列)

plt.step(x,y,where) 绘制步阶图

plt.hist(x,bins,normed) 绘制直方图(x为数据,bins为柱数,normed为是否归一化)

plt.contour(X,Y,Z,N) 绘制等值线

plt.vlines(x,ymin,ymax) 绘制垂直线

plt.stem(x,y,linefmt,markerfmt,basefmt) 绘制曲线每个点到水平轴线的垂线

plt.plot_date() 绘制数据日期

plt.plotfile() 根据文件数据进行图形绘制



plot()函数是用于绘制直线的最基础函数:

其常用参数如下:


•x, y:要绘制的数据点的x和y坐标。可以是列表、数组或者Series对象。

•color:曲线的颜色,可以是字符串表示的颜色名称(例如'red'、'blue')或者RGB值(例如(0.1, 0.2, 0.3))。

•linestyle:曲线的线型,可以是字符串(例如'-'、'--'、':'、'-.'等)或者自定义的虚线样式(例如(0, (5, 10))表示5个像素的实线,10个像素的空白)。

•linewidth:曲线的线宽,可以是一个浮点数。

•marker:数据点的标记样式,可以是字符串(例如'.'、'o'、's'等)或者Matplotlib支持的标记样式字符。

•markersize:数据点标记的大小,可以是一个整数。

•label:曲线的标签,用于图例中的显示。

•alpha:曲线的透明度,可以是一个0到1之间的浮点数,0表示完全透明,1表示完全不透明。

•linestyle、linewidth、marker、markersize、label等参数还可以通过关键字参数的形式传递给plot()函数。

举例:

import numpy as np
import matplotlib.pyplot as plt
 
# 生成 x 取值范围为 [0, 2π] 的等差数列
x = np.linspace(0, 2*np.pi, 50)
 
# 计算 sin(x) 和 cos(x) 的值
y_sin = np.sin(x)
y_cos = np.cos(x)
 
# 绘制正弦曲线和余弦曲线
plt.plot(x, y_sin, label='sin(x)', color='blue', linewidth=2)
plt.plot(x, y_cos, label='cos(x)', color='red', linewidth=2)
 
# 添加图例,设置标题和坐标轴标签
plt.legend()
plt.title('Sine and Cosine Curves')
plt.xlabel('x')
plt.ylabel('y')
 
# 显示图形
plt.show()

结果

带有公式的显示可以用$ $,即$y=\sin(x)$

1. importimport numpy as np
import matplotlib.pyplot as plt
 
x = np.linspace(0, 2*np.pi, 50)
y = np.sin(x)
 
plt.plot(x, y, label=r'$y=\sin(x)$')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
 
plt.show()

marker的使用:

import numpy as np
import matplotlib.pyplot as plt
 
# 创建一个包含10个元素的随机数数组
x = np.arange(10)
y = np.random.randn(10)
 
# 绘制折线图,并使用不同的标记样式
plt.plot(x, y, marker='o', label='Circle')  # 使用圆形标记
plt.plot(x, y+1, marker='s', label='Square')  # 使用正方形标记
plt.plot(x, y+2, marker='*', label='Star')  # 使用星号标记
plt.plot(x, y+3, marker='^', label='Triangle')  # 使用正三角形标记
 
plt.legend()  # 显示图例
plt.xlabel('x')
plt.ylabel('y')
 
plt.show()

plt库的坐标轴:

plt 库有两个坐标体系,图像坐标和数据坐标

图像坐标将图像所在区域左下角视为原点,将x 方向和y方向长度设定为1。整体绘图区域有一个图像坐标,每个axes0和subplot0函数产生的子图也有属于自己的图像坐标。axes()函数参数rect 指当前产生的子区域相对于整个绘图区域的图像坐标。

数据坐标以当前绘图区域的坐标轴为参考,显示每个数据点的相对位置,这与坐标系里面标记数据点一致。


坐标轴设置函数:


函数 描述

plt.axis(‘v’,’off’,’equal’,’scaled’,’tight’,’image’) 获取/设置轴属性的快捷方法

plt.xlim(xmin,xmax) 设置当前x轴取值范围

plt.ylim(ymin,ymax) 设置当前y轴取值范围

plt.xscale() 设置x轴缩放

plt.yscale() 设置y轴缩放

plt.autoscale() 自动缩放轴视图的数据

plt.thetagrids(angles,labels,fmt,frac) 设置极坐标网格theta的位置

plt.grid(on/off) 打开或者关闭坐标网格

举例:

>>> plt.plot([1,2,4],[1,2,3]) #表示在坐标点(1, 1), (2, 2), (4, 3)之间绘制一条折线
>>> plt.axis() #获得当前坐标轴范围
(1.0, 4.0, 1.0, 3.0)
>>> plt.axis([0,5,0,8]) #4个变量分别是[xmin,xmax,ymin,ymax]

自动缩放轴视图数据

import matplotlib.pyplot as plt
 
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
 
plt.plot(x, y)
plt.autoscale()
 
plt.show()

标签设置函数:


函数 描述

plt.figlegend(handles,label,loc) 为全局绘图区域放置图注

plt.legend() 为当前坐标图放置图注

plt.xlabel(s) 设置当前x轴的标签

plt.ylabel(s) 设置当前y轴的标签

plt.xticks(array,’a’,’b’,’c’) 设置当前x轴刻度位置的标签和值

plt.yticks(array,’a’,’b’,’c’) 设置当前y轴刻度位置的标签和值

plt.clabel(cs,v) 为等值线图设置标签

plt.get_figlabels() 返回当前绘图区域的标签列表

plt.figtext(x,y,s,fontdic) 为全局绘图区域添加文字

plt.title() 设置标题

plt.suptitle() 为当前绘图区域添加中心标题

plt.text(x,y,s,fontdic,withdash) 为坐标图轴添加注释

plt.annotate(note,xy,xytext,xycoords,textcoords,arrawprops) 用箭头在指定数据点创建一个注释或一段文本

举例

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
plt.plot([1,2,4],[1,2,3])
plt.title('坐标系标题')
plt.xlabel('时间(s)')
plt.ylabel('范围(m)')
#r表示这是一个原始字符串,\pi表示Π
plt.xticks([1,2,3,4,5],[r'$\pi/3$',r'$2\pi/3$',r'$\pi$',\
                        r'$4\pi/3$',r'$5\pi/3$'])#设置x轴刻度,启用了latex绘制数学表达式
plt.show()

plt库的区域填充函数
函数 描述
fill(x,y,color) 填充多边形
fill_between(x,y1,y2,where,color) 填充两条曲线围成的多边形
fill_betweenx(y,x1,x2,where,hold) 填充两条水平线之间的区域
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
y = np.cos(2*np.pi*x)*np.exp(-x)+0.8
plt.plot(x,y,color='r',label="$exp-decay$",linewidth=3)
plt.axis([0,6,0,1.8])
ix = (x>0.8) & (x<3)
plt.fill_between(x,y,0,where=ix,
                 facecolor='grey',alpha=0.25)
plt.text(0.5*(0.8+3), 0.2, r"$\int_a^b f(x)\mathrm{d}x$",
         horizontalalignment='center')
plt.legend()
plt.show()


举例:
阻尼衰减曲线坐标图:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
def Draw(pcolor, nt_point, nt_text, nt_size):
    plt.plot(x, y, 'k', label="$exp_decay$", color=pcolor, linewidth=3, linestyle="-")
    plt.plot(x, z, "b--", label="$cos(x^2)$", linewidth=1)
    plt.xlabel('时间(s)')
    plt.ylabel('幅度(mV)')
    plt.title("阻尼衰减曲线绘制")
    plt.annotate('$\cos(2 \pi t) \exp(-t)$', xy=nt_point, xytext=nt_text, fontsize=nt_size,\
               arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.1"))
def Shadow(a, b):
    ix = (x>a) & (x<b)
    plt.fill_between(x,y,0,where=ix,facecolor='grey', alpha=0.25)
    plt.text(0.5 * (a + b), 0.2, "$\int_a^b f(x)\mathrm{d}x$", \
             horizontalalignment='center')
def XY_Axis(x_start, x_end, y_start, y_end):
    plt.xlim(x_start, x_end)
    plt.ylim(y_start, y_end)
    plt.xticks([np.pi/3, 2 * np.pi/3, 1 * np.pi, 4 * np.pi/3, 5 * np.pi/3], \
               ['$\pi/3$', '$2\pi/3$', '$\pi$', '$4\pi/3$', '$5\pi/3$'])
x = np.linspace(0.0, 6.0, 100)
y = np.cos(2 * np.pi * x) * np.exp(-x)+0.8
z = 0.5 * np.cos(x ** 2)+0.8
note_point,note_text,note_size = (1, np.cos(2 * np.pi) * np.exp(-1)+0.8),(1, 1.4), 14
fig = plt.figure(figsize=(8, 6), facecolor="white")
plt.subplot(111)
Draw("red", note_point, note_text, note_size)
XY_Axis(0, 5, 0, 1.8)
Shadow(0.8, 3)
plt.legend()
plt.savefig('sample.JPG')
plt.show()

霍兰德人格分析雷达图:霍兰德人格分析雷达图:
# -- coding: utf-8 --
import numpy as np
import matplotlib.pyplot as plt
# 如果需要使用中文标签,还需添加以下代码
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为中文黑体
# 数据
data = [[0.40, 0.32, 0.35, 0.30, 0.30, 0.88],
        [0.85, 0.75, 0.30, 0.25, 0.20, 0.40],
        [0.43, 0.89, 0.30, 0.28, 0.22, 0.30],
        [0.20, 0.30, 0.85, 0.45, 0.32, 0.25],
        [0.19, 0.22, 0.40, 0.90, 0.92, 0.28],
        [0.62, 0.55, 0.27, 0.25, 0.35, 0.30]]
 
# 角度(弧度)
angles = np.linspace(0, 2*np.pi, 6, endpoint=False)
 
# 重复第一个角度以使图像闭合
angles = np.concatenate((angles, [angles[0]]))
 
# 职业
occupations = ['工程师', '实验员', '艺术家', '推销员', '记事员', '社会工作者', '技术员']
 
# 绘图
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
for i in range(len(data)):
    # 绘制折线图
    ax.plot(angles, data[i]+data[i][:1], 'o-', linewidth=2, label=occupations[i])
    # 填充颜色
    ax.fill(angles, data[i]+data[i][:1], alpha=0.25)
# 添加坐标轴标签
ax.set_thetagrids(angles*180/np.pi, occupations)
# 添加标题
plt.title('Holland Personality Analysis', fontsize=20)
# 添加图例
plt.legend(loc='best')
# 显示图形
plt.show()

目录
相关文章
|
6天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
9天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
33 0
|
2天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
12 4
|
2天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
11 2
|
8天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
29 7
|
24天前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
8天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
19 3
|
11天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
31 5
|
10天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
24 1
|
19天前
|
数据可视化 数据挖掘 Python
Seaborn 库创建吸引人的统计图表
【10月更文挑战第11天】本文介绍了如何使用 Seaborn 库创建多种统计图表,包括散点图、箱线图、直方图、线性回归图、热力图等。通过具体示例和代码,展示了 Seaborn 在数据可视化中的强大功能和灵活性,帮助读者更好地理解和应用这一工具。
32 3
下一篇
无影云桌面