如何在时间轴上绘制事件

问题描述 投票:0回答:1

我跟踪了我在2019年观看的所有电影,我想使用matplotlib,pyplot或seaborn在图表上表示年份。我看到一个用户的图表,该用户还跟踪了他一年内观看的电影:I want a graph like this.

我如何在时间轴上将每部电影表示为一个“事件”?

供参考,here是我的桌子。

谢谢

(对不起,如果是基本的话)

matplotlib data-visualization seaborn
1个回答
0
投票

(根据您的评论,我已经假设您的date列为str类型。这是将产生图形的代码:

修改您的pd.DataFrame对象

首先是将列添加到数据框的函数:

def modify_dataframe(df):
    """ Modify dataframe to include new columns """
    df['Month'] = pd.to_datetime(df['Date']).dt.month
    return df

pd.to_datetime函数将序列df['Date']转换为日期时间序列;并且我正在创建一个名为Month的新列,该列等于月份号。

从此列,我们可以为您的绘图生成XY坐标。

def get_x_y(df):
    """ Get X and Y coordinates; return tuple """
    series = df['Month'].value_counts().sort_index()
    new_series = s.reindex(range(1,13)).fillna(0).astype(int)
    return new_series.index, new_series.values

这将使用修改后的数据框,并创建一个统计每个月出现次数的序列。然后,如果缺少任何月份,则fillna0的值填充它们。现在您可以开始绘图了。

绘制图表

我创建了一个绘图,看起来像您链接的所需输出。

首先,调用您的函数:

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-lim和y标签。

ax.set_yticks(range(0, max(s1.values)+2))
ax.set_ylim(0, max(s1.values)+1)
ax.set_ylabel('Count')

要获得所需的输出,请在图形下方填充一个方块色(我在这里选择了绿色,但是您可以将其更改为其他颜色)。

ax.fill_between(X, [0]*len(X), Y, facecolor='green')
ax.plot(X, Y, color="black", linewidth=3, marker="o")

绘制图形!

plt.show()  # or plt.savefig('output.png', format='png')

Plot of films

© www.soinside.com 2019 - 2024. All rights reserved.