在绘制时间戳时如何包含2个特定日期和刻度?

时间:2015-11-29 23:44:12

标签: python date datetime pandas matplotlib

当我从csv文件中读取数据时,我使用pandas.tslib.Timestamp将日期信息从字符串转换为pd.to_datetime(df.date)。从这里,我可以绘制数据,并获得如下内容:

enter image description here

我有两个问题:

  1. 日期必须轮换,这是欺骗。看起来好像这个巨大的峰值发生在2014年12月,而实际上它发生在次年2月。
  2. 大穗的日期相对重要,而其他日期(2014年12月除外)则不然。
  3. 我想:

    1. 能够在月份之下写下年份,以便在空间上更经济,或者在x轴上添加刻度,以便明确指出xticks指向的位置。
    2. 对我的xticks更加保守,并确保始终将2014年12月和2015年2月作为刻度列入。
    3. 我理解pandas与Matplotlib日期功能不相符。如何在不必切换到numpy数组的情况下完成我想要的工作?

      我的代码:

      import pandas as pd
      import matplotlib.pyplot as plt
      import datetime as dt
      import numpy as np
      import seaborn as sns
      
      
      palette = sns.color_palette()
      
      plt.close('all')
      
      s = pd.read_csv('all_tweets.csv')
      
      t = pd.to_datetime(s.date)
      
      fig = plt.figure(1)
      ax = plt.gca()
      
      plt.grid('off')
      ax.set_axis_bgcolor('white')
      ax.axhline(0, color = 'k')
      ax.axvline(min(t), color = 'k')
      plt.xlim([min(t), max(t)])
      
      
      
      
      
      
      
      plt.plot(t,s.tweet, color = 'k', linewidth = 10, linestyle = '-', label = 'Tweets')
      
      smoothed = pd.ewma(s.tweet, span = 20, adjust = False)
      l, = plt.plot(t,smoothed, color = 'r', linewidth = 5, linestyle = '--',label = 'Smoothed')
      l.set_dashes([10,6])
      plt.xticks(fontsize = 30, rotation = 45)
      plt.yticks(fontsize = 30)
      
      
      
      plt.xlabel('Date', fontsize = 36,labelpad = 25)
      plt.ylabel('Tweets Per Day', fontsize = 36,labelpad = 25)
      
      
      
      figManager = plt.get_current_fig_manager()
      figManager.window.showMaximized()
      plt.savefig("all_tweets.png",bbox_inches='tight')
      

1 个答案:

答案 0 :(得分:1)

这不是答案,但我需要将其发布,以便您可以查看图形。根据上面链接中的数据和以下转换,这是我的图表:

df = pd.read_csv(file_location...)
df.set_index('date', inplace=True)
df.index = pd.to_datetime(df.index)
df.plot()

enter image description here