【问题标题】:Reducing the number of labels on x-axis of plot减少绘图 x 轴上的标签数量
【发布时间】:2022-10-05 05:27:47
【问题描述】:

我正在学习 matplotlib,并尝试绘制一个简单的散点图,其中 x 轴上有日期,y 轴上有值。有 2200 个日期,从 2004 年到 2019 年,(格式 2014-09-17 类型 O)。

这是我的代码:

x=df.DATE
y=df.CLOSE

plt.figure(figsize=(21,12))
plt.xticks(fontsize=8, rotation = 45)
plt.scatter(x,y)

情节很棒,但很明显,xaxis 上有 2000 个条目!我检查了 Matplotlib 文档(可能是我,但它不是非常友好,不像 python 文档)和 stackoverflow 上的其他帖子,关于如何减少写在 x 轴上的标签(日期)的数量,并发现各种命令:Axes.set_xticklabels(labels, *, fontdict=None, minor=False, **kwargs)set_xticks(), MaxNLocator(), autolocator, Axes.set_xticks(MaxNLocator(10)) 等。我尝试了各种变体,但没有一个奏效。许多人需要“斧头”。我没有使用过,当我尝试轴时,它告诉我它没有定义。

我难住了。有什么简单的方法可以将 x 轴上的条目数减少到,比如最多“n”个日期或每 10 个日期一个日期?

谢谢!

【问题讨论】:

    标签: python matplotlib format x-axis xticks


    【解决方案1】:

    你可以使用类似的东西:

    import matplotlib.dates as mdates
    
    
    years = mdates.YearLocator()  
    ax.xaxis.set_major_locator(years) #Every year
    

    这是一个详细的例子:https://matplotlib.org/2.0.2/examples/api/date_demo.html

    【讨论】:

    • 这仅在 x 值首先从字符串格式正确转换为 matplotlib 的日期格式时才有效。该帖子提到它们的格式类似于2014-09-17
    • 好的,谢谢你的建议。
    • 从日期时间导入日期时间 datetime_object = datetime.strptime(datetime_str, '%y-%m-%d') @JohanC
    【解决方案2】:

    以防其他人有同样的问题。我找到了一个方法...

    plt.locator_params(axis="x", nbins=<number>)

    我不确定它为什么或如何工作,但我的情节最初有 2204 个日期,格式为:2014-09-17,所有这些日期都以 45 度打印为粗、黑色、不可读的线。

    我使用 = 3 并重新运行代码,它仅在 xaxis 上重新绘制了年份。格式 2015。7 个数字,2015-2021。用“1”和“2”再做一次,看看发生了什么,仍然有 7 年,没有任何变化。

    我不知道为什么会这样。但它解决了问题。

    这是原始代码和图表:

    plt.figure(figsize=(21,12))
    plt.xticks(fontsize=8, rotation = 45)
    plt.scatter(df_btc_price.DATE, df_btc_price.VOLUME)
    

    这是带有新图形的修改后的代码。

    plt.figure(figsize=(21,12))
    plt.xticks(fontsize=8, rotation = 45)
    plt.scatter(df_btc_price.DATE, df_btc_price.VOLUME)
    
    plt.locator_params(axis="x", nbins=2)
    

    我完全不知道为什么会这样,以及为什么它只打印年份而不是整个日期。

    如果有人能启发我,我会很高兴。

    【讨论】: