Python数据可视化第三节

第三章;图表辅助元素的定制

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()

运行程序,效果如下图:

Python数据可视化第三节
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()

运行代码,结果如下:

Python数据可视化第三节

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()

运行代码,结果如下:

Python数据可视化第三节
案例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()

运行代码 结果如下:

Python数据可视化第三节

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()

运行代码,结果如下:

Python数据可视化第三节

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()

运行代码,结果如下:

Python数据可视化第三节
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()

运行代码,结果如下:

Python数据可视化第三节
案例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()

运行代码,结果如下:

Python数据可视化第三节

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()

运行代码,结果如下:

Python数据可视化第三节
案例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()

运行代码,结果如下:

Python数据可视化第三节

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()

运行代码,结果如下:

Python数据可视化第三节

Original: https://blog.csdn.net/weixin_55680181/article/details/123424961
Author: 张荣博2003
Title: Python数据可视化第三节

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/696135/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球