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()
首先,我们绘制一个基本的折线图
# 一个基本的折线图
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的用例,详见官网的说明。
========================================================
微信公众号:州的先生 不定期更新分享Python爬虫、数据分析、数据集下载,欢迎关注