在1中对pyplot
进行了初步的介绍,下面是一些2d图,如折线图、柱形图、饼状图、散点图的绘制教程。内容主要围绕pyplot接口进行。
折线图
在matplotlib
中折线图主要通过matplotlib.pyplot.plot
函数实现,其基础的用法主要包括两种:plot(x, y)
和plot(x)
。其中前者主要是绘制数据x
和y
的可视化关系,后者用于直接显示一维数据。下面分别两种方法的示例,生成数据x
及其sin
和cos
值,并通过两种方法绘制。
plot(x, y)
# 导入需要的库和函数
import matplotlib.pyplot as plt
import numpy as np
# 生成数据x和y
x = np.arange(0,2,0.01)
y1 = np.sin(2*np.pi*x)
y2 = np.cos(2*np.pi*x)
# 绘图
plt.plot(x,y1,c="r",linestyle="-.",linewidth=2,label="sin")
plt.plot(x,y2,c="b",linestyle="-.",linewidth=2,label="cos")
plt.legend()
plt.xlabel("x")
plt.ylabel("y")
plt.show()
plot(x)
# 导入需要的库和函数
import matplotlib.pyplot as plt
import numpy as np
# 生成数据x和y
x = np.arange(0,2,0.01)
y1 = np.sin(2*np.pi*x)
y2 = np.cos(2*np.pi*x)
# 绘图
plt.plot(y1,c="r",linestyle="-.",linewidth=2,label="sin")
plt.plot(y2,c="b",linestyle="-.",linewidth=2,label="cos")
plt.legend()
plt.xlabel("x")
plt.ylabel("y")
plt.show()
可以发现二者基本一致,仅在x轴的范围有所不同,观察两部分的绘图函数可以发现,前者固定了x
轴,范围被固定在0-2
;后者使用了默认的x
轴,因此是0-199
。在plot
函数中,常用的控制参数有粗细linewidth
、颜色color
、格式linestyle
,标签label
;plt.legend()
用于显示标签图例;plt.xlabel("x")
和plt.ylabel("y")
用于显示x
轴、y
轴标签。具体参数对应的样式可见 link。
柱形图
柱形图主要通过matplotlib.pyplot.bar函数实现,绘制方法可分为简单柱形图和簇状柱形图,簇状柱形图是将多个柱形图并列在同一组,方便比较不同类别之间的数据。
简单柱形图
import matplotlib.pyplot as plt
# 数据
categories = ['A', 'B', 'C', 'D'] # 类别
values = [10, 20, 15, 25] # 值
# 创建柱形图
plt.bar(categories, values,width=0.3,color = 'c')
# 设置标题和标签
plt.title('Simple bax')
plt.xlabel('Category')
plt.ylabel('Value')
# 显示图形
plt.show()
其中plt.bar(categories, values,width=0.3,color = 'c')
中,width是控制柱形图粗细,用于美化。
簇状柱形图
簇状柱形图用于比较多个类别中多个组别之间数据的柱形图。现在还是A-D四个类别的数据,假设我们有三组这样的数据,即Group1
、Group2
、Group3
。簇状柱形图绘制如下:
import matplotlib.pyplot as plt
import numpy as np
# 数据
categories = ['A', 'B', 'C', 'D'] # 类别
values1 = [10, 20, 15, 25] # Group1
values2 = [12,18,22,16] # Group2
values3 = [8,17,14,24] # Group3
groups = 3
width = 0.3
x = np.arange(len(categories))
# 创建柱状图
plt.bar(x, values1,width=width,label="Group1")
plt.bar(x+width, values2,width=width,label="Group2")
plt.bar(x+2*width,values3,width=width,label="Group3")
# 设置 x 轴刻度标签
plt.xticks(x+3*width/2-width/2, categories)
# 设置标题和标签
plt.title('Simple bax')
plt.xlabel('Category')
plt.ylabel('Value')
plt.legend()
# 显示图形
plt.show()
与简单柱形图不同,为了避免同一类别中的各组柱形重叠,簇状柱形图需要需要为每个组的柱形计算适当的 x 轴位置。这通常通过调整柱形的偏移量来实现。x+2*width
可以这样理解,以第1个数据为基础,第2个数据则需要向后偏移1*width
,第3个数据则需要向后偏移2*width
。plt.xticks(x+3*width/2-width/2, categories)
设置x
轴的刻度和标签,x+3*width/2-width/2
以第一个数据的柱形中心为原始点,因为有三组数据因此需要偏移3*width/2-width/2
,3*width/2
为3条数据柱形中心,因为x
的默认位置是第一个数据数据中心,因此要减去width/2
。更多参数和细节见link。
饼状图
饼状图可以表示数据分类和相对大小的可视化图形,其常用于展示数据的分布和比例关系,特别是当需要强调每个部分相对于整体的重要性时。图形绘制主要通过matplotlib.pyplot.pie
函数进行。
饼状图
import matplotlib.pyplot as plt
plt.rcParams['font.family']="SimHei" # 中文字体
# 准备数据
labels = ['A', 'B', 'C', 'D','E']
sizes = [15, 30, 45, 20,35]
# 绘制饼状图
plt.pie(sizes, labels=labels,autopct='%1.1f%%',startangle=30)
# 添加图例
plt.legend()
# 添加标题
plt.title('饼状图')
# 显示图表
plt.show()
代码中startangle
参数用于设置饼图的起始角度;autopct
设置每个部分的百分比显示格式。这里并没有对颜色color
、explode等参数进行设置,更多详细参数见link。
散点图
散点图用于显示两个变量之间的关系,通常用于寻找变量之间的相关性。Matplotlib
库中的plt.scatter
函数可以用来绘制散点图。
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = "SimHei"
# 准备数据
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
# 绘制散点图
plt.scatter(x, y, color='r', marker='*')
# 添加标题和轴标签
plt.title('散点图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 显示图表
plt.show()
主要参数marker
用于设置散点的形状,更多的函数参数可见link。
上述就是一些简单的二维图的绘制教程,可以基础使用,进一步美化深入还需要查阅更详细的资料,具体参考资料如下:
[1] https://matplotlib.org/stable/api/index.html
[2] https://datawhalechina.github.io/fantastic-matplotlib/index.html
[3] https://www.matplotlib.org.cn/