解决 Python Matplotlib 绘图时不连续x轴自动补全的问题(xsticks)
2019-07-06 13:14
796 查看
问题
发现一个奇怪的问题,记录一下:
用 Python Matplotlib绘图的时候,x轴为不连续的日期,但是画出来的图,对于不连续的部分x轴会自动补全,空出来的部分是没有值的。(x轴数据明明是明确给定的,不知道为什么会自动补全,是不是有参数可以控制?希望有大神可以指导,感谢~)
具体如下:
#输入数据 date = [20190601,20190602,20190603,20190605,20190606,20190607,20190608, 20190609,20190611,20190612] close = [34.35, 34.5, 34.89, 34.22, 33.54, 34.56, 32.14, 33.81, 31.03, 34.01] changerate = [1.02, 0.98, 1.1, -0.88, -2.3, 1.5, -7.8, 5.67, 4.56, 9.78]
#绘图 from matplotlib.pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] mpl.rcParams['axes.unicode_minus'] = False import matplotlib.pyplot as plt fig = plt.figure(figsize=(8,6)) ax1 = fig.add_subplot(2,1,1) ax1.bar(date, close, label='收盘价') ax1.legend(loc='upper right') ax1.set_xlabel('交易日') ax1.set_ylabel('收盘价') ax1.set_title('收盘价柱状图') ax2 = fig.add_subplot(2,1,2) ax2.plot(date, changerate, label='变化率', color = 'orange') ax2.legend(loc='upper left') ax2.set_xlabel('交易日') ax2.set_ylabel('收盘价变化率') ax2.set_title('收盘变化率折线图') plt.tight_layout() plt.show()
输出结果如下图:
在这里,我的x轴数据date不是连续的,没有20190604和0190610,但是画出来的图,却自动把缺的这两天给补上了,感觉好奇怪,在这里这并不是我想要的效果(不过有时候正好也需要这种效果)。
尝试把date转化为日期型的date2,再进行绘图,结果也是一样的:
# convert int into date import datetime date2 = [] for tradedate in date: real_date = datetime.datetime.strptime( str(tradedate),"%Y%m%d") date2.append(real_date)
如果把date改为普通的不连续的数列date3,也还是有这个问题:
date3 = [1,2,3,6,7,8,9,11,12,13]
解决方案
解决方法是用xsticks设置x轴格式:
对于柱形图,把
ax1.bar(date, close, label='收盘价')
改为:(两行顺序可交换)
plt.xticks(range(len(date)), date, rotation=30) #rotation表示x轴刻度旋转度数 ax1.bar(range(len(date)), close, label='收盘价')
对于条形图,把
ax2.plot(date, changerate, label='变化率', color = 'orange'
改为:(两行顺序可交换)
ax2.plot(changerate, label='变化率', color = 'orange') plt.xticks(range(len(date)), date, rotation=30)
完整代码如下:
from matplotlib.pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] mpl.rcParams['axes.unicode_minus'] = False import matplotlib.pyplot as plt fig = plt.figure(figsize=(8,6)) ax1 = fig.add_subplot(2,1,1) plt.xticks(range(len(date)), date, rotation=30)#rotation表示x轴刻度旋转度数 ax1.bar(range(len(date)), close, label='收盘价') ax1.legend(loc='upper right') ax1.set_xlabel('交易日') ax1.set_ylabel('收盘价') ax1.set_title('收盘价柱状图') ax2 = fig.add_subplot(2,1,2) ax2.plot(changerate, label='变化率', color = 'orange') plt.xticks(range(len(date)), date, rotation=30) ax2.legend(loc='upper left') ax2.set_xlabel('交易日') ax2.set_ylabel('收盘价变化率') ax2.set_title('收盘变化率折线图') plt.tight_layout() plt.show()
输出结果如下:
参考阅读:
-
https://segmentfault.com/a/1190000006158803?utm_source=tag-newest#articleHeader9
Matplotlib绘图双纵坐标轴设置及控制设置时间格式 -
https://blog.csdn.net/henbile/article/details/79964235 python
matplotlib 柱状图x轴xsticks固定顺序(升序、降序)
相关文章推荐
- Python使用matplotlib绘图无法显示中文问题的解决方法
- 完美解决Python matplotlib绘图时汉字显示不正常的问题
- Python之Matplotlib 解决绘图 X 轴值不按数组排序问题.
- 解决Windows系统下python利用matplotlib绘图时中文乱码的问题
- 解决python中matplotlib绘图中文显示问题
- python使用matplotlib绘图时图例显示问题的解决
- 【Python开发】matplotlib绘图不显示问题解决plt.show()
- 【Python开发】matplotlib绘图不显示问题解决plt.show()
- 完美解决Python下matplotlib绘图中文乱码问题
- python matplotlib绘图时图例显示问题
- python中matplotlib绘图中文显示问题
- python py2exe打包matplotlib Could not find the matplotlib data files问题解决
- Windows7下Python安装Numpy、Matplotlib以及Scipy时出现的问题以及解决办法
- python matplotlib绘图时图例显示问题
- Python——解决Matplotlib安装问题
- python matplotlib绘图时图例显示问题
- 解决python27 matplotlib 中文不显示问题
- python中matplotlib绘图中文显示问题
- python matplotlib绘图时图例显示问题
- python matplotlib绘图时图例显示问题