编程自学网编程自学网编程自学网

使用python对象创建MatPlotLib

我想将Python对象转换为MatPlotLib图。python对象通过一个pickle文件来。

当打印泡菜文件名-'tstpickelFile'(具有要转换的数据)时,这是输出-

[
OrderedDict([('_time', '2019-11-05T14:39:00.000-08:00'), ('count', '711'), ('_span', '60')]), 
OrderedDict([('_time', '2019-11-05T14:40:00.000-08:00'), ('count', '2823'), ('_span', '60')]), 
OrderedDict([('_time', '2019-11-05T14:41:00.000-08:00'), ('count', '2731'), ('_span', '60')]), 
OrderedDict([('_time', '2019-11-05T14:42:00.000-08:00'), ('count', '2752'), ('_span', '60')]),
OrderedDict([('_time', '2019-11-05T14:42:00.000-08:00'), ('count', '655'), ('_span', '60')])
OrderedDict([('_time', '2019-11-05T14:42:00.000-08:00'), ('count', '1233'), ('_span', '60')])
]
import csvimport numpy as npimport picklefrom collections import Counterfrom matplotlib import pyplot as plt

plt.style.use("fivethirtyeight")

infile = open('tstpickelFile','rb')
new_dict = pickle.load(infile)# print(new_dict)infile.close()

time = []
count = []

top5 = itertools.islice(new_dict, 5)for eachDict in top5: 
    for key, value in eachDict.items():        if(key=="_time"):
                time.append(value)        if(key=="count"):
                count.append(value)

plt.plot(time, count)

plt.title('Time Count graph')

plt.xlabel('Time')
plt.ylabel('count')

plt.legend()
plt.show()

当前有一些问题-

  1. x轴仅显示711、2823、2731、2752、2581。我希望x轴显示0、100、200、300、400(一致的间隔)。这样,折线图就不会是一条直线(因为它是当前状态)。而是一条挥动的线。

  2. 时间应为HH:MM AM / PM格式,且仅提及一次日期。由于tstpickelFile可以包含50个以上的条目,因此“ 2019-11-05T14:39:00.000-08:00”格式将取代整个图表。


对于分割时间,您可以使用字符串分割之类的方式,我认为这将解决您的问题

for key, value in eachDict.items():    if(key=="_time"):
            date, time = str(value).split("T")
            h, m, ex, ext = time.split(":")            if h>12:
                val = str(h-12) + ":" + str(m) + " " + "PM"
            else:
                val = str(h) + ":" + str(m) + " " + "AM"
            time.append(val)    if(key=="count"):
            count.append(value)


未经允许不得转载:编程自学网 » 使用python对象创建MatPlotLib