001 Python数据可视化之折线图

话说“人是视觉的动物”,本文从可视化入手来展现数据。试想一场景:某制造业工厂的CEO想了解两种成品的次品数及次品率,进而进行下一步决策。对于应用,excel在一定程度上可满足,如下图。

001 Python数据可视化之折线图_第1张图片

 

对于开发,Python[1][2]--作为受众度高的语言[3],在数据分析与可视化方面显现了它的灵涵与内炼,我们可借助较底层最基础的2D绘图库--Matplotlib[4]来进行展现,下面直接上代码来模拟并展现成品的次品数。代码中加了保姆级的注释,预估小白也能懂~

#*****提高图片显示的分辨率,如果无此语句,图片显示不清晰*****

%config InlineBackend.figure_format = 'svg' 

#导入matplotlib的子库pyplot并命名为plt

import matplotlib.pyplot as plt 

import numpy as np

#*****使图形中的中文正常编码显示*****

plt.rcParams['font.sans-serif'] = ['SimHei']

#*****使坐标轴刻度正常显示负号*****

plt.rcParams['axes.unicode_minus'] = False

#模拟生产数据

period = range(-12,0)

compA_defectNum = [10, 8, 9, 12, 9, 10, 9, 5, 4, 5, 3, 4]

compA_dayProduce = 100

compB_defectNum = [26, 28, 25, 24, 25, 22, 20, 8, 9, 10, 7, 8]

compB_dayProduce = 800

#折线绘图

plt.title('成品A和成品B近12个月的次品数', fontsize=13.5)

plt.xlabel('最近12个月(-1表示当月的前1个月)')

plt.ylabel('次品数')

plt.grid(True)

plt.plot(period, compA_defectNum, label='成品A次品数', c='b', ls='--', marker='D', lw=2)

plt.plot(period, compB_defectNum, label='成品B次品数', c='c', ls='-.', marker='o', lw=2)

plt.legend() #*****显示题注*****

#标注次品数及最大值

for comp in [compA_defectNum, compB_defectNum]:

    for a, b in zip(period, comp):

        plt.text(a, b+0.3, '%d'%b, ha='center', va='bottom', fontsize=9) 

    #*****重点标注次品数最大值***** #下句跟for a, b ... 对齐

    plt.annotate('最大值', (period[comp.index(max(comp))],max(comp)),                        (period[comp.index(max(comp))] + 0.5, max(comp)), xycoords='data',arrowprops=dict(facecolor='r', shrink=0.1), c='r',fontsize=10)

#拐点线

plt.vlines(period[6], compA_defectNum[6]-3, compA_defectNum[6]+3, linestyles ="dotted", colors ="r")

plt.vlines(period[6], compB_defectNum[6]-3, compB_defectNum[6]+3, linestyles ="dashed", colors ="r")

#显示水印

c = 0.4 * (min(period) + max(period))

d = min(compA_defectNum) + 1.85 * (max(compA_defectNum)-min(compA_defectNum))

plt.text(c, d, '前第6个月是次品数下降的拐点', ha='center', fontsize=12.5, rotation=-20, c='gray', alpha=0.4)

#设置坐标轴刻度

plt.xlim(-13, 0)

plt.ylim(0, 33.5)

#保存图片 #*****注:savefig要在show前面,否则保存的是空白的图片*****

plt.savefig("001_data_PlotLineChart.png")  

plt.show()

30行代码,就做出如下效果。jupyter环境中添加代码的第一句可提高图片显示分辨率,在.py文件中此句可省。代码中需要特别注意的点已用*****标注,跑代码时可先注释掉来加深领悟,属避坑系列。代码已共享到github,链接https://github.com/futurestar001/data_visualization,包含.py和jupyter双版本。

001 Python数据可视化之折线图_第2张图片

 

有了上面的基础,次品率留作作业了~

此帖旨在总结与分享我在折线图可视化中的一些重要领悟与相关代码示例,如有更优建议,欢迎各位留言与提前感谢不吝赐教,希望能帮到想学习/了解此方面知识的伙伴们~

参考文献或网站:

[1] Python, https://www.python.org/

[2] Python, https://m.runoob.com/python/

[3] TOIBE, https://www.tiobe.com/tiobe-index/

[4] Matplotlib, https://www.matplotlib.org.cn/tutorials/

你可能感兴趣的:(Python数据可视化,信息可视化,数据分析,excel,python,matplotlib)