使用Matplotlib在股票图表中跳过周末

3

这不是重复的问题,因为现有类似问题的答案并没有完全描述我所需的内容。 Matplotlib内置了很棒的格式化程序,我喜欢使用它们:

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

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

我在这里是新手,没有权限发布图片。所以请点击查看

这就是我所需要的,但有一个问题:周末。它们出现在x轴上,使我的图表有点难看。

请点击查看图片

其他关于此问题的问题给出了创建自定义格式化程序的建议。他们展示了这些格式化程序的示例。但没有任何一个可以像matplotlib一样漂亮地格式化:

May19,Jun19,Jul19...

我指的是这行代码:

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

我的问题是: 请帮我像Matplotlib一样格式化x轴:May19,Jun19,Jul19......并且在股市休市时不要创建周末。
2个回答

2
您几乎总是可以像Nic Wanavit所建议的那样做。根据您在轴上需要的内容手动设置标签。
特别是在这种情况下,绘图看起来有点丑陋,因为您的数据中存在未提供实际数据的时间段(在本例中为周末),因此pyplot将简单地使用与x轴相应长度连接这些点。
然后,您可以只是平均距离绘制数据-如果数据是每日的,则是正确的-否则请考虑使用例如pandas内置插值进行插值。
为了避免pyplot自动检测索引,我必须这样做:
df['plotidx'] = [i for i in range(len(df['close'])):

这里将所有股票的收盘价存储在名为“close”的列中,obvsl。 您可以相应地绘制它。 然后,您可以通过以下方式获得所有创建的刻度:

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

使用以下方法对它们进行调整:

labels[i] = string_for_the_label_no_i

然后使用以下方法将它们重新放回图表中:
ax.xaxis.set_ticklabels(labels)

你需要在一定程度上“更新”情节。同时要记住,频繁调整大小可能会导致标签出现在文档中所说的奇怪位置。这是一种解决方法,但对我来说效果很好,因为将数据等距绘制在一起比为周末编造一些数据更自然。
问候

0

设置x轴刻度,假设你在数据框的行df['dates']中有日期变量

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

请解释一下。我的x轴是以matplotlib格式表示的:737060.0、737060.0416666666、737060.0833333334、737060.125、737060.1666666666、737060.2083333334。 - Igor K.
你需要将它们转换为你想要的格式的标签。 - Nic Wanavit
X轴将被用作分类而不是数值,这样可以忽略缺失的日期。 - Maviles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接