1.效果展示
主要效果就是,x轴 显示时间单位。
下图展示的就是想要到达的效果。
其实主要是运用了datetime.date这个类型的变量作为x轴坐标的数据输入。
2. 源码
将data.txt中的数据读入,用matplotlib中的pyplot画出,x轴为时间。
数据文本 data.txt,除了第一行表头外,每一列都用制表符Tab(\t)隔开。
原创 粉丝 喜欢 评论 等级 访问 积分 排名 2018/06/01 69 134 266 64 5 309132 3345 12956 2018/06/05 72 137 267 65 5 312383 3390 12832 2018/06/10 74 141 268 68 5 316417 3432 12629 2018/06/11 75 142 269 69 5 317327 3448 12629 2018/06/14 76 148 270 70 5 319695 3469 12499 2018/06/15 79 149 278 73 5 320697 3514 12590 2018/06/23 84 149 278 73 5 325308 3582 12186 2018/06/24 84 149 278 73 5 325583 3583 12233 2018/06/25 84 149 278 73 5 326008 3584 12038 2018/06/25 84 149 279 73 5 326039 3584 12038
程序源码:
# read csdn data from datetime import datetime import matplotlib.pyplot as plt #引入绘图库 if __name__ == '__main__': # 打开文本文件 读取数据 with open("data.txt",'r',encoding='utf-8') as f: data_lines = f.readlines() l_time = [] l_article = [] l_fans = [] l_like = [] l_remark = [] l_level = [] l_visit = [] l_score = [] l_rank = [] num = len(data_lines) # ################ # 整理数据 # ################ for i in range(1,num): line = data_lines[i]#从第1行开始[0行开始计数] if len(line) < 2: continue #这行明显不是有效信息 data = line.split('\t') time = data[0] # 使用最新日期的数据 if len(l_time) != 0: if time == l_time[-1]:#如果这一行时间与上一行的时间相等,删除上一行数据 print('删除上一行:' + time) l_time.pop(-1) #删除上一行记录的数据 l_article.pop(-1) l_fans.pop(-1) l_like.pop(-1) l_remark.pop(-1) l_level.pop(-1) l_visit.pop(-1) l_score.pop(-1) l_rank.pop(-1) arti = int(data[1]) fans = int(data[2]) like = int(data[3]) rmak = int(data[4]) leve = int(data[5]) visi = int(data[6]) scor = int(data[7]) rank = int(data[8]) l_time.append(time) l_article.append(arti) l_fans.append(fans) l_like.append(like) l_remark.append(rmak) l_level.append(leve) l_visit.append(visi) l_score.append(scor) l_rank.append(rank) # ################ # 画图 # ################ # X坐标,将str类型的数据转换为datetime.date类型的数据,作为x坐标 xs = [datetime.strptime(d, '%Y/%m/%d').date() for d in l_time] plt.figure(1) plt.subplot(1, 3, 1) plt.title('Visit Number') plt.plot(xs, l_visit, 'o-') plt.xlabel('Time') plt.ylabel('Visit Number') # 只画最后一个元素点 - 数据点在文字的↘右下,文字在↖左上 plt.text(xs[-1], l_visit[-1], l_visit[-1], ha='right', va='bottom', fontsize=10) plt.subplot(1, 3, 2) plt.title('Rank') plt.plot(xs, l_rank, 'o-') plt.xlabel('Time') plt.ylabel('Rank') # 只画最后一个元素点 - 数据点在文字的↗右上,文字在↙左下 plt.text(xs[-1], l_rank[-1], l_rank[-1], ha='right', va='top', fontsize=10) plt.subplot(1, 3, 3) plt.title('Score') plt.plot(xs, l_score, 'o-') plt.xlabel('Time') plt.ylabel('Score') # 只画最后一个元素点 - 数据点在文字的↘右下,文字在↖左上 plt.text(xs[-1], l_score[-1], l_score[-1], ha='right', va='bottom', fontsize=10) plt.gcf().autofmt_xdate() # 自动旋转日期标记 # show plt.show()
3. 分析
主要就是matplotlib.pyplot()可以支持datatime.date类型的变量。
datetime.strptime(str, '%Y/%m/%d').date()
在shell里的运行情况:
In [5]: var = datetime.strptime('2018/3/15', '%Y/%m/%d').date() In [6]: var Out[6]: datetime.date(2018, 3, 15) In [7]: type(var) Out[7]: datetime.date
所以,源码中变量xs为含有一群datetime.date变量的list。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: 我正在尝试根据日期绘制信息。我有日期列表,格式为“ 01/02/1991”。 我通过执行以下操作来转换它们: 这使 然后我尝试使用num2date 绘图: 但是我得到一个错误。它显示“ ValueError:年份超出范围”。有什么办法吗? 问题答案: 就像@KyssTao所说的那样,必须是一个浮点数,其中要给出从0001-01-01开始的天数加一。因此,它不是1991年1月2日,因为如
问题内容: 我正在尝试在x轴上绘制日期图,在y轴上绘制值。它工作正常,但无法获得适当的X轴范围。尽管我的日期是今天,但x轴范围始终是2012年1月至2016年1月。我什至指定xlim应该是第一个和最后一个日期。 我正在为python-django写这个,如果相关的话。 问题答案: 从OP看到实际数据后,所有值都在同一日期/时间。因此matplotlib自动将x轴缩小。你仍然可以手动设置对象的x轴限
问题内容: 我正在尝试使用动画制作两个子图。我希望x轴的值随着动画的进行而增加,以使动画的总长度为100,但在任何时候,子图仅向我显示0到24的时间值,然后迭代到100。 这里有一个很好的例子。链接使用并递增x值以滚动方式使用和更新x轴标签。可通过提供的链接中YouTube视频下方的链接获得代码。 我在下面附加了代码,这些代码显示了我尝试复制这些结果的尝试,但x限制似乎采用其最终值,而不是随时间增
问题内容: 我将数据存储在以下结构的数组中, 第一列是纪元时间(in ms),第二列是y1,第三列是y2。我 需要一个在x轴y1和y2左,右 y轴上都有时间的图。 我一直在仔细阅读文档,但找不到任何方法来 显示我的x轴刻度,以显示日期和时间,例如“ 28/12 16:48”,即 “ date / month hour:min”。所有文档帮助我的是 仅显示日期,但这不是我想要的。任何帮助将不胜感激。
问题内容: 我尝试使用以下代码在具有日期时间x轴的图形上绘制矩形: 但是,我得到了错误: 怎么了 (我正在使用matplotlib 1.0.1版) 问题答案: 问题在于,matplotlib使用其自己的日期/时间表示形式(浮动天数),因此您必须先进行转换。此外,您将不得不告诉xaxis它应该具有日期/时间刻度和标签。下面的代码可以做到这一点: 结果: 注意 :Matplotlib 1.0.1 非常
我正在从csv文件中读取日期/时间和数据,并将其存储在折线图中。我的日期/时间字符串是或,这实际上是第一个条目,我有几个小时的数据。 首先,我将chartArea X轴lablestyle设置为正确的格式:。 然后,我使用与上面相同的格式将实际的日期字符串解析为DateTime格式:。并将数据添加到图表中。