为什么matplotlib上的xaxis使用日期和xaxis使用数字列表之间的绘图显示不同?

2024-06-02 08:52:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有包含ohlc属性的股票数据,我想通过计算收盘值来绘制RSI指标图。因为股票数据是按日期排序的,所以必须使用date2num将日期更改为数字。但是当重叠打印时,close属性的计算结果变成了RSI值的列表

我认为RSI结果的长度和日期的长度不一样,但是经过我的测试len(rsi) == len(df ['date'])显示了相同的长度。然后我试着不使用x轴日期,而是使用由range(0, len(df['date']))和plot生成的数字列表,如我所期望的那样显示

#get data
df = df.tail(1000)

#covert date
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(mdates.date2num)

#make indicator wit TA-Lib
rsi = ta.RSI(df['close'], timeperiod=14)

#plot rsi indicator wit TA-Lib
ax1.plot(df['date'], rsi)
ax2.plot(range(0, len(df['date'])), rsi)

#show chart
plt.show()

我希望使用x轴日期的输出与x轴数字列表相同

Image that shows the difference


Tags: 数据df列表closedatelen属性plot
2条回答

matplotlib似乎选择了要显示的x记号(当自动选择时)来显示“舍入”数字。所以在整数的情况下,每200打一个勾;就你的约会而言,每两个月一次

您似乎期望日期遵循与整数相同的勾选步骤,但这将导致图形在月中显示任意日期,这不是一个好的默认行为

如果这是你想要的行为,那就试试这种:

rng = range(len(df['date']))
ax2.plot(rng, rsi)  # Same as in your example
ax2.set_xlim((rng[0], rng[-1]))  # Make sure no ticks outside of range
ax2.set_xticklabels(df['date'].iloc[ax2.get_xticks()])  # Show respective dates in the locations of the integers

如果您希望使用与日期相同的记号来显示数字而不是日期,那么这种行为当然可以逆转,但我将留给您

我试了几次后,找到了问题的核心。在周末,数据没有被记录,所以在日期上有一个间隔。matplotlib x轴日期在周末会有一个间隔,即使那天没有数据,所以线图会重叠

对于解决方案,我还没有找到,但目前我使用的是数字列表

相关问题 更多 >