admin 管理员组文章数量: 894192
python必备库 学习笔记 matplotlib
文章目录
- Matplotlib
- Matplotlib介绍
- 为什么要学习Matplotlib
- Matplotlib简单实例
- Matplotlib图像结构
- Matplotlib三层结构
- 容器层
- 辅助显示层
- 图像层
- 总结
- 实例
- 折线图与基础绘图功能
- 折线图绘制与保存图片
- 设置x、y轴
- 中文乱码问题
- 添加网格显示
- 添加描述信息
- 在原图上加一个图层
- 创建多个绘图区
- 绘制数学函数
- 柱状图
- 直方图
- 散点图
- 饼图
- 最后
Matplotlib
Matplotlib介绍
- Matplotlib专门用于开发2D图表(也支持3D图表),是一个画二维图表的python库
- Matplotlib以渐进、交互方式实现数据可视化,使用起来简单
为什么要学习Matplotlib
- Matplotlib能将数据进行可视化,更直观的呈现,帮助理解数据,方便选择更合适的分析方法
- Matplotlib使数据更加客观,更具有说服力
Matplotlib简单实例
画一条简单直线
修改点的坐标即可画出折线图
Matplotlib图像结构
Matplotlib三层结构
容器层
容器层主要由Canvas(画板)、Figure(画布)、Axes(图表)组成。
- Canvas位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布的工具,通常情况下,我们并不需要对Canvas特别的声明,当我们需要在其他模块调用Matplotlib模块绘图时,就需要声明Canvas,相当于我们在自家画画不用强调画板,出去写真时却需要带一块画板
- Figure是Canvas上方的第一层,也是需要用户来操作的第一层,在绘图的过程中充当画布的角色。当我们对Figure大小、背景色彩进行设置的时候,就相当于选择画布大小、材质的过程。因此,每当我们绘图时,写的第一行就是创建Figure的代码。
- Axes是应用层的第二层,在绘图的过程中相当于画布上的绘图区角色。一个Figure对象可以包含多个Axes对象,每个Axes都是一个独立的坐标系,绘图过程中的所有图像都是基于坐标系绘制的。
辅助显示层
辅助显示层为Axes内除根据数据画出的图像以外的内容,主要包括外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等。
该层的作用可使图像更加直观、更加容易理解,但对图像没有实质性的影响
图像层
图像层指的Axes内通过plot(折线图)、hist(柱状图)、contour(轮廓图)、bar(柱状图)、barbs、pie(饼图)等函数绘制出的图像。
总结
- Canvas(画板)位于最底层,用户一般接触不到
- Figure(画布)建立在Canvas之上
- Axes(绘图区)建立在Figure之上
- 坐标轴(axis)、图例(legend)等辅助显示层及图像层都是建立在Axes之上
实例
定义多个figure画多个图像
在一个figure中画多个图像
折线图与基础绘图功能
matplotlib.pyplot包含了一系列类似于matlab的画图函数,作用于当前图形(figure)的当前坐标系(axes)
折线图绘制与保存图片
- 绘制一个简单的折线图
- 设置画布属性与图片保存
设置图片的大小与清晰度
- plt.figure(figsize(a,b),dpi=)
- figsize 设置图形的大小,a 为图形的宽, b 为图形的高,单位为英寸
- dpi 为设置图形每英寸的点数
- 该函数返回一个figure对象
保存图片
- plt.savefig(路径与名字)
注意 plt.show()会释放figure资源,如果在显示图像之后保存图片只能保存空图片
设置x、y轴
- plt.xlim(*args,**kwargs)
- 设置x轴显示的刻度范围
- plt.ylim(*args,**kwargs)
- 设置y轴显示的刻度范围
- plt.xticks(x,**kwargs)
- x : 要显示的新刻度值
- plt.yticks(y,**kwargs)
- y : 要显示的新刻度值
- y : 要显示的新刻度值
中文乱码问题
本意是显示0点,1点等,乱码就显示如下
下载中文字体(黑体,看准系统版本)
- 下载SimHei字体(其他支持中文显示的字体也行)
- 安装字体
-
windows和mac中,双击安装
-
linux中,拷贝字体到/usr/share/fonts下
sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
- 删除matplotlib缓存字体
- Mac
- 删除~/.matplotlib中的缓存文件
cd ~/.matplotlib rm -r *
- 删除~/.matplotlib中的缓存文件
- Linux
- 删除~/.cache/matplotlib中的缓存文件
cd ~/.cache/matplotlib rm -r *
- 删除~/.cache/matplotlib中的缓存文件
- 修改配置文件matplotlibrc
- Mac
- 修改配置文件matplotlibrc
vi ~/.matplotlib/matplotlibrc
- 将文件内容修改为
font.family : sans-serif font.sans-serif : SimHei axes.unicode : False
- Linux
- 修改配置文件matplotlibrc
sudo find -name matplotlibrc
- 返回结果
./.virtualenvs/ai/lib/python3.5/site-package/matplotlib/mpl-data/matplotlib
- 将文件内容修改为
font.family : sans-serif font.sans-serif : SimHei axes.unicode : False
添加网格显示
为了更加清楚地观察图像对应地值
plt.grid(True,linestyle=‘–‘,alpha=0.5)
- True:代表是否添加网格
- linestyle:网格线的格式
- alpha:透明度
添加描述信息
- plt.xlabel(str)
- str : 要显示的x轴名称
- plt.ylabel(str)
- str : 要显示的y轴名称
- plt.title(str)
- str:图片的标题
- str:图片的标题
在原图上加一个图层
一个图就是一个plot,需要加图层就是多定义一个plot
在图层上添加说明
plt.plot(,label=str)
- str:直线的说明
plt.legend(loc=‘lower left’)
- loc:图例显示的位置
创建多个绘图区
matplotlib.pyplot.subplots(nrows=1,ncols=1,**fig_kw)创建一个带有多个axes(坐标系/绘图区)的图
- nrows:行数,默认是一行
- ncols:列数,默认是一列
plt.函数名()相当于面向过程的画图方法,axes.set_函数名()相当于面向对象的画图方法
In
# 绘制0-12点的温度变化图
import matplotlib.pyplot as plt
#创建宽20高8英寸dpi为80的画布
figure,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)x=[0,1,2,3,4,5,6,7,8,9,10,11]#时间 x
y=[2,3,2,2,2,4,5,8,9,9,12,15]#温度 y
y1=[12,9,8,9,7,5,5,2,0,9,12,15]#温度 y1axes[0].plot(x,y,label='picture1') #绘制图像1
axes[1].plot(x,y1,label='picture2') #绘制图像2axes[0].legend(loc='lower left') #显示图例
axes[1].legend(loc='lower left') #显示图例#设置两个轴显示刻度
y_label=['{}℃'.format(i)for i in y]
x_label=['{}h'.format(i)for i in x]#添加网格
axes[0].grid(True,linestyle='--',alpha=0.5)
axes[1].grid(True,linestyle='--',alpha=0.5)
#添加描述信息
axes[0].set_xlabel('time/h')
axes[0].set_ylabel('tempreture/℃')
axes[0].set_title('tempreture_change_picture')axes[1].set_xlabel('time/h')
axes[1].set_ylabel('tempreture/℃')
axes[1].set_title('tempreture_change_picture')axes[0].set_xticks(x,x_label)
axes[0].set_yticks(y,y_label)axes[1].set_xticks(x,x_label)
axes[1].set_yticks(y1,y_label)plt.show()
Out
绘制数学函数
画图之前先写出y的表达式
import numpy as np
import math
x=np.linspace(-1,1,1000)
y=-1*x*x #表达式yplt.figure(figsize=(20,8),dpi=80)#创建画布
plt.plot(x,y) #绘制图形
plt.grid() #添加网格
plt.show()
柱状图
- 意义:能够一眼看出各个数据的大小,方便统计和对比数据之间的差别
- mayplotlib.pyplot.bar(x,width,align=‘center’,**kwargs) 绘制柱状图
- 用途:比较多组数据之间的差别
#绘制公司的第一月份和第一年的收入图
x=['company A','company B','company C','company D']
y_month=[1200,2100,4100,3110]
y_year=[5810,5120,8040,7410]
plt.figure(figsize=(6,4),dpi=80)#创建画布
plt.bar([0,1,2,3],y_month,width=0.2,label='first month income',color=['r']) #绘制图形
plt.bar([0.2,1.2,2.2,3.2],y_year,width=0.2,label='first year income') #绘制图形
plt.legend()plt.xticks(range(4),x)
plt.title('company income table')
plt.grid() #添加网格
plt.show()
直方图
- 组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数称为组数
- 组距:每一组两个端点的差
- 意义:直方图展示数据的分布
- matplotlib.pyplot.hist(x,bins=None,normed=None,**kwargs)
- x:画图的数据
- bins:组数
x=[143,152,164,148,165,157,159,162,170,176,148,154,165,158,149,172,157,164,168,157]plt.figure(figsize=(6,4),dpi=80)#创建画布
plt.hist(x,11)
plt.title('table')#标题
plt.xticks(range(min(x),max(x),3))
plt.show()
散点图
- 意义:判断变量之间是否存在数量关联趋势,展示数据分布规律
- matplotlib.pyplot.scatter() 绘制散点图
- 用途:探究不同变量之间的内在关系
饼图
- matplotlib.pyplot.pie(x,labels=,autopct=,colors)
- x:数量
- labels:每部分名称
- autopct:占比显示指定%1.2f%%
- colors:每部分颜色
name=['A','B','C','D','E','F']
count=[1250,900,850,749,1300,890]
plt.figure(figsize=(6,4),dpi=80)#创建画布
plt.pie(count,labels=name,colors=['r','b','y','g','c','m'],autopct='%1.2f%%')
plt.title('table')#标题
#如果图形不平整,加该行代码
#plt.axis('equal')
plt.show()
最后
可以关注一下我的公众号,最近开始写公众号,我会在上面分享一些资源和发布一些csdn上发布不了的干货
点个关注是对博主最大的支持
本文标签: python必备库 学习笔记 matplotlib
版权声明:本文标题:python必备库 学习笔记 matplotlib 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687330307h90302.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论