matplotlib画折线图
(一)matplotlib配置属性
以一个例子开始:
假如我们想做一个上证50指数历史最高价、收盘价走势折线图。
首先,需要取得构建图像的数据,也就是获得坐标轴的(x,y)。这里我们从Tushare获取数据。
引入tushare模块
import tushare as ts
#导入上证50指数数据
#两个日期之间的前复权数据
data = ts.get_hist_data('sz50',start='2016-11-01',end='2016-12-30')
data = data.sort_index()
引入matplotlib模块
import matplotlibimport matplotlib.pyplot as plt
#为了防止出现中文乱码,在这里进行一下设置
font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
获取横纵坐标
from matplotlib.pylab import datestr2num
#使用matplotlib.pylab的datestr2num方法,将时间字符串转换为数字(这里纵坐标想要传入日期数据,同时我们也知道横坐标需要传入数字型数据,而我们获取的数据日期格式为字符串)
#横坐标
x_date = [datestr2num(i) for i in data.index]
#纵坐标
y_date_close = data['close']
y_date_high = data['high']
现在横坐标已经有了,下面我们可以开始画图了,首先我们要有一张“画布”,定义一个figure对象,即图形对象。
plt.figure(figsize=(10,5))
画折线
plt.plot_date(x_date,y_date_close,'-',label="closing price")
plt.plot_date(x_date,y_date_high,'-',label="peak price")
简陋的折线图
折线画好了,为了使图像更加直观,需要加上图示,标签,标题等信息,以便观看。
#定义图像标题
plt.title("上证50指数历史最高价、收盘价走势折线图",fontproperties=font,fontsize = 10)
#坐标轴标签
plt.xlabel("时间",fontproperties=font)
plt.xticks(rotation=0) #可以使坐标刻度倾斜,这里倾斜0度
plt.ylabel("指数",fontproperties=font)
#加入图示
plt.legend()
增加了信息后的折线图.png
图像做好了,但看着实在是。。。不忍直视!
接下来美化一下。
在这里,我们使用了plt.style.use来设置图形的风格为ggplot。
matplotlib官方提供了五种不同的图形风格,分别是:bmh、ggplot、dark_background、fivethirtyeight和grayscale。
#定义图形风格
plt.style.use('ggplot')
# 添加图表网格线
plt.grid(True)
美化后依然丑陋的图像.png
为了便于观看,修改了部分参数(将标题字体大小设置为50)
示例代码:
import matplotlibimport matplotlib.pyplot as plt
from matplotlib.pylab import datestr2num
import tushare as ts
font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
data = ts.get_hist_data('sz50',start='2016-11-01',end='2016-12-30')
data = data.sort_index()
x_date = [datestr2num(i) for i in data.index]
y_date_close = data['close']
y_date_high = data['high']
plt.style.use('ggplot')
plt.figure(figsize=(10,5))
plt.plot_date(x_date,y_date_close,'-',label="closing price")
plt.plot_date(x_date,y_date_high,'-',label="peak price")
plt.title("上证50指数历史最高价、收盘价走势折线图",fontproperties=font,fontsize=50)
plt.xlabel("时间",fontproperties=font)
plt.xticks(rotation=0)
plt.ylabel("指数",fontproperties=font)
plt.legend()
plt.grid(True)
plt.show()
一定要加上plt.show(),否则无法显示图像!!!重要的事情说三遍!
图像会画了,来搞个稍微复杂点的图吧!
(二)matplotlib
(三)matplotlib实践
天天听别人说低价股,甚至简单的将三元以下的股票说成低价股,完全忽略股票的内在价值不谈,虽然看着有点扯淡,但是不防拿来实践一下,找出大盘股低于三元的股票分析一下。
import tushare as ts
# 获取实时行情数据
hq = ts.get_today_all()
# 节选出股票代码code、名称name、涨跌幅changepercent、股价trade
hq = hq[['code','name','changepercent','trade']]
# 筛选出当前股价高于0元低于3元的股票信息
mins = hq.trade>0.00
maxs = hq.trade<=2.99
allselect = mins & maxs
#print(allselect)
data = hq[allselect].sort_values(by = 'trade')
#print(data)
code_list = []
for c in data.code:
if c[0] != "0":
code_list.append(c)
#print(code_list)
sh_hist_data = ts.get_hist_data(code='sh',start='2014-12-01',end='2016-12-01')
sh_hist_data = sh_hist_data[['open','high','close','low','volume','price_change','p_change']].sort_index()
import matplotlib.pyplot as plt
from matplotlib.pylab import datestr2num
import matplotlib
# 设置中文字体
font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
dates = [datestr2num(i) for i in sh_hist_data.index]
plt.figure(figsize=(40,30))
# 新建一个子图,绘制上证指数走势
plt.subplot(311)
plt.title("2014年12月1日至2017年1月9日上证指数最低价走势",fontproperties=font,fontsize=10)
plt.xticks(rotation=0,fontsize=10)
plt.yticks(fontsize=10)
plt.plot_date(dates,sh_hist_data.low,'-',linewidth=1.5)
plt.grid(True)
# 遍历低价股代码列表,绘制股价走势
#由于折线太多,在这里分开遍历。
for i in code_list[0:5]:
hist_data = ts.get_hist_data(code=i,start='2014-12-01',end='2017-1-09')
code_data = hist_data[['open','high','close','low','volume','price_change','p_change']].sort_index()
dates = [datestr2num(t) for t in code_data.index]
plt.subplot(312)
plt.title("2014年12月1日至2017年1月9日各低价股最低价走势",fontproperties=font,fontsize=10)
plt.xticks(rotation=0,fontsize=10)
plt.yticks(fontsize=10)
plt.plot_date(dates,code_data['low'],'-',linewidth=1.5,label=i)
plt.legend(loc=1,fontsize=10)
plt.grid(True)
for i in code_list[5:]:
hist_data = ts.get_hist_data(code=i,start='2014-12-01',end='2017-1-09')
code_data = hist_data[['open','high','close','low','volume','price_change','p_change']].sort_index()
dates = [datestr2num(t) for t in code_data.index]
plt.subplot(313)
plt.title("2014年12月1日至2017年1月9日各低价股最低价价走势",fontproperties=font,fontsize=10)
plt.xticks(rotation=0,fontsize=10)
plt.yticks(fontsize=10)
plt.plot_date(dates,code_data['low'],'-',linewidth=1.5,label=i)
plt.legend(loc=1,fontsize=10)
plt.grid(True)
plt.show()
对比图.png
至此,我们得到了上证大盘和各低价股的走势对比图
料已备好。。。。。。可以发挥想象力了
网友评论