matplotlib画图时候x轴的标签过于密集的解决⽅法
matplotlib中subplot此⽅法对于柱状图和直⽅图均奏效。因为我只测试了这两种画法。
我使⽤的数据已经上传到了我的git
数据的⽣成过程,我是通过跑脚本⼀点⼀点收集的。主要收集的⼀个指标就是Seconds_Behind_Master
简单说⼀下数据:就是数据库主从同步的时候,从服务器同步⽐主服务器同步慢了多少秒。因为是每隔5s钟统计⼀次,如果当前的统计中没有延迟,Seconds_Behind_Master为0,这种情况不做统计。
数据有了,做⼀个简单的切分。然后画图。
简单切分⼀下数据
date ="2018-11-08"
ret =[]
with open(path,"r+")as f:
for i in f:
_, _, day, second, _, _, _, num = i.split(" ")
if day == date:
ret.append([second.rstrip(','),int(num.rstrip())])# 预计最多有17280刻度线
label_list, num_list = [i[0] for i in ret], [i[1] for i in ret]
切分完成之后,我们能拿到两个列表。⼀个是label_list,⾥⾯存放的是类似18:00:32 ⼀个是num_list,⾥⾯存放的是延迟秒数。
然后就开始画图
我⽤的是matplotlib,所以需要导包
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,1)
a =list(range(len(label_list)))
plt.bar(left=a, height=num_list, width=0.4, alpha=0.8, color='red')
# plt.plot(a, num_list)
上⾯的就是平时正常情况下画的图,
subplot前⾯俩参数指定的是⼀个画板被分割成的⾏和列,后⾯⼀个参数则指的是当前正在绘制的编号!
那是个什么编号规则呢?就是 ⾏优先数数规则!
我这⾥就画了⼀个图,所以是(1,1)
bar中的两个参数:
left:柱形的左边缘的位置,如果我们指定1那么当前柱形的左边缘的x值就是1.0了
height:这是柱形的⾼度,也就是Y轴的值了
但是因为我的数据太多了。
所以画完之后,xticks就过于密集。x轴的坐标太密集。
解决办法了很久,这⾥我参考了
x轴标签过于密集的解决⽅法
这⾥⾯给的⼀个思路是根据实际情况隐藏⼀些点,从⽽实现正常显⽰。
for label _xticklabels():
label.set_visible(False)
for label _xticklabels()[::20]:
label.set_visible(True)
plt.title(date)
plt.savefig("{}.jpg".format(date), dpi=500)
set_visible(False)是不显⽰,为True是显⽰。这⾥我先默认所有的都不显⽰,然后只展⽰我显⽰的。plt.title()是显⽰标题。
plt.savefig(“1.jpg”, dpi=500)
以500每英⼨内的点数(其实就是提升了图⽚的像素,更容易看)来对图⽚进⾏存储。
参考:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论