matplotlib 跳过股票图表上的周末

nzrxty8p  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(135)

这不是重复的,因为类似问题的现有答案并不能准确描述我所需要的。Matplotlib内部有很好的格式化程序,我喜欢使用它们:

  1. ax.xaxis.set_major_locator(matplotlib.dates.MonthLocator())
  2. ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b%y'))

他们让我绘制这样的股票市场图表:

这是我需要的,但它有一个问题:周末。他们是目前在x轴,使我的图表有点难看。

关于这个问题的其他问题给予创建自定义格式化程序的建议。他们展示了这样的格式化程序的例子。但是没有一个像matplotlib那样做漂亮的格式化:
五月十九日,六月十九日,七月十九日...
我指的是这行代码:

  1. ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b%y'))

我的问题是:请帮我格式化x轴,就像matplotlib做的那样:May19,Jun19,Jul19.

zzwlnbp8

zzwlnbp81#

你几乎总是可以做的是与Nic Wanavit建议的类似的事情。手动设置你的标签,这取决于你在轴上需要什么。
特别是在这种情况下,图看起来有点难看,因为你的数据中有没有提供实际数据的时间跨度(在这种情况下是周末),所以pyplot只会将这些点与x轴的相应长度连接起来。
然后你可以做的就是把你的数据等距离地绘制出来--如果数据是每天的,这是正确的--否则可以考虑使用pandas bultin插值法来插值。
为了避免pyplot自动检测索引,我不得不这样做:

  1. df['plotidx'] = [i for i in range(len(df['close'])):

在这里,股票的所有收盘价都存储在一个名为'close' obvsl的列中。您可以相应地绘制此列。然后您可以通过以下方式获得所有创建的报价:

  1. labels = [item.get_text() for item in ax.get_xticklabels()]

根据需要调整它们,

  1. labels[i] = string_for_the_label_no_i

然后再把它们放回图表上,

  1. ax.xaxis.set_ticklabels(labels)

然后你需要稍微“更新”图。还要记住,这可能会导致标签的位置很奇怪,就像文档中所说的那样。这是一种变通方法,但对我来说很好,因为它感觉很自然地绘制数据,而不是在周末制作一些数据。
迎接

展开查看全部
i86rm4rw

i86rm4rw2#

设置x刻度,假设您在数据框行df“dates”中有dates变量]

  1. ax.xaxis.set_ticks(df['dates'])

相关问题