import matplotlib.dates as mdate
import matplotlib.pyplot as plt
import tushare as ts
import pandas as pd
import datetime
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False # 解決負數無法正常顯示的問題
# 獲取2021-01-01至今的股票數據
sun_stock = ts.get_k_data(code='002078', start='2021-01-01', end=datetime.datetime.now().strftime('%Y-%m-%d'))
sun_stock['date']=pd.to_datetime(sun_stock['date'], format='%Y-%m-%d') # 設置日期格式為datetime
sun_stock.set_index('date',inplace=True)
一般時間序列繪圖的x軸標簽值展示到月,but,總會希望展示到天,解決方案如下:
ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d'))
fig = plt.figure(figsize=(15,4))
ax1 = fig.add_subplot(1,1,1)
# 設置X軸的時間顯示格式
ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')) # 設置主刻度
# ax1.xaxis.set_minor_locator(mdate.DayLocator() ) # 設置次刻度
plt.xticks(rotation=45)
# plt.xticks(pd.date_range(sun_stock.index[0],sun_stock.index[-1]), rotation=90) # x軸標簽豎放
ax1.plot(sun_stock.index, sun_stock['close'], color='b', label='股價')
# 設置為共用X軸的雙y軸圖表
ax2 = ax1.twinx()
# ax2.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d'))
ax2.bar(sun_stock.index, sun_stock['volume'], color='g', label='成交額', width=2)
# 設置軸和軸標簽
ax1.set_yticks([i * 5 for i in range(5)])
ax1.set_ylabel('股價')
ax2.set_yticks([i * 300000 for i in range(5) ])
ax2.set_ylabel('成交額')
ax1.set_xlabel('日期')
# 設置圖形標題
ax1.set_title('股價和成交額')
# 設置圖例
ax1.legend(loc=2)
ax2.legend(loc=1)
plt.show()