第三章;图表辅助元素的定制
3.1 认识图表常用的辅助元素
图表的辅助元素是指除根据数据绘制的图形之外的元素,常用的辅助元素包括坐标轴、标题、图例、网格、参考线、注释文本和表格,他们都可以对图形进行补充说。 3.2设置坐标轴的标签、刻度范围和刻度标签 坐标轴对数据可视化效果有着直接的影响。坐标轴的刻度范围过大或过小、刻度标签过多或过少,都会导致图形显示的比例不够理想。 3.2.1 设置坐标轴的标签 matplotlib提供了设置x轴和y轴标签的方式,下面分别进行介绍 1.设置x轴的标签 matplotlib中可以直接使用pyplot模块的xlabel()函数设置x轴的标签,xlabel()函数的语法格式如下:
xlabel(xlabel,fontdict=None,labelpad=None,**kwargs)
2.设置y轴的标签 matplotlib中可以直接使用pyplot模块的ylabel()函数设置y轴的标签,ylabel()函数的语法格式如下:
ylabel(ylabel,fontdict=None,labelpad=None,**kwargs)
案例1: 假设现在有一个包含正弦曲线和余弦曲线的图表,改图表中设置x轴和y轴的标签,具体代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
plt.plot(x, y1, x, y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.title("2020080603052")
plt.show()
运行程序,效果如下图: 3.2.2 设置刻度线和刻度标签 当我们绘制图表时,坐标轴的刻度范围和刻度标签都与数据的分布有这直接的联系,即坐标轴的刻度范围取决于数据的最大值和最小值。下面我们来介绍matplotlib提供了数据重新设置坐标轴的刻度范围和刻度标签的方式,下面我们来进行介绍: 1.设置刻度范围 使用pyplot模块的xlim()和ylim()函数分别可以设置或获取x轴和y轴的刻度范围。xlim()函数的语法如下所示:
xlim(left+None,right=None,emit=True,auto=False,*,xmin=None,xmax=None)
2.设置刻度标签 使用pyplot模块的xticks()和yticks()函数分别可以设置或获取x轴和y轴的刻度范围。xticks()函数的语法如下所示:
xticks(ticks=None,labels=None,**kwarges)
案例2: 代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
plt.plot(x, y1, x, y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min() * 1.5, x.max() * 1.5)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-pi$', r'$-pi/2$',
r'$0$', r'$pi/2$', r'$pi$'])
plt.title("2020080603052")
plt.show()
运行代码,结果如下:
3.3 添加标题与图例
标题格式代码如下:
title(label,fontdict=None,loc='center',pad=None,**kwarges)
图例格式代码如下:
legend(handles,labels,loc,bbox_to_anchor,ncol,title,shadow,fancybox,*args,**kwargs)
案例3: 代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
lines = plt.plot(x, y1, x, y2)
plt.plot(x, y1, x, y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min() * 1.5, x.max() * 1.5)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$',
r'$0$', r'$\pi/2$', r'$\pi$'])
plt.title("正弦曲线和余弦曲线 2020080603052")
plt.legend(lines, ['正弦','余弦'], shadow=True, fancybox=True)
plt.show()
运行代码,结果如下: 案例4: 代码如下:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用', '交通出行', '休闲娱乐', '其他']
money_scale = [800 / 3000, 100 / 3000, 1000 / 3000, 200 / 3000,
300 / 3000, 200 / 3000, 200 / 3000, 200 / 3000]
dev_position = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
plt.pie(money_scale, autopct='%3.1f%%', shadow=True,
explode=dev_position, startangle=90)
plt.title('支付宝月账单报告 2020080603052')
plt.legend(kinds, loc='upper right', bbox_to_anchor=[1.5, 1.1])
plt.show()
运行代码 结果如下:
3.4 显示网格
显示网格可以帮助我们轻松地查看图形的数值,网格的格式代码如下:
grid(b=None,which='Major',axis='both',**kwargs)
案例5: 代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
x_speed = np.arange(10, 210, 10)
y_distance = np.array([0.5, 2.0, 4.4, 7.9, 12.3,
17.7, 24.1, 31.5, 39.9, 49.2,
59.5, 70.8, 83.1, 96.4, 110.7,
126.0, 142.2, 159.4, 177.6, 196.8])
plt.scatter(x_speed, y_distance, s=50, alpha=0.9, linewidths=0.3)
plt.xlabel('速度(km/h)')
plt.ylabel('制动距离(m)')
plt.xticks(x_speed)
plt.title("2020080603052")
plt.grid(b=True, linewidth=0.3)
plt.show()
运行代码,结果如下:
3.5 添加参考线和参考区域
3.5.1 添加参考线 1.使用axline()绘制水平参考线 axline()函数的格式代码如下:
axline(y=0,xmin=0,xmax=1,linestyle='_',**kwargs)
2.使用axvline()绘制垂直参考线
axline(x=0,ymin=0,ymax=1,linestyle='_',**kwargs)
案例6: 代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
lines = plt.plot(x, y1, x, y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min() * 1.5, x.max() * 1.5)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$',
r'$0$', r'$\pi/2$', r'$\pi$'])
plt.title("正弦曲线和余弦曲线 2020080603052")
plt.legend(lines, ['正弦', '余弦'], shadow=True, fancybox=True)
plt.grid(b=True, axis='y', linewidth=0.3)
plt.axvline(x=0, linestyle='--')
plt.axhline(y=0, linestyle='--')
plt.show()
运行代码,结果如下: 3.5.2添加参考区域: 1.使用axhspan()绘制水平参考区域 格式代码如下:
axhspan(ymin,ymax,xmin=0,xmax,**kwarges)
2.使用axvspan()绘制参考区域: 格式代码如下:
axvspan(xmin,xmax,ymin=0,ymax=1,**kwargs)
案例7: 代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
lines = plt.plot(x, y1, x, y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min() * 1.5, x.max() * 1.5)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$',
r'$0$', r'$\pi/2$', r'$\pi$'])
plt.title("正弦曲线和余弦曲线 2020080603052")
plt.legend(lines, ['正弦', '余弦'], shadow=True, fancybox=True)
plt.grid(b=True, axis='y', linewidth=0.3)
plt.axvline(x=0, linestyle='--')
plt.axhline(y=0, linestyle='--')
plt.axvspan(xmin=0.5, xmax=2.0, alpha=0.3)
plt.axhspan(ymin=0.5, ymax=1.0, alpha=0.3)
plt.show()
运行代码,结果如下: 案例7: 代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
men_means = (90.5, 89.5, 88.7, 88.5, 85.2, 86.6)
women_means = (92.7, 87.0, 90.5, 85.0, 89.5, 89.8)
ind = np.arange(len(men_means))
width = 0.2
fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(ind - width / 2, men_means, width, label='男生平均成绩')
ax.bar(ind + 0.2, women_means, width, label='女生平均成绩')
ax.set_title(' 高二各班男生、女生英语平均成绩 2020080603052')
ax.set_ylabel('分数')
ax.set_xticks(ind)
ax.set_xticklabels(['高二1班', '高二2班', '高二3班', '高二4班', '高二5班', '高二6班'])
ax.axhline(88.5, ls='--', linewidth=1.0, label='全体平均成绩')
ax.legend(loc="lower right")
plt.show()
运行代码,结果如下:
3.6 添加注释文本
3.6.1 添加指向型注释文本 格式代码如下:
annotate(s,xy,*arges,**kwarges)
3.6.2 添加五指向型注释文本 格式代码如下:
text(x,y,s,fontdict=None,withdash<deprecated parameter>,**kwargs)
案例8: 代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
lines = plt.plot(x, y1, x, y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min() * 1.5, x.max() * 1.5)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$',
r'$0$', r'$\pi/2$', r'$\pi$'])
plt.title("正弦曲线和余弦曲线 2020080603052")
plt.legend(lines, ['正弦', '余弦'], shadow=True, fancybox=True)
plt.grid(b=True, axis='y', linewidth=0.3)
plt.axvline(x=0, linestyle='--')
plt.axhline(y=0, linestyle='--')
plt.axvspan(xmin=0.5, xmax=2.0, alpha=0.3)
plt.axhspan(ymin=0.5, ymax=1.0, alpha=0.3)
plt.annotate("最小值",
xy=(-np.pi / 2, -1.0),
xytext=(-(np.pi / 2), -0.5),
arrowprops=dict(arrowstyle="->"))
plt.text(3.10, 0.10, "y=sin(x)", bbox=dict(alpha=0.2))
plt.show()
运行代码,结果如下: 案例9: 代码如下:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(1, 8)
y = np.array([10770, 16780, 24440, 30920, 37670, 48200, 57270])
bar_rects = plt.bar(x, y, tick_label=["FY2013", "FY2014", "FY2015",
"FY2016", "FY2017", "FY2018", "FY2019"], width=0.5)
def autolabel(rects):
""" 在每个矩形条的上方附加一个文本标签, 以显示其高度"""
for rect in rects:
height = rect.get_height()
plt.text(rect.get_x() + rect.get_width() / 2, height + 300, s='{}'.format(height),
ha='center', va='bottom')
autolabel(bar_rects)
plt.ylabel('GMV(亿元)')
plt.title("2020080603052")
plt.show()
运行代码,结果如下:
3.7 添加表格
3.7.1 添加自定义样式的表格 格式代码如下:
table(cellText=None,cellColours=None,cellLoc='right',colWidth=None,rowLabels=None,rowColours=None,rowLoc='left',colLabels=None,colColours=None,colLoc='center',loc='bottom',bbox=None,edges='closed',**kwargs)
案例10: 代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
lines = plt.plot(x, y1, x, y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min() * 1.5, x.max() * 1.5)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$',
r'$0$', r'$\pi/2$', r'$\pi$'])
plt.title("正弦曲线和余弦曲线 2020080603052")
plt.legend(lines, ['正弦', '余弦'], shadow=True, fancybox=True)
plt.grid(b=True, axis='y', linewidth=0.3)
plt.axvline(x=0, linestyle='--')
plt.axhline(y=0, linestyle='--')
plt.axvspan(xmin=0.5, xmax=2.0, alpha=0.3)
plt.axhspan(ymin=0.5, ymax=1.0, alpha=0.3)
plt.annotate("最小值",
xy=(-np.pi / 2, -1.0),
xytext=(-(np.pi / 2), -0.5),
arrowprops=dict(arrowstyle="->"))
plt.text(3.10, 0.10, "y=sin(x)", bbox=dict(alpha=0.2))
plt.table(cellText=[[6, 6, 6], [8, 8, 8]],
colWidths=[0.1] * 3,
rowLabels=['第1行', '第2行'],
colLabels=['第1列', '第2列', '第3列'], loc='lower right')
plt.show()
运行代码,结果如下:
|