如何在 matplotlib(Python) 中有效地绘制日期?

问题描述

以下代码绘制了 2021 年 1 月至 7 月在印度的所有 Covid-19 测试用例。 记录是每天的,但我的 scatterplot显示 17 点并且日期重叠。有什么有效的方法可以做到这一点吗?

df.to_numpy()
df1 = df[(df.date.str.endswith("21")) & (df.location == "India")]
plt.scatter(x=df1.date,y=df1.total_cases)

这是图表:

enter image description here

非常感谢

解决方法

您可以使用 xticks 属性以任意角度旋转

plt.xticks(rotation=45)
,

让我们首先创建一个玩具数据框:

data = [[f"{i%30+1:02}/{6+i//30:02}/21",np.random.randint(i,i+10)**2] 
        for i in range(5,50)]
df = pd.DataFrame(data,columns=["date","total_cases"])

我建议将日期转换为日期格式,以便在一般情况下更容易处理,尤其是 matplotlib 以适应其轴。

df.date = pd.to_datetime(df.date,format="%d/%m/%y")

现在 matplotlib 可以处理它并且可以选择适当数量的 x-ticks。由于标签比较长,我们也可以旋转一下。

plt.plot(df.date,df.total_cases,'.')
plt.xticks(rotation=25,ha="right")
plt.tight_layout()
plt.show()

版本 3.4。 Matplotlib 提供了一种在 x 轴上显示日期的便捷方式:

plt.rcParams['date.converter'] = 'concise'
plt.plot(df.date,'.')
plt.tight_layout()
plt.show()

left: rotation; right: rcParams date.converter