Matplotlib可视化实践系列:折线图

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的用例,详见官网的说明。

猜你也喜欢

发表评论

邮箱地址不会被公开。