python办公自动化 --- 可视化
使用python的matplotlib库
可以画出高质量的二维图
matplotlib库画出来的图形
看上去非常美观、有质感
但是有时X轴数据比较多
而图形的显示宽度最大也就是屏幕的宽度
无法显示出来所有的X轴刻度值
或者显示出来的刻度值非常拥挤
无法看的清楚
那么,有没有办法解决呢?
其实,我们可以将关键的X轴数据显示出来
不重要的X轴数据不显示!
认识X轴数据和x轴刻度值
>>> import matplotlib.pyplot as plt
>>> y = [1,4,10,15,25,30]
>>> plt.plot(y)
>>> plt.show()
如果只使用Y轴的数据进行画图,那么函数plot()会默认X轴的数据是Y轴序列数据的索引值,即X轴数据从0开始对应Y轴的第1个值,1对应Y轴的第2个值,以此类推。见下图,X轴的数据或X轴的刻度,就是Y轴序列的索引。
我们再看另一种情况:
>>> x = [1,2,3,6,7,8]
这里X轴的数据是不连续的,中间缺了4和5
>>> y = [10,4,6,15,25,30]
>>> plt.plot(x,y,marker='x')
>>> plt.show()
见下图,尽管我们的X轴数据是不连续的,但是X轴的刻度值是连续的。也就是X轴刻度值会将x数据进行连续化,连续化之后作为X轴的刻度值。
我们再看一种情况:
>>> import numpy as np
>>> x = np.random.rand(10).round(3)
>>> x
array([0.033, 0.094, 0.999, 0.239, 0.152, 0.838, 0.911, 0.234, 0.17 ,0.349])
>>> y = np.random.randint(20,size=10)
>>> y
array([10, 13, 5, 1, 6, 15, 7, 14, 12, 19])
>>> plt.scatter(x,y)
>>> plt.show()
见下图,X轴刻度值将x数据进行均等化,每段间隔相等的距离,然后在X轴上显示出刻度值,此时刻度值就不一定是x数据了。因为x数据可能在间隔的中间,而不是在突出的刻度上,即刻度0.0、0.2、0.4、0.6、0.8、1.0,比如x的数据0.094就在刻度值0.0与刻度值0.2的中间。
我们再看一种情况:
>>> y = np.random.randint(20,size=5)
>>> y
array([ 3, 10, 6, 3, 18])
>>> x = list('cdeab')
>>> x
['c', 'd', 'e', 'a', 'b']
>>> plt.scatter(x,y)
>>> plt.show()
见下图,X轴的刻度值就是x的数据,即X轴刻度值与x数据一一对应。X轴刻度值的顺序与x数据的顺序是一致的,即x是c d e a b,那么x轴刻度值也是c d e a b。
我们再看一种情况:
>>> x
array(['ABW', 'ADO', 'AFG', 'AGO', 'ALB', 'ARE', 'ARG', 'ARM', 'ASM',
'ATG', 'AUS', 'AUT', 'AZE', 'BDI', 'BEL', 'BEN', 'BFA', 'BGD',
'BGR', 'BHR'], dtype=object)
>>> y = np.random.randint(10,size=20)
>>> plt.scatter(x,y)
>>> plt.show()
见下图,x数据是字符串类型,X轴刻度值也与x数据是一一对应的,但是,我们看到由于x数据较多,使得X轴刻度值也较多,由于在X轴上显示的字符空间是有限的,使得X轴看上去很拥挤或密集,效果不太好。
在x数据较多时,我们有时可以让重要的x数据显示出来,其它数据不显示,也就是只显示部分的x轴刻度值,其它空着不显示。
只显示部分X轴刻度值
>>> x
array(['ABW', 'ADO', 'AFG', 'AGO', 'ALB', 'ARE', 'ARG', 'ARM', 'ASM',
'ATG', 'AUS', 'AUT', 'AZE', 'BDI', 'BEL', 'BEN', 'BFA', 'BGD',
'BGR', 'BHR'], dtype=object)
>>> x2 = [s if s in ['AFG','ARM','BDI','BGD'] else '' for s in x]
我们只想让x数据中的['AFG','ARM','BDI','BGD']这些数据显示出来。
>>> x2
['', '', 'AFG', '', '', '', '', 'ARM', '', '', '', '', '', 'BDI', '', '', '', 'BGD', '', '']
>>> plt.scatter(x,y)
>>> plt.xticks(x,x2)
这行代码,是将本来以x数据作为x轴刻度值来显示,更改为以x2的数据作为x轴的刻度值来显示,其中,不显示的数据,x2是空字符串。
>>> plt.show()
见下图,我们看到x轴刻度值只显示了指定的字符串,其它字符串没显示。
我们再看x数据是数字的情况:
>>> y
array([9, 4, 1, 6, 1, 2, 7, 4, 4, 2, 6, 6, 8, 6, 3, 9, 2, 8, 9, 4])
>>> x = np.arange(20)
>>> x2 = [str(s) if s%3==0 else '' for s in x]
注意:这里一定要将x数字转换为字符串格式。
>>> x2
['0', '', '', '3', '', '', '6', '', '', '9', '', '', '12', '', '', '15', '', '', '18', '']
>>> plt.scatter(x,y)
>>> plt.xticks(x,x2)
总结
除了以上只显示x轴的部分刻度值
其实,在现实情况下,
我们还有其它许多关于X轴的显示需求
比如,垂直显示刻度值,
缩小显示x轴部分刻度(x数据极小和极大情况),
等等!
更多python办公自动化案例和经验
请继续关注我们的公众号和头条号
后期会持续进行更新
“白领服务工作室”的系列视频课如下:
Python办公自动化---Python入门课程
Python办公自动化---Python进阶课程
Python办公自动化---正则表达式
Python办公自动化---数据分析
Python办公自动化---网络爬虫
Python办公自动化---Excel表格专栏
Python办公自动化---Pdf专栏
Python办公自动化---Word专栏
Python办公自动化---图像专栏
Excel/WPS表格 --- 数据处理
如需学习以上视频课程,敬请留言!
作者 | 小白
来源 | 原创
编辑 | 白领服务工作室