我怎样才能让 xticks 在我的 matplotlib 图上有一个每月间隔而不是每天

Posted

技术标签:

【中文标题】我怎样才能让 xticks 在我的 matplotlib 图上有一个每月间隔而不是每天【英文标题】:How can I get xticks to have a monthly interval instead of daily on my matplotlib plot 【发布时间】:2020-11-29 01:37:50 【问题描述】:

我有一个索引为日期时间的数据框。 有重复的索引。这是df.head()

                  Landing         Date           Boat    Trip Type  Anglers ... Albacore    Barracuda   Total Caught
Date                                                                                    
2020-01-01  daveys-locker   2020-01-01      Freelance      3/4 Day       55 ...        0            0            223
2020-01-01  daveys-locker   2020-01-01  Western Pride   1/2 Day PM       38 ...        0            0            137
2020-01-02  daveys-locker   2020-01-02      Freelance      3/4 Day       75 ...        0            0            185
2020-01-02  daveys-locker   2020-01-02  Western Pride   1/2 Day PM       38 ...        0            0            144
2020-01-03  daveys-locker   2020-01-03      Freelance      3/4 Day       77 ...        0            0            395

我尝试了几种方法来让xticks 不显示每一天或每个索引(甚至无法分辨,因为有这么多)。这是我的原作。

fig, ax = plt.subplots(figsize=(40,25))
chart = sbn.scatterplot(x='Date',y='Total Caught',data=daveysdf_2019, hue='Boat', style='Trip Type',s=150)
ax.set_title('Daveys Locker 2019 Totals')
ax.legend(framealpha=0.5)
chart.set_xticklabels(labels=daveysdf_2019.Date.unique(),rotation=75)
figure = chart.get_figure()

我尝试将set_major_locatormatplotlib.dates.MonthLocatorformatter 一起使用,但最终没有显示任何xticks

from matplotlib.dates import MonthLocator, DateFormatter
fig, ax = plt.subplots(figsize=(40,25))
chart = sbn.scatterplot(x='Date',y='Total Caught',data=daveysdf_2019, hue='Boat', style='Trip Type',s=150)
ax.set_title('Daveys Locker 2019 Totals')
ax.legend(framealpha=0.5)
ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m'))
chart.set_xticklabels(labels=daveysdf_2019.Date.unique(),rotation=75)

我还尝试了其他一些我不记得的东西,它使xtick 间隔分开,但仅从第一次约会到 2 月中旬。

编辑: 将 Date 列转换为 datetime 后,新图表如下所示。如果我使用 set_major_locator/formatter 点在右侧,但 xticks 会重置为每天并重叠。

【问题讨论】:

可以分享一下数据集吗? 您的日期以字符串形式出现。如果要使用定位器或格式化程序,则需要转换为日期。 AdhunThalekkara 这是文件。仅供参考,这还没有索引作为日期。我在阅读后在代码中做到了这一点。github.com/Sirly/FishingReports/blob/master/… @JodyKlymak 你是对的。我之前已将其转换为日期时间,但在清理格式后保存为 csv。现在图表 xtick 是从 2000 年到 2020 年的年份,所有点都被推到右侧。将编辑评论以添加图像。 【参考方案1】:

你的代码是正确的:

from matplotlib.dates import MonthLocator, DateFormatter
fig, ax = plt.subplots(figsize=(40,25))
chart = sbn.scatterplot(x='Date',y='Total Caught',data=daveysdf_2019, hue='Boat', style='Trip Type',s=150)
ax.set_title('Daveys Locker 2019 Totals')
ax.legend(framealpha=0.5)
ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m'))
chart.set_xticklabels(labels=daveysdf_2019.Date.unique(),rotation=75)

但是你需要在这段代码的末尾添加一行以避免matplotlib不显示任何刻度,你需要将轴的xlim设置为:

ax.set_xlim([daveysdf_2019['Date'].iloc[0], daveysdf_2019['Date'].iloc[-1]])

【讨论】:

添加您的解决方案以及@JodyKlymak 的类型转换修复了它。哇!谢谢大家!

以上是关于我怎样才能让 xticks 在我的 matplotlib 图上有一个每月间隔而不是每天的主要内容,如果未能解决你的问题,请参考以下文章

使用matplotlib / python在极地立体图上获取xtick和ytick

Matplotlib - 将 Xticks 更改为线上的值而不是数据点

discord.py :: 我怎样才能让我的机器人对它自己的消息做出反应?

我怎样才能让 QtCreator 打破异常?

web项目部署在我的电脑上的tomcat中,怎样让其他用户访问我的项目

web项目部署在我的电脑上的tomcat中,怎样让其他用户访问我的项目