Matplotlib 如何在时间轴上绘制事件图
我追踪了2019年我看的所有电影,我想用matplotlib、pyplot或seaborn在图表上表示这一年。我看到一个用户的图表,他还跟踪了他一年内看的电影: 如何将每部电影表示为时间轴上的“事件” 作为参考,是看我的表 多谢各位 (抱歉,如果是基本的)根据您的评论,我假设您的Matplotlib 如何在时间轴上绘制事件图,matplotlib,data-visualization,seaborn,Matplotlib,Data Visualization,Seaborn,我追踪了2019年我看的所有电影,我想用matplotlib、pyplot或seaborn在图表上表示这一年。我看到一个用户的图表,他还跟踪了他一年内看的电影: 如何将每部电影表示为时间轴上的“事件” 作为参考,是看我的表 多谢各位 (抱歉,如果是基本的)根据您的评论,我假设您的date列的类型是str。下面是生成图形的代码: 修改您的pd.DataFrame对象 首先,向数据帧添加列的函数: def modify_dataframe(df): """ Modify dataframe
date
列的类型是str
。下面是生成图形的代码:
修改您的pd.DataFrame
对象
首先,向数据帧添加列的函数:
def modify_dataframe(df):
""" Modify dataframe to include new columns """
df['Month'] = pd.to_datetime(df['Date'], format='%Y-%m-%d').dt.month
return df
pd.to_datetime
函数将序列df['Date']
转换为日期时间序列;我正在创建一个名为Month
的新列,它等于月份编号
从该列中,我们可以为绘图生成X
和Y
坐标
def get_x_y(df):
""" Get X and Y coordinates; return tuple """
series = df['Month'].value_counts().sort_index()
new_series = series.reindex(range(1,13)).fillna(0).astype(int)
return new_series.index, new_series.values
这将接收修改后的数据帧,创建一个统计每月发生次数的序列。然后,如果有任何缺少的月份,fillna
用0
的值填充它们。现在可以开始绘图了
绘制图表
我已经创建了一个类似于您链接的所需输出的绘图
首先,调用您的函数:
df = modify_dataframe(df)
X, Y = get_x_y(df)
创建要打印到的画布和轴
fig = plt.figure(figsize=(12,5))
ax = fig.add_subplot(1, 1, 1, title='Films watched per month - 2019')
生成x标签。这将替换x轴上当前月份的int
值(即1、2、3…)
xlabels = [datetime.datetime(2019, i, 1).strftime("%B") for i in list(range(1,13))]
ax.set_xticklabels(xlabels, rotation=45, ha='right')
设置x记号和x标签
ax.set_xticks(range(1,13))
ax.set_xlabel('Month')
设置y轴、y直线和y标签
ax.set_yticks(range(0, max(s1.values)+2))
ax.set_ylim(0, max(s1.values)+1)
ax.set_ylabel('Count')
要获得所需的输出,请在图形下方填充块颜色(我在这里选择了绿色,但您可以将其更改为其他颜色)
画出你的图表
plt.show() # or plt.savefig('output.png', format='png')
根据您的评论,我假设您的日期
列的类型为str
。下面是生成图形的代码:
修改您的pd.DataFrame
对象
首先,向数据帧添加列的函数:
def modify_dataframe(df):
""" Modify dataframe to include new columns """
df['Month'] = pd.to_datetime(df['Date'], format='%Y-%m-%d').dt.month
return df
pd.to_datetime
函数将序列df['Date']
转换为日期时间序列;我正在创建一个名为Month
的新列,它等于月份编号
从该列中,我们可以为绘图生成X
和Y
坐标
def get_x_y(df):
""" Get X and Y coordinates; return tuple """
series = df['Month'].value_counts().sort_index()
new_series = series.reindex(range(1,13)).fillna(0).astype(int)
return new_series.index, new_series.values
这将接收修改后的数据帧,创建一个统计每月发生次数的序列。然后,如果有任何缺少的月份,fillna
用0
的值填充它们。现在可以开始绘图了
绘制图表
我已经创建了一个类似于您链接的所需输出的绘图
首先,调用您的函数:
df = modify_dataframe(df)
X, Y = get_x_y(df)
创建要打印到的画布和轴
fig = plt.figure(figsize=(12,5))
ax = fig.add_subplot(1, 1, 1, title='Films watched per month - 2019')
生成x标签。这将替换x轴上当前月份的int
值(即1、2、3…)
xlabels = [datetime.datetime(2019, i, 1).strftime("%B") for i in list(range(1,13))]
ax.set_xticklabels(xlabels, rotation=45, ha='right')
设置x记号和x标签
ax.set_xticks(range(1,13))
ax.set_xlabel('Month')
设置y轴、y直线和y标签
ax.set_yticks(range(0, max(s1.values)+2))
ax.set_ylim(0, max(s1.values)+1)
ax.set_ylabel('Count')
要获得所需的输出,请在图形下方填充块颜色(我在这里选择了绿色,但您可以将其更改为其他颜色)
画出你的图表
plt.show() # or plt.savefig('output.png', format='png')
先走一步,告诉我们您尝试了什么,然后从那里开始工作
matplotlib
或seaborn
这两种方法都很有用;您也可以直接从pandas
对象进行绘图。我现在知道我需要将日期格式从2019-01-01转换为2019-01等。我不知道如何执行此操作。请先尝试一下,告诉我们您尝试了什么,并从那里开始工作matplotlib
或seaborn
这两种方法都很有用;您也可以直接从pandas
对象打印。我现在知道我需要将日期格式从2019-01-01转换为2019-01等。我不知道如何执行此操作。谢谢您的帮助!但是,当我执行“df=modify_dataframe(df)”部分时,返回一个错误。它说:“天超出了月份的范围”这可能是因为pd.to_datetime
错误地推断了日期格式-我已更新了答案以使用格式
参数。-请再试一次!谢谢你的帮助!但是,当我执行“df=modify_dataframe(df)”部分时,返回一个错误。它说:“天超出了月份的范围”这可能是因为pd.to_datetime
错误地推断了日期格式-我已更新了答案以使用格式
参数。-请再试一次!