基本步骤
• 导入matplotlib、Pandas
• 准备数据
• 使用Series或DataFrame封装数据
• 绘图
• 调用Series.plot()或DataFrame.plot()函数完成绘图
import matplotlib.pyplot as plt #导入pyplot,用于图形显示
from pandas import DataFrame
gdp = [41.3,48.9,54.0,59.5,64.4,68.9,74.4]
data = DataFrame({'GDP: Trillion':gdp},
index=['2010','2011','2012','2013','2014','2015','2016'])
data.plot()
plt.show() #显示图形(jupyter 中可以不用)
pandas绘图方法:
DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False,
sharex=None, sharey=False, layout=None,figsize=None,
use_index=True, title=None, grid=None, legend=True,
style=None, logx=False, logy=False, loglog=False,
xticks=None, yticks=None, xlim=None, ylim=None, rot=None,
xerr=None,secondary_y=False, sort_columns=False, **kwds)
Matplotlib精细绘图
• 基本步骤
• 导入matplotlib、Pandas,导入matplotlib的pyplot模块
• 创建figure对象,matplotlib的图像都位于figure对象内
• 绘图:利用pyplot的绘图函数plot() 或pandas绘图
• 设置图元:plt的图元设置函数,实现图形精细控制
import matplotlib.pyplot as plt #导入绘图库
plt.figure() #创建绘图对象
GDPdata=[41.3,48.9,54.0,59.5,64.4,68.9,74.4] #准备绘图的序列数据
plt.plot(GDPdata,color="red",linewidth=2,linestyle='dashed',mark
er='o',label='GDP') #绘图
#精细设置图元
plt.title('2010~2016 GDP: Trillion')
plt.xlim(0,6) #x轴绘图范围
plt.ylim(35,75) #y轴绘图范围
plt.xticks(range(0,7),('2010','2011','2012','2013','2014','2015'
,'2016')) #将x轴刻度映射为字符串
plt.legend(loc='upper right') #在右上角显示图例说明
plt.grid() #显示网格线
plt.show() #显示并关闭绘图
figure对象内可绘制多个子图
• 创建子图对象axes,在子图上绘制图
• 可使用pyplot或axes对象提供的绘图
• 可pandas绘图
创建子图
figure.add_subplot(numRows, numCols, plotNum)
from pandas import Series
data=Series( [41.3,48.9,54.0,59.5,64.4,68.9,74.4],
index=['2010','2011','2012','2013','2014','2015','2016'])
fig=plt.figure(figsize=(6,6)) #figsize定义图形大小
ax1=fig.add_subplot(2,1,1) #创建子图1
ax1.plot(data) #用AxesSubplot绘制折线图
ax2=fig.add_subplot(2,2,3) #创建子图2
data.plot(kind='bar',use_index=True,fontsize='small',ax=ax2)#用pandas绘柱状图
ax3=fig.add_subplot(2,2,4) #创建子图3
data.plot(kind='box',fontsize='small',xticks=[],ax=ax3) #用pandas绘柱箱图
设置图元和说明
保存图表到文件
保存函数
figure.savefig(filename,dpi,bbox_inches)
plt.savefig(filename,dpi,bbox_inches)
函数绘图
plt.plot()根据给定的x、y坐标值绘图
import numpy as np #导入numpy
#生成x数组
x = np.linspace(0,6.28,50) #start, end, num-points
y=np.sin(x) #计算y=sin(x)数组
plt.plot(x,y, color='r') #用红色绘图y=sin(x)
plt.plot(x,np.exp(-x),c='b') #用蓝色绘图y=exp(-x)
散点图
描述两个一维数据序列之间的关系 • 将两组数据分别作为点的横坐标和纵坐标 DataFrame.plot(kind=’scatter’,x,y,title, grid,xlim,ylim,label,...)
DataFrame.plot.scatter(x,y,title, grid,xlim,ylim,label,...)
Matplotlib的scatter函数也可以绘制散点图
• 图元的设置需要采用独立的语句
plt.scatter(x,y,...)
散点图矩阵
pd.plotting.scatter_matrix(data,diagonal,...)#同时观察多组数据之间的关系
柱状图(Bar Chart)
Series.plot(kind,xerr,yerr,stacked,...)
DataFrame.plot(kind,xerr,yerr,stacked,...)
折线图
• 普通折线图:横、纵坐标轴上都使用算术刻度
• 半对数折线图:横、纵坐标分别使用算术刻度与对数刻度
• 比较的两种或多种事物的数据值域相差较大
• 指标“相对增长量”的变化关系
data = pd.read_csv('GDP.csv', index_col = 'Year') #读取数据
#绘制GDP和Income的折线图
data.plot(title='GDP & Income’,linewidth=2,marker='o',linestyle='dashed', grid=True,use_index=True)
#绘制GDP和Income的半对数折线图
data.plot(logy=True,linewidth=2,marker='o',linestyle='dashed',color='G')
直方图(Histogram)
描述总体的频数分布情况
• 将横坐标按区间个数等分
• 每个区间上长方形的高度表示该区间样本的频率, 面积表示频数
Series.plot(kind=’hist’,bins,normed,...)
密度图(Kernel Density Estimate)
• 基于样本数据拟合概率密度函数 • 采用平滑的峰值函数:核函数 • 常用高斯核
• 模拟真实的概率分布曲线
• 与直方图(标准化后)一起绘制,对比
Series.plot(kind=’kde’,style,...)
饼图(Pie Chart)
Series.plot( kind='pie', explode,shadow,startangle,autopct,...)
箱须图(Box plot)
• 表达数据的分位数分布,观察异常值 • 将样本居中的50%值域用一个长方形表示 • 较小和较大的四分之一值域各用一根线表示 • 异常值用“o”表示
Series.plot(kind='box', ...)
Pandas提供专门绘制箱须图的函数boxplot • 方便将观察样本按照其他特征进行分组对比
DataFrame.boxplot( by, ...)
#by 用于分组的列名