python库基础--matplotlib
绘图和可视化
matplotlib是一个用于生成出版级质量图表的绘图包,目的是在python环境下进行MATLAB风格的绘图
导图matplotlib包
import matplotlib.pyplot as plt
简单matplotlib API入门
生成一个简单的图像
data = np.arange(10)
plt.plot(data)
plt.show()

图片和片区
matplotlib所绘制的图像位于图片(Figure)对象中,我们可以使用plt.figure()生成一个新的图片
plt.figure() 中有一些可选参数 如: figsize 确保图片有一个正确的大小以及存储到硬盘中的长宽比
fig = plt.figure()
此时我们仅仅有一个空的图片,是无法进行绘图的,我门需要创建一个或者多个子图
ax1 = fig.add_subplot(2,2,1)
该行代码含义为: 图片为 2*2 的(最多四个图形),我们选择其中的第一个
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
fig.show() # 展示图片

当输入plt.plot([1.5,3.5,-2,1.6],'k--')
matplotlib会在最后一个图片和子图上进行绘制
若需要就创建一个
'k--'是用于绘制黑色分段线的style选项
fig.add_subplot 返回的是AxesSubplot对象
使用这些对象可以直接在空白子图上进行绘图
1.创建图片
2.创建子图
3.对子图对象绘图
因为使用子图网格创建图片是非常常见的任务,所以
matplotlib给出了简单函数
fig,axes = plt.subplot(2,3)
获得一个两行三列子图(6个)的图片
返还图片对象和axes数组array对象(里面存储的是AxesSubplot对象,可以用来画图)

关于pyplot.subplots函数的参数
nrows 子图行数
ncols 子图列数
sharex 所有子图使用相同的x轴刻度
sharey y轴刻度
subplot_kw 传入add_subplot的关键字参数字典
**fig_kw 额外关键字参数 如: plt.subplots(2,2,figsize=(8,6))
调整子图间距:
默认情况的间距都是由图的高度和宽度来指定
但是可以使用图对象的
subplots_adjust方法改变间距
subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=None,hspace=None)
fig.subplots_adjust(wspace=0,hspace=0)
wspace: 左右两图距离
hspace: 上下两图距离

颜色,标记,线类型:
plt.plot(x ,y ,'g--')
x,y可以接收x轴和对应的y轴
'g--' 表示绿色虚线
ax1.plot(range(10),np.random.randn(10),'g--')

还可以:
ax1.plot(range(10,np.random.randn(10)),linestyle='--',color='g')
折线图可以标记用来凸显实际的数据点:
ax1.plot(range(10),np.random.randn(10),'go--')
在样式参数中:
线类型,标记类型必须跟在颜色后面
'go--'
plot(range(10),np.random.randn(10),color='g',mark='o',linnstyle='--')
可以通过drawstyle参数来改变线型图的模式
axes[0][0].plot(np.random.randn(10),'k--',label='DD')
axes[0][0].plot(np.random.randn(10),'r-',drawstyle='steps-post',label='SS')
axes[0][0].legend(loc='best')

plt.legend('best)可以生成线的区分图例
刻度,标签,图例
对于大多数的图标修饰工作,主要有两种方式:pyplot接口和更多面向对象的原生matplotlib API
xlim方法:
控制绘图范围
xticks方法:
控制刻度位置
xticklabels::
控制刻度标签
每个方法对应于子图的两个方法:
如:xlim
ax.get_xlim() 返还当前参数
ax.set_xlim() 设置参数
ticks = axes[0][1].set_xticks([0,40,80,120,160,200]) # 设置刻度
labels = axes[0][1].set_xticklabels(['zero','one','two','three','four','five'],rotation=30,fontsize='small')
# 控制刻度的标签,效果如下
rotation参数: 调节字体的倾斜30度
fontsize:字体大小

对y轴的设置仅需将x修改为y
ax.set_title('My plot') # 给子图一个名称
ax.set_xlable('step') # 给x轴一个名称

添加图例:
图例是用来区分绘图元素的另一个重要内容,有多种方法可以创建图例,最简单的就是在添加每个图表时传递label参数
axes[0][1].plot(np.arange(-10,10),'g--',label='My test')
axes[0][1].legend(loc='best')
'best' 会自动选择放置位置
注释和子图加工
除了标准的绘图类型,还可以在自己的图内添加注释,注释中可能会包含文本,箭头以及其他图形。
我们可以使用text,arrow,annote 方法来添加注释和文本。
text 在图标上给定的(x,y)坐标根据选定的样式绘制文本
ax.text(x,y,'Hi',family='monospace',fontsize=10) 无指向型 即无箭头
ax.annotate('string',xy=(),xytext=(),arrowprops=dict(facecolor='red',headwidth=4,headlength=4))
arrowprops:dict,设置指向箭头的参数,字典中key值有
facecolor 箭头颜色
headwidth箭头宽度
headlength箭头长度
图形添加:
1.先生成图形对象
rect = plt.Rectangle((x,y),len,wid,color='',alpha=)
2.添加到图中
ax.add_patch(rect)
x,y指左下角
保存文件:
fig.savefig('xx.png',dpi=400,bbox_inches='tight')
dpi:分辨率,默认为100
bbox_inches 保留图片范围,若为tight则为除去空白部分
使用pandas和seaborn绘图
seaborn是一个统计图形库,简化了很多常用的视图类型生成,导入seaborn会修改默认的matplotlib的配色方案和绘图样式
折线图
Series和DataFrame都有一个plot属性,用于绘制基本图形,默认情况下,plot绘制的是折线图
s = pd.Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))
s.plot()
Series的索引被传入当作x轴,而值被作为y轴传入
而DataFrame对象的plot会在同一个子图中将每一列绘制为一个折线,并自动生成图例
df = pd.DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))
df.plot()

Series.plot() 内的一些参数
label 图例标签
ax 绘制所用的子图对象,若无则使用当前的
style 传入线类型'ko--'
kind 各种图类型 'area','bar','barh','density','hist','kde','line','pie'
rot 刻度标签的旋转角度
DataFrame.plot() 内参数
subplots 将DataFrame的每一列单独绘制在独立子图中
sharex 如果subplots 为 True 则共享相同的x轴
sharey 共享y轴
title 标题
legend 添加子图样例默认为True
sort_columns 按字母绘制各列
柱状图
plot.bar()和plot.barh() 可以分别绘制垂直和水平的柱状图
s.plot(kind='bar')
s.plot(kind='barh')


df.plot(kind='bar')

直方图
直方图是一种条形图,用于给出值频率的离散显示,数据点被分成离散的,均匀间隔的箱,并且展示每个箱中数据点的数量
将x轴的范围分割为bins份,y轴为其出现的频率
s.plot(kind='hist',bins=10)

s.plot(kind='kde'),密度函数

散点图
.scatter(x='index',y=column)

浙公网安备 33010602011771号