Python - Matplotlib绘图库使用详解3(图像大小、保存图片、中文显示、多图绘制)
作者:hangge | 2022-08-08 08:10
四、图像大小、保存图片、中文显示问题
1,图像大小
figure 方法可以指定创建图形对象的尺寸,具体参数如下:
- figsize:指定绘图对象的宽度和高度,单位为英寸。
- dpi:指定绘图对象的分辨率,即每英寸多少个像素,默认值为 80。
import matplotlib.pyplot as plt #图像宽度为4*80=320,高度为2*80=160 plt.figure(figsize=(4,2)) #准备数据 langs = ['C', 'C++', 'Java', 'Python', 'PHP'] students = [23,17,35,29,12] #绘制柱状图 plt.bar(langs,students) plt.show()
2,保存图片
使用 savefig() 方法可以将当前的 Figure 对象保存成图像文件,图像格式由图像文件的扩展名决定。
import matplotlib.pyplot as plt #准备数据 langs = ['C', 'C++', 'Java', 'Python', 'PHP'] students = [23,17,35,29,12] #绘制柱状图 plt.bar(langs,students) plt.savefig("test.png", dpi=120)
3,解决中文显示问题
Matplotlib 默认不支持中文字体,这因为 Matplotlib 只支持 ASCII 字符,直接使用中文时,绘制的图像会出现方框中文乱码。如果要使用中文,只需将下面高亮部分代码添加到添加到我们程序中即可:
import matplotlib.pyplot as plt #解决中文显示问题 from pylab import mpl mpl.rcParams['font.sans-serif'] = ['STZhongsong'] # 指定默认字体:解决plot不能显示中文问题 mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问 #准备数据 langs = ['星期一', '星期二', '星期三', '星期四', '星期五'] students = [23,17,35,29,12] #绘制柱状图 plt.bar(langs,students) plt.show()
五、同时绘制多个子图
1,使用 subplot() 函数
(1)有时我们需要将一张画布划分为若干个子区域,然后在这些区域上绘制不同的图形。这个借助 subplot() 函数即可实现,它可以均等地划分画布。
函数格式为 subplot(nrows, ncols, index):
- nrows 与 ncols 表示要划分几行几列的子区域(nrows * nclos 表示子图数量),index 的初始值为 1,用来选定具体的某个子区域。subplot(2,3,3) 表示在当前画布的右上角创建一个两行三列的绘图区域,同时,选择在第 3 个位置绘制子图。
- 如果三个参数数都小于 10 的话,可以把它们缩写为一个整数,例如 subplot(323) 和 subplot(3,2,3) 是相同的。
import matplotlib.pyplot as plt # 第一行的左图 plt.subplot(221) plt.bar(['C', 'C++', 'Java'], [12, 34, 45], color='r') # 第一行的右图 plt.subplot(222) plt.bar(['Cat', 'Dog', 'Bird', 'Fish'], [22, 33, 14, 56], color='g') # 第二整行 plt.subplot(212) plt.plot(["Mon", "Tues", "Wed", "Thur", "Fri","Sat","Sun"],[25, 40, 35, 30, 42, 66, 20]) plt.show()
(2)如果新建的子图与现有的子图重叠,那么重叠部分的子图将会被自动删除,因为它们不可以共享绘图区域。如果不想覆盖之前的图,需要使用 add_subplot() 函数,
import matplotlib.pyplot as plt fig = plt.figure() #添加第1个子图区域 fig.add_subplot(111) plt.plot(["Mon", "Tues", "Wed", "Thur", "Fri","Sat","Sun"],[25, 66, 35, 30, 42,22, 20]) #添加第1个子图区域 fig.add_subplot(233, facecolor='y') plt.bar(['C', 'C++', 'Java'], [12, 34, 45], color='g') plt.show()
2,使用 subplots() 函数
subplots() 函数使用方法和 subplot() 函数类似。其不同之处在于,subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象,而 subplot() 只是创建一个包含子图区域的画布。下面样例创建了一个 2 行 2 列的子图,并在每个子图中显示 4 个不同的图像。
import matplotlib.pyplot as plt fig,ax = plt.subplots(2,2) # 第一行的左图 ax[0][0].bar(['C', 'C++', 'Java'], [12, 34, 45], color='r') # 第一行的右图 ax[0][1].bar(['Cat', 'Dog', 'Bird', 'Fish'], [22, 33, 14, 56], color='g') # 第二行的左图 ax[1][0].plot(["Mon", "Tues", "Wed", "Thur", "Fri","Sat","Sun"],[25, 40, 35, 30, 42, 66, 20]) # 第二行的左图 ax[1][1].plot(["A", "B", "C"],[22, 23, 13]) plt.show()
3,使用 subplot2grid() 函数
(1)subplot2grid() 函数能够在画布的特定位置创建 axes 对象(即绘图区域)。不仅如此,它还可以使用不同数量的行、列来创建跨度不同的绘图区域。与 subplot() 和 subplots() 函数不同,subplot2gird() 函数以非等分的形式对画布进行切分,并按照绘图区域的大小来展示最终绘图结果。
plt.subplot2grid(shape, location, rowspan, colspan) 参数说明如下:
- shape:把该参数值规定的网格区域作为绘图区域;
- location:在给定的位置绘制图形,初始位置 (0,0) 表示第 1 行第 1 列;
- rowsapan:用来设置让子区跨越几行;
- colspan:用来设置让子区跨越几列。
(2)下面是一个简单的使用样例:
import matplotlib.pyplot as plt #左上的图 plt.subplot2grid((3,3),(0,0),colspan = 2) plt.bar(['C', 'C++', 'Java'], [12, 34, 45], color='r') #左下的图 plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 2) plt.bar(['Cat', 'Dog', 'Bird', 'Fish'], [22, 33, 14, 56], color='g') #右侧的图 plt.subplot2grid((3,3),(0,2), rowspan = 3) plt.plot(["A", "B", "C"],[22, 23, 13]) #调整子图间距 plt.tight_layout() plt.show()
全部评论(0)