提问人:AndysPythonStuff 提问时间:9/21/2022 更新时间:10/18/2022 访问量:1150
减少绘图 x 轴上的标签数量
Reducing the number of labels on x-axis of plot
问:
我正在学习 matplotlib,并尝试绘制一个简单的散点图,该散点图在 x 轴上有日期,在 y 轴上有值。从 2004 年到 2019 年有 2200 个日期(格式为 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 个日期一个?
谢谢!
答:
您可以使用类似的东西:
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
评论
2014-09-17
以防其他人有同样的问题。我找到了 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)
我完全不知道为什么会这样,为什么它只打印年份而不是整个日期。
如果有人能启发我,我会很高兴。
第二
记住日期是这样的格式:2020-09-24,添加以下代码:
df_btc_price['DATE'] = pd.to_datetime(df_btc_price['DATE'])
所以它现在看起来像这样:
plt.figure(figsize=(21,12))
plt.xticks(fontsize=8, rotation = 45)
plt.scatter(df_btc_price.DATE, df_btc_price.VOLUME)
df_btc_price['DATE'] = pd.to_datetime(df_btc_price['DATE'])
该图如下所示:
我不知道(还)为什么它只打印年份,或者如何更改它,所以,例如,它打印月份。但至少它解决了凌乱的 x 轴标签。
评论