笔者想要达成的目的:分区作图、日期坐标轴
笔者遇到的问题:
1、日期坐标轴变成一个大黑条:
2、按照其他帖子设置后,要么调整不成功,要么调整成功了但是其他的调整(包括画面尺寸)失效,要么同时产生了一堆空白图。
先给出解决方法:
大黑条的本质是坐标轴过于密集,思路就是降低坐标轴的密度。
在这里很多同学包括笔者会走到一个误区,即将坐标轴设置为日期,然后调整日期的间距
但更好的方法是,将日期视作字符,以设置坐标轴文本间隔的方式,替代日期坐标轴的刻度调整。
此外,需要注意的是,对坐标轴设置的配置需要在作图代码之后。
详见下图:
重点看 xticks和xlabels的定义 以及设置。
def RSI_drawing(self, code):
# 数据导入和本例中的处理
data = pd.read_excel(self.raw_data_path, sheet_name=f'{code}', header=0, index_col=0)
data.sort_values(by=['trade_date'], ascending=True, inplace=True)
data = data.reset_index(drop=True)
# 提取日期信息
totalSeed = data['trade_date']
# 设置画布尺寸
plt.figure(dpi=300, figsize=(24, 8))
# 利用日期表中的数据制造日期间隔、并根据间隔将刻度(即索引)与文本(即日期)对齐
xticks = list(range(0, len(totalSeed), 60))
xlabels = [str(totalSeed[x]) for x in xticks]
xticks.append(len(totalSeed))
xlabels.append(totalSeed.iloc[-1])
# 进行作图,此处是进行了分块作图
plt.subplot(2, 1, 1)
plt.title(label=f'{code}', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 30}, loc='center')
plt.plot(data['close'], label='close')
plt.plot(data['MA10'], label='MA10')
plt.grid(visible=True, axis='both')
plt.legend(loc='best')
# 作图完成后,配置对x轴的设置,配置我们上面设置好的刻度和间距,并调整文本角度
plt.xticks(rotation=30)
plt.xticks(ticks=xticks, labels=xlabels)
# 下面是另一分块的作图,与上面一样。对坐标轴设置的步骤需要重复
plt.subplot(2, 1, 2)
plt.plot(data['RSI6'], label='RSI6')
plt.plot(data['RSI12'], label='RSI12')
plt.grid(visible=True, axis='both')
plt.legend(loc='best')
plt.xticks(rotation=30)
plt.xticks(ticks=xticks, labels=xlabels)
plt.show()
最后成果:
关于其他问题:
1、调整不成功:将对坐标轴的调整放在了作图代码之上
2、调整成功了但是其他的调整(包括画面尺寸)失效、生成空白图表: 定义了其他图表,比如用设置了一个ax = plt.gac(), 但是后面的作图依然使用plt进行