目录
matplotlib常用图表
plot()函数
线形图是最为常见的绘图方式,主要依靠其表现的曲线形状来展示出数据的特性,使用plot()函数可以绘制出线性图
语法格式:plt.plot(x,y,format_string,**kwargs)
参数 | 描述 |
---|---|
x | x轴数据 ,列表或数组,可选(当绘制多条曲线时必选) |
y | y轴数据,列表或数组 |
format_string | 控制曲线格式的字符串 |
**kwargs | 第二条曲线的参数或更多的[x,y,format_str] |
案例一:利用线性图绘制三角函数
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['axes.unicode_minus'] = False
x=np.linspace(0,np.pi)
y_sin=np.sin(x)
y_cos=np.cos(x)
y_tan=np.tan(x)
plt.subplot(221)
plt.plot(x,y_sin)
plt.subplot(222)
plt.plot(x,y_cos)
plt.subplot(223)
plt.plot(x,y_tan)
plt.show()
运行结果
散点图
有时候数据点之间的关系不一定呈现线性关系,有时需要查看数据点在空间中的分布情况,这时候就需要用到散点图,散点图主要用于演示两个变量的相关性:正相关、负相关、不相关
语法格式:scatter(x,y,s=None,c=None,marker=None,alpha=None,edgecolor=None,linewidths=None)
参数介绍
参数 | 描述 |
---|---|
x,y | 相同长度的数组或序列 |
c | 颜色 |
s | 标记大小 |
marker | 标记字符样式 |
edgecolor | 轮廓颜色 |
alpha | 透明度,取值范围(0-1) |
linewidths | 线宽 |
案例二:生成三种相关性的散点图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei' # 用于显示中文
matplotlib.rcParams['axes.unicode_minus'] = False # 用于显示负数
N=500
# 不相关
plt.subplot(221)
x1=np.random.randn(N)
y1=np.random.randn(N)
plt.scatter(x1,y1)
plt.title('不相关')
# 正相关
plt.subplot(222)
x2=np.random.randn(N)
y2=x2+np.random.randn(len(x2))*0.1
plt.title('正相关')
plt.scatter(x2,y2)
# 负相关
plt.subplot(223)
y3=-x2+np.random.randn(len(x2))*0.1
plt.title('负相关')
plt.scatter(x2,y3)
plt.show()
运行结果
饼图
语法格式:pie(sizes,explode,labels,autopct,shadow,startangle)
各参数说明1
参数 | 描述 |
---|---|
sizes | 各模块所占比例 |
explode | 各模块是否突出,0表示不突出,越大模块离中心越远 |
labels | 各模块标签 |
autopct | 各模块百分比精度,如’%.f%%'表示饼图的各模块显示的精度为整数,后面的两个百分号做转义符号用于显示一个% |
shadow | 是否显示阴影,默认False |
startangle | 开始模块所在位置(以x轴正半轴为起点旋转的角度) |
案例三:饼图示例
直方图
直方图是一种频次统计报告图,主要用于观察数据的分布状态,第I个长方条表示该区间发生的数量n,宽度表示该区间大小,区间范围是发生这些事的条件,
语法格式:pyplot.hist(x,bins=None,range=None,bottom=None,color=None,label=None)
主要参数 | 描述 |
---|---|
x | 指定每个bin(箱子)分布的数据,对应x轴 |
bins | 指定bin(箱子)的个数,也就是总共有几条条状图 |
density | 是否显示频数统计结果 |
normed | 决定y轴的取值是元素的个数(False),元素出现的频率(True) |
案例四:生成一个具有正态分布特点的柱状图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
data=np.random.normal(100,20,1000) # 生成一个均值100,标准差20,数据量为1000的具有正态分布特点的数组
# y轴为频度
plt.subplot(211)
plt.hist(data,bins=25,density=True)
# y轴为频率
plt.subplot(212)
plt.hist(data,bins=25,density=False)
plt.show()
运行结果
柱状图
能够直观地表现数据量以及增长变化关系,常用于表现各类经济或统计领域的分类数据2
语法格式:pyplot.bar(x,height,alpha=1,width=0.8,color,edgecolor,label,lw,bottom)
参数 | 描述 |
---|---|
x | x轴的位置序列 |
height | y轴的数值序列 |
alpha | 透明度 |
width | 柱状图宽度 |
color | 柱形图宽度 |
edgecolor | 图形边缘颜色 |
label | 注释 |
lw | 线的宽度 |
bottom | y轴坐标轴起点 |
案例五:柱状图示例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei' # 用于显示中文
x=np.arange(5)
y1=[20,15,20,35,30]
y2=[10,25,20,35,15]
width=0.5
plt.locator_params('both',nbins=6) # xy轴的刻度
# 垂直柱状图
plt.subplot(221)
plt.bar(x,height=y1,color='g')
plt.title('垂直柱状')
# 水平柱状图
plt.subplot(222)
plt.bar(x=0,bottom=x,height=0.8,width=y2,orientation='horizontal')
plt.title('水平柱状')
# 两个并列的柱状图
plt.subplot(223)
plt.bar(x,y1,width=width,label='y1-x')
plt.bar(x+width,y2,width=width,label='y2-x')
plt.legend(loc=0)
plt.title('并列的柱状图')
# 层叠的柱状图
plt.subplot(224)
plt.bar(x,y1,width=width,label='y1-x')
plt.bar(x,y2,bottom=y1,width=width,label='y2-x')
plt.legend(loc=0)
plt.title('层叠的柱状图')
plt.subplots_adjust(wspace =0.5, hspace =1) # 分别控制子图间的水平距离与竖直距离
plt.show()
运行结果