格式化x轴值并仅在散点图下显示 - Python中的matplotlib
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
import time
d ={'5000cca234c1c445': {382877: 7, 382919: 3},
'5000cca234c94a2e': {382873: 1, 382886: 1},
'5000cca234c89421': {383173: 1, 383183: 2, 382917: 1, 382911: 1},
'5000cca234c5d43a': {382889: 1, 382915: 1, 382917: 8},
'5000cca234c56488': {382909: 2, 382911: 5}}
colors = list("rgbcmyk")
for data_dict in d.values():
x = data_dict.keys()
y = data_dict.values()
plt.scatter(x,y,color=colors.pop(),s = 60)
plt.ylabel("Errors" , fontsize=18, color="Green")
plt.xlabel("Occured at",fontsize=18, color="Green")
plt.title("DDN44a" , fontsize=25, color="Blue")
plt.gca().get_xaxis().get_major_formatter().set_useOffset(False)
plt.xticks(rotation='vertical')
#plt.ylim(min(y),max(y))
plt.grid()
plt.legend(d.keys())
plt.show()
x轴的值( 382873,382866,382873.......)
是通过下面这行代码使用mktime()
函数转换成日期的。
bin = int(mktime(dt) / 3600)
(我想看看这个错误在一个小时内发生了多少次)在图表上,x轴的值显示为382873,382866,382873等。我想把它们转换回它们代表的日期(格式为MM/DD/YY MM:HH:SS)。另外,我希望日期能直接显示在散点图(点)下面,并且颜色和点一样。
此外,我不确定该在代码的哪里进行更改来解决这个问题。请随意编辑我的代码。谢谢。
1 个回答
1
只需要加上这个:
plt.xticks(plt.xticks()[0], [time.strftime("%m/%d/%y, %H:%M:%S", time.localtime(item)) for item in plt.xticks()[0]*3600])
如果想让日期显示在点的下面,还需要再加两行:
for x, y in dict(itertools.chain(*[item.items() for item in d.values()])).items():
plt.text(x, y, time.strftime("%m/%d/%y, %H:%M:%S", time.localtime(x)), ha='center', va='top')
不过这样看起来会显得很复杂: