matplotlib是Python下最常用的数据可视化绘图库,功能强大,绘图精美,虽然也有基于matplotlib的seabron库,极大得简化的绘图的流程,但个人还是更加偏向于在静态数据可视化方面使用matplotlib来进行绘图工作。
下面,我们从matplotlib的一个折线图开始,了解如何使用matplotlib绘制可观的图形。
此文简陋,权作引路,更丰富详细的用法和实例,还请自己到matplotlib官网上详参。
一、引入matplotlib
import sys sys.path.append('C:\Python34\Lib\site-packages') import matplotlib.pyplot as plt import tushare as ts %matplotlib inline
在此, 我们使用tushare模块的股票数据来作为绘图的演示数据
# 获取上证50指数的历史数据 data = ts.get_hist_data('sz50',start='2016-11-01',end='2016-12-30')
data = data.sort_index() data.head(10)
open | high | close | low | volume | price_change | p_change | ma5 | ma10 | ma20 | v_ma5 | v_ma10 | v_ma20 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
date | |||||||||||||
2016-11-01 | 2250.49 | 2263.62 | 2263.48 | 2246.95 | 220153.06 | 13.01 | 0.58 | 2255.026 | 2249.795 | 2222.904 | 241296.18 | 287549.64 | 235541.77 |
2016-11-02 | 2256.12 | 2259.19 | 2244.74 | 2242.77 | 222608.25 | -18.74 | -0.83 | 2252.550 | 2252.116 | 2226.805 | 231525.71 | 280377.65 | 242027.97 |
2016-11-03 | 2241.44 | 2283.25 | 2273.63 | 2239.87 | 409130.28 | 28.89 | 1.29 | 2257.224 | 2257.137 | 2231.718 | 266475.15 | 301517.76 | 256544.75 |
2016-11-04 | 2271.85 | 2284.95 | 2271.93 | 2266.92 | 361920.91 | -1.70 | -0.07 | 2260.850 | 2260.255 | 2236.447 | 282392.41 | 302041.27 | 270031.14 |
2016-11-07 | 2271.96 | 2279.55 | 2276.95 | 2265.36 | 259667.05 | 5.02 | 0.22 | 2266.146 | 2260.855 | 2240.151 | 294695.91 | 278404.53 | 273364.39 |
2016-11-08 | 2284.01 | 2294.62 | 2282.42 | 2276.74 | 325958.75 | 5.47 | 0.24 | 2269.934 | 2262.480 | 2243.811 | 315857.05 | 278576.61 | 279077.64 |
2016-11-09 | 2281.12 | 2281.59 | 2263.92 | 2244.43 | 373524.31 | -18.50 | -0.81 | 2273.770 | 2263.160 | 2246.957 | 346040.26 | 288782.99 | 290014.44 |
2016-11-10 | 2279.94 | 2297.97 | 2289.45 | 2279.94 | 345659.97 | 25.53 | 1.13 | 2276.934 | 2267.079 | 2251.323 | 333346.20 | 299910.68 | 298143.04 |
2016-11-11 | 2285.61 | 2315.96 | 2308.43 | 2284.29 | 569486.00 | 18.98 | 0.83 | 2284.234 | 2272.542 | 2256.254 | 374859.22 | 328625.81 | 314642.09 |
2016-11-14 | 2304.61 | 2338.58 | 2317.77 | 2303.97 | 616848.62 | 9.34 | 0.41 | 2292.398 | 2279.272 | 2262.498 | 446295.53 | 370495.72 | 333903.58 |
首先,我们绘制一个基本的折线图
# 一个基本的折线图 x = range(len(data)) # 收盘价的折线图 plt.plot(x,data['close'])
简单的使用plot()方法就绘制出了一个基本的的折线图。
为了方便下面的演示,我们在图形里面再加入一个最高价的折线图
x = range(len(data)) plt.plot(x,data['close']) plt.plot(x,data['high'])
在plot()方法后面,再加入一个绘制折线图的方法,就可以在同一个图形里绘制出第二条折线,就是这么简单。
但是我们发现两个问题,第一,图形过小不便于查看,第二,两条折线因为比较相近,颜色也不易区分,接下来,咱们设置一下图形的大小和线条的颜色。
# 设置图形大小和线条颜色 x = range(len(data)) plt.figure(figsize=(10,5)) plt.plot(x,data['close']) plt.plot(x,data['high'])
嗯,实例化一个figure对象,使用参数figsize设置其大小为(16,8),这样,下面的绘图方法都是继承于figure这个对象的属性了。
我们再解决第二个问题,线条颜色
x = range(len(data)) plt.figure(figsize=(10,5)) plt.plot(x,data['close']) plt.plot(x,data['high'],color='r')
我们在plot()方法里面使用color属性,把最高价的折线颜色设置为了红色,这样两条折线看起来就容易分清楚了。
但是这样的图片还是太过于简陋,我们把折线图的标题、X轴信息,Y轴信息,图例加上:
from matplotlib.pylab import datestr2num x = range(len(data)) x_date = [datestr2num(i) for i in data.index] plt.figure(figsize=(10,5)) plt.title("上证50指数历史最高价、收盘价走势折线图") plt.xlabel("时间") # plt.xticks(x,[i for i in data.index]) plt.ylabel("指数") plt.plot_date(x_date,data['close'],'-',label="收盘价") plt.plot_date(x_date,data['high'],'-',color='r',label="开盘价") plt.legend()
因为X轴的信息为时间戳,在这里,我们使用的matplotlib.pylab的datestr2num方法,将时间字符串转换为数字,然后再通过plot_date()方法绘制出折线图,普通的X轴信息使用plt.xticks即可设置。
使用title()方法设置标题,xlable()方法设置X轴说明,ylable()方法设置Y轴说明,legend()方法设置图例
这样,一个基本的折线图就完成了,但是看着并不是很美观,我们把它美化一下。
x = range(len(data)) x_date = [datestr2num(i) for i in data.index] plt.figure(figsize=(10,5)) plt.title("上证50指数历史最高价、收盘价走势折线图") plt.xlabel("时间") plt.xticks(rotation=45) plt.ylabel("指数") plt.plot_date(x_date,data['close'],'-',label="收盘价") plt.plot_date(x_date,data['high'],'-',color='r',label="最高价") plt.legend() plt.grid()
这样虽然看起来比之前好看很多了,但是仍然觉得画面粗糙感很强,我们可以试着换一个图形主题。
x = range(len(data)) x_date = [datestr2num(i) for i in data.index] plt.style.use('ggplot') plt.figure(figsize=(10,5)) plt.title("上证50指数历史最高价、收盘价走势折线图") plt.xlabel("时间") plt.xticks(rotation=45) plt.ylabel("指数") plt.plot_date(x_date,data['close'],'-',label="收盘价") plt.plot_date(x_date,data['high'],'-',label="最高价") plt.legend() plt.grid(True)
在这里,我们使用了plt.style.use来设置图形的风格为ggplot。
matplotlib官方提供了五种不同的图形风格,分别是:bmh、ggplot、dark_background、fivethirtyeight和grayscale。
更多matplotlib的用例,详见官网的说明。
文章版权所有:州的先生博客,转载必须保留出处及原文链接