Matplotlib 如何在时间轴上绘制事件图

Matplotlib 如何在时间轴上绘制事件图,matplotlib,data-visualization,seaborn,Matplotlib,Data Visualization,Seaborn,我追踪了2019年我看的所有电影,我想用matplotlib、pyplot或seaborn在图表上表示这一年。我看到一个用户的图表,他还跟踪了他一年内看的电影: 如何将每部电影表示为时间轴上的“事件” 作为参考,是看我的表 多谢各位 (抱歉,如果是基本的)根据您的评论,我假设您的date列的类型是str。下面是生成图形的代码: 修改您的pd.DataFrame对象 首先,向数据帧添加列的函数: def modify_dataframe(df): """ Modify dataframe

我追踪了2019年我看的所有电影,我想用matplotlib、pyplot或seaborn在图表上表示这一年。我看到一个用户的图表,他还跟踪了他一年内看的电影:

如何将每部电影表示为时间轴上的“事件”

作为参考,是看我的表

多谢各位

(抱歉,如果是基本的)

根据您的评论,我假设您的
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
错误地推断了日期格式-我已更新了答案以使用
格式
参数。-请再试一次!