Python可视化库
一、numpy库
特征:
-
numpy库中最核心的部分是ndarray 对象。它封装了同构数据类型的n维数组,
-
它的功能将通过演示代码的形式呈现。
-
在数组中所有元素的类型必须一致,且在内存中占有相同的大小。
-
数组元素可以使用索引来描述,索引序号从0开始。
-
numpy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此
类推。在numpy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴
的数量。
二、基于Matplotlib的数据可视化(MATLAB+Plot+Library)
1.matplotlib.pyplot函数库简介
相关函数
函数 | 说明 |
---|---|
figure() | 创建一个新的绘图窗口。 |
figtext() | 为 figure 添加文字 |
axes() | 为当前 figure 添加一个坐标轴 |
plot() | 绘图函数 |
polar() | 绘制极坐标图 |
axis() | 获取或设置轴属性的边界方法(坐标的取值范围) |
clf | 清除当前 figure 窗口 |
cla | 清除当前 axes 窗口 |
close | 关闭当前 figure 窗口 |
subplot | 一个图中包含多个 axes |
text() | 在轴上添加文字 |
title() | 设置当前 axes 标题 |
xlabel/ylabel | 设置当前 X 轴或 Y 轴的标签 |
hist() | 绘制直方图 |
hist2d() | 绘制二维在直方图 |
hold | 设置当前图窗状态;off 或者 on |
imread() | 读取一个图像,从图形文件中提取数组 |
legend() | 为当前 axes 放置标签 |
pie() | 绘制饼状图 |
scatter() | 做一个 X 和 Y 的散点图,其中 X 和 Y 是相同长度的序列对象 |
stackplot() | 绘制一个堆叠面积图 |
acorr() | 绘制 X 的自相关函数 |
annotate() | 用箭头在指定的数据点创建一个注释或一段文本 |
bar() | 绘制垂直条形图 |
barh() | 绘制横向条形图 |
barbs() | 绘制一个倒钩的二维场 |
1)plt.figure()
说明:matplotlib 所绘制的图形位于 figure 对象中,plt.figure()函数的主要作用是构建一张空白的画布,并可以选择是否将整个画布划分为多个区域,方便在同一幅图片上绘制多个图形。
参数 | 说明 |
---|---|
num | 设置图像编号 |
figsize | 设置图像的宽度和高度,单位为英寸 |
facecolor | 设置图像背景颜色 |
dpi | 设置绘图对象的分辨率 |
edgecolor | 设置图像边框颜色 |
在创建了图像区域之后,再用函数plt.show()显示
# 创建一个大小为6*4的空白绘图区域并显示
plt.figure(figsize=(6,4))
plt.show()
2)plt.subplot()
说明:subplot()用于在全局绘图区域中创建子绘图区域。
参数 | 说明 |
---|---|
nrows | subplot的行数 |
ncols | subplot的列数 |
sharex | x轴刻度 |
sharey | y轴刻度 |
使用subplot可以规划figure划分为n个子图,但每条subplot命令只会创建一个子图
# 用subplot划分子区域,将全局划分为 4*4 的区域,其中横向为 4,纵向也为 4,并在第 2 个位置(靠左上方)生成了一个坐标系
import matplotlib.pyplot as plt
plt.subplot(442)
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/d9383e1d386449c4f2fd5b8a42353a8e.png)
可以通过 sharex 和 sharey 表明子图分别拥有相同的 x 轴和 y 轴
fig , axes = plt.subplots(2,3) # 'fig'是包含整个图形的Figure对象,'axes'是一个包含6个子图Axes对象的2*3的Numpy数组
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/01fb63741da0a7182452d5d78669418a.png)
注:可以通过‘axes’数组来访问每个子图,例如‘axes[0,0]’表示第一行第一列的子图。
fig,axes = plt.subplots(2,2,sharex = True,sharey = True)
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/5810791171de3fe64b55b8a56888e4f9.png)
例:
# 绘制直方图
import matplotlib.pyplot as plt
import numpy as np
fig,axes = plt.subplots(2,2,sharex = True,sharey = True)
for i in range(2):
for j in range(2):
axes[i,j].hist(np.random.randn(500),bins =50,color='k',alpha= 0.5)
![](https://i-blog.csdnimg.cn/blog_migrate/0f73b32454f87c829802552d99560811.png)
# 在每个子图中绘制直方图。这里使用了NumPy的random.randn函数生成500个服从标准正态分布的随机数,然后使用hist函数绘制直方图。
# 参数 bins=50 指定了直方图的箱数,color='k' 指定了直方图的颜色为黑色,alpha=0.5 设置了直方图的透明度。
axes[i,j].hist(np.random.randn(500),bins =50,color='k',alpha= 0.5)
3)plt.axes()
plt.axes()创建一个坐标系风格的子绘图区域,默认创建一个subplot(111) 坐标系。语法格式plt.axes(rect,axisbg= ),其中参数rect=[left,bottom,width,height]中4个变量的范围都是[0,1],表示坐标系在全局绘图区域的位置关系,axisbg指定坐标背景色(matplotlib 2.0后版本中不推荐
使用axisbg,可改为facecolor)。
import matplotlib.pyplot as plt
plt.axes([0.1,0.1,0.7,0.3],facecolor='y')
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/b73dc03c823382698cba175dc27ef4c8.png)
4)plt.subplots_adjust()
plt.subplots_adjust()用于调整子绘图区域的布局。常见语法如下:
plt.subplots_adjust(left=,bottom=,right=,top=,wspace=,hspace=)
参数 | 说明 |
---|---|
left | 画布中子图左边离y轴距离 |
bottom | 画布中子图下边离x轴距离 |
right | 画布中子图右边离y轴距离 |
top | 画布中子图上边离x轴距离 |
wspace,hspace | 子图之间的距离 |
import matplotlib.pyplot as plt
import numpy as np
fig,axes = plt.subplots(2,2,sharex = True,sharey = True)
for i in range(2):
for j in range(2):
axes[i,j].hist(np.random.randn(500),bins =50,color='k',alpha= 0.5)
plt.subplots_adjust(left=0.2,bottom=0.1,right=0.8,top=0.8, hspace=0.5,wspace=0)
![](https://i-blog.csdnimg.cn/blog_migrate/1a839af7fd99ba356e97efc42b7c1fe5.png)
2.matplotlib.pyplot相关函数简介
在matplotlib.pyplot 库中有plt子库,该子库提供了7个用于读取和显示的函数, 17个用于绘制基础图表的函数,3个区域填充函数,9个坐标轴设置函数以及11个标签与文本设置函数。(以下表格中的函数参数没有列出)
plt库中的读取和显示函数
函数名称 | 函数作用 | 函数名称 | 函数作用 |
---|---|---|---|
plt.legend() | 在绘图区域放置绘图标签 | plt.imsave() | 保存数组为图像文件 |
plt.show() | 显示绘制的图像 | plt.savefig() | 设置图像保存格式 |
plt.matshow() | 在窗口中显示数组矩阵 | plt.imread() | 从图像文件中读取数组 |
plt.imshow() | 在axes上显示图像 |
plt库中的基础图表函数
函数名称 | 函数作用 |
---|---|
plt.plot(x,y) | 根据(x,y)数组绘制直线、曲线 |
plt.boxplot() | 绘制箱型图 |
plt.bar() | 绘制条形图/柱状图 |
plt.barh() | 绘制横向条形图 |
plt.polar() | 绘制极坐标图 |
plt.pie() | 绘制饼图 |
plt.psd() | 绘制功率谱密度图 |
plt.specgram() | 绘制谱图 |
plt.cohere(x,y) | 绘制x-y的相关性函数 |
plt.scatter() | 绘制散点图 |
plt.step() | 绘制布阶图 |
plt.hist() | 绘制直方图 |
plt.contour() | 绘制等值线 |
plt.clines() | 绘制垂直线 |
plt.stem() | 绘制曲线中每个点到水平轴线的垂线 |
plt.plot_date() | 绘制数据日期 |
plt.plotfile | 绘制数据后写入文件 |
坐标轴设置函数
函数名称 | 函数作用 |
---|---|
plt.axis() | 获取设置轴属性 |
plt.xlim() | 设置X轴的取值范围 |
plt.ylim() | 设置Y轴的取值范围 |
plt.xscale() | 设置X轴缩放 |
plt.yscale() | 设置Y轴缩放 |
plt.legend() | 指定当前图形的图例大小、位置、标签 |
plt.autoscale() | 自动缩放轴视图 |
plt.text() | 为axis图添加注释 |
plt.thetagrids() | 设置极坐标网格 |
plt.grid() | 打开或关闭极坐标 |
plt.xticks() | 指定X轴刻度的数目与取值 |
plt.yticks() | 指定Y轴刻度的数目与取值 |
区域填充函数
函数名称 | 函数作用 |
---|---|
fill(x,y,c,color) | 填充多边形 |
fill_between(x,y1,y2,where,color) | 填充曲线围成的多边形 |
fill_betweenx(y,x1,x2,where,hold) | 填充水平线之间的区域 |
plt库中的标签与文本设置函数
函数名称 | 函数作用 |
---|---|
plt.figlegend() | 为全局绘图区域放置图注 |
plt.xlabel() | 设置当前x轴的文字 |
plt.ylabel() | 设置当前y轴的文字 |
plt.xicks() | 设置当前x轴刻度位置的文字和值 |
plt.yticks() | 设置当前y轴刻度位置的文字和值 |
plt.clabel() | 设置等高线数据 |
plt.get_figlabels() | 返回当前绘图区域的标签列表 |
plt.figtext() | 为全局绘图区域添加文本信息 |
plt.title() | 设置标题 |
plt.suptitle() | 设置总标题 |
plt.annotate() | 为文本添加注释 |
3.添加画布内容
在画布上绘制图形,需要设置绘图的一些属性,如标题、轴标签等。其中添加标题、添加坐标轴名称、绘制图形等步骤是并列的,没有先后顺序,但添加图例必须要在绘制图形之后。
例:绘图时设置坐标轴属性
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
data=np.arange(0,1,0.01)
plt.title('my lines example')
plt.xlabel('X')
plt.ylabel('Y')
plt.xlim(0,1)
plt.ylim(0,1)
plt.xticks([0,0.2,0.4,0.6,0.8,1])
plt.yticks([0,0.2,0.4,0.6,0.8,1])
plt.plot(data,data**2)
plt.plot(data,data**3)
plt.legend(['y=x^2','y=x^3'])
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/ce985799d95151c37b65f65c21730376.png)
例:包含子图绘制的基础语法
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
data=np.arange(0,np.pi*2,0.01)
fig1=plt.figure(figsize=(9,7),dpi=90)
#确定画布大小
#绘制第一幅子图
ax1=fig1.add_subplot(1,2,1)
plt.title('lines example')
plt.xlabel('X')
plt.ylabel('Y')
plt.xlim(0,1)
plt.ylim(0,1)
plt.xticks([0,0.2,0.4,0.6,0.8,1])
plt.yticks([0,0.2,0.4,0.6,0.8,1])
plt.plot(data,data**2)
plt.plot(data,data**3)
plt.legend(['y=x^2','y=x^3'])
#绘制第二幅子图
ax1=fig1.add_subplot(1,2,2)
plt.title('sin-cos')
plt.xlabel('X')
plt.ylabel('Y')
plt.xlim(0,np.pi*2)
plt.ylim(-1,1)
plt.xticks([0,np.pi/2,np.pi,np.pi*3/2,np.pi*2])
plt.yticks([-1,-0.5,0,0.5,1])
plt.plot(data,np.sin(data))
plt.plot(data,np.cos(data))
plt.legend(['sin','cos'])
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/fec42822432c2d12d19c7cca3bf281c6.png)
关于 plt.legend()的常用设置示例:
plt.legend(loc = 'best',frameon = False) #去掉图例边框,推荐使用
plt.legend(loc = 'best',edgecolor = 'blue') #设置图例边框颜色
plt.legend(loc = 'best',facecolor = 'blue') #设置图例背景颜色,若无边框,参数无效
4.绘图的保存
可以通过 plt.savafig()保存绘制的图片。可以指定图片的分辨率、边缘的颜色等参数。
参数 | 说明 |
---|---|
fname | 包含文件路径或 Python 文件型对象的字符串。图片格式是从文件扩展名中推断出来的(例如 pdf 格式的.pdf) |
dpi | 设置每英寸点数的分辨率,默认为 100 |
facecolor ,edgecolor | 子图之外的图形背景颜色,默认是’w’(白色) |
format | 文件格式(‘png’,’pdf’,’svg’,’ps’等) |
bbox_inches | 要保存的图片范围,如果设置为‘tight‘则去除图片周围的空白 |
transparent | transparent=True表示保存的图形文件将具有透明背景。如果设置为False,则背景将是不透明的。 |
例:
fig.savefig(save_path, format='png', transparent=True, dpi=300, pad_inches = 0)
5.设置动态rc参数
Matplotlib 配置了配色方案和默认设置,主要用来准备用于发布的图片。有两种方式可以设置参数,即全局参数定制和 rc 设置方法。
# 查看matplotlib的rc参数
import matplotlib as plt
print(plt.rc_params())
5.1全局参数定制
Matplotlib 的全局参数可以通过编辑其配置文件设置
# 显示当前用户的配置文件目录
import matplotlib as plt
print(plt.matplotlib_fname())
C:\ProgramData\anaconda3\Lib\site-packages\matplotlib\mpl-data\matplotlibrc
查找到当前用户的配置文件目录,然后用编辑器打开,修改 matplotlibrc 文件,即可修改配置参数。
5.2 rc参数设置
使用 python 修改 rc 参数可以自定义图形的各种默认属性,被称为 rc 配置或rc 参数。
几乎所有的默认属性都是可以控制的,例如视图窗口大小以及每英寸点数、线条宽度、颜色和样式、坐标轴、坐标和网格属性、文本、字体等。
线条的常用rc参数名称、说明与取值
rc参数名称 | 解释 | 取值 |
---|---|---|
lines.linewidth | 线条宽度 | 取0-10之间的数值,默认为1.5。 |
lines.linestyle | 线条样式 | 可取“-”、“–”、“-.”、“:”四种。默认为“-”。 |
lines.marker | 线条上点的形状 | 可取“o”、 “D”、 “h” 、“.” 、“,”、“S”等20种,默认为None。 |
lines.markersize | 点的大小 | 取0-10之间的数值,默认为1。 |
线条样式取值
linestyle 取值 | 意义 |
---|---|
- | 实线 |
– | 长虚线 |
-. | 点线 |
: | 短虚线 |
marker参数取值
marker 取值 | 说明 |
---|---|
‘o’ | 圆圈 |
‘D’ | 菱形 |
‘h’ | 六边形 1 |
‘H’ | 六边形 2 |
‘-’ | 水平线 |
‘8’ | 八边形 |
‘.’ | 点 |
‘s’ | 正方形 |
‘*’ | 星号 |
‘d’ | 小菱形 |
‘v’ | 一角朝下的三角形 |
‘<’ | 一角朝左的三角形 |
‘p’ | 五边形 |
‘,’ | 像素 |
‘+’ | 加号 |
‘>’ | 一角朝右的三角形 |
‘^’ | 一角朝上的三角形 |
‘\’ | 竖线 |
‘x’ | X |
‘None’ | 无 |
注意!!!由于默认的 pyplot 字体并不支持中文字符的显示,因此需要通过设置 font.sans-serif 参数改变绘图时的字体,使得图形可以正常显示中文。同时,由于更改字体后,会导致坐标轴中的部分字符无法显示,因此需要同时更改axes.unicode_minus 参数。
plt.rcParams[‘font.family’]=[‘SimHei’] #用来显示中文标签
plt.rcParams[‘axes.unicode_minus’]=False #用来正常显示负号
例:rc参数设置示例
import numpy as np
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
#配置中文显示
plt.rcParams['font.family'] = ['SimHei'] #用来显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
def f(t):
return np.cos(2*np.pi*t)
x1 = np.arange(0.0,4.0,0.5)
x2 = np.arange(0.0,4.0,0.01)
plt.figure(1)
plt.subplot(2,2,1)
plt.plot(x1,f(x1),'bo',x2,f(x2),'k')
plt.title('子图 1')
plt.subplot(2,2,2)
plt.plot(np.cos(2*np.pi*x2),'r--')
plt.title('子图 2')
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/8c34d80ded443604007557f7f091b7d1.png)
例:添加图例,添加每个图表时传递label参数
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax.plot(np.random.randn(30).cumsum(),color='k',linestyle='dashed',marker='o',label='one')
ax.plot(np.random.randn(30).cumsum(),color='k',linestyle='dashed',marker='+',label='two')
ax.plot(np.random.randn(30).cumsum(),color='k',linestyle='dashed',marker='v',label='three')
#ax.set_xticks([0,25,50,75,100]) #设置刻度
#ax.set_xticklabels(['x1','x2','x3','x4','x5'],rotation=30,fontsize='small') #改变刻度
ax.legend(loc='best')
![](https://i-blog.csdnimg.cn/blog_migrate/798b7861849a0dcf8e942b0b635bfe54.png)
若使用 ax.set_xticks([0,25,50,75,100]) #设置刻度,则效果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/e970c76b7123af2401a66288c8d80009.png)
若使用 ax.set_xticklabels([‘x1’,‘x2’,‘x3’,‘x4’,‘x5’],rotation=30,fontsize=‘small’) #改变刻度,则效果如下(注意 x 轴标签)
![](https://i-blog.csdnimg.cn/blog_migrate/202f94ec31289b8e2f54bbdb69652526.png)
其中 rotation 参数表示 x 坐标标签的旋转角度,fontsize 为字号,可以取值为’xx-small’,‘x-small’,‘small’,‘medium’,‘large’,‘x-large’,‘xx-large’,‘larger’,‘smaller’,‘None’
6.绘图填充
例:使用fill_between()填充曲线下面部分区域的填充
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,1,500)
y=np.sin(3*np.pi*x)*np.exp(-4*x)
fig,ax=plt.subplots()
plt.plot(x,y)
plt.fill_between(x, 0, y, facecolor='green', alpha=0.3)
![](https://i-blog.csdnimg.cn/blog_migrate/837c80e3181f43f905a0a547425b732d.png)
其中,第一个参数表示覆盖的区域,参数 x 表示整个 x 轴都覆盖;0 表示覆盖的下限;y 表示覆盖的上限是 y 这个曲线;facecolor 表示覆盖区域的颜色;alpha表示覆盖区域的透明度[0,1],其值越大,表示越不透明。
例:两条曲线之间的区域填充
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,1,500)
y1=np.sin(3*np.pi*x)*np.exp(-4*x)
y2 = y1 + 0.2
plt.plot(x, y1,'b')
plt.plot(x, y2, 'r')
plt.fill_between(x, y1, y2, facecolor='green', alpha=0.3) #两条曲线之间的区域填充
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/7fc9c5c4f9d74d305b09b59045866db0.png)
例:直接使用fill进行绘图的填充
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,1,500)
y=np.sin(3*np.pi*x)*np.exp(-4*x)
fig,ax=plt.subplots()
ax.fill(x,y)
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/8150f4a6ac1a6356096127ec168857cb.png)
7.文本注解
绘图时有时需要在图表中加文本注解,这时可以通过 text 函数在指定的位置(x,y)加入文本注解。如在柱状图上加入文本数字,可以清楚地显示每个类别的数量。如 6 个城市 8 月份的日均最高气温。
例:绘制气温柱状图并标注
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['SimHei']
data = [25,30,32,34,34,23]
label = ['青海','兰州','北京','上海','广州','拉萨']
plt.xticks(range(len( data)),label)
plt.xlabel('城市')
plt.ylabel('温度')
plt.title('六城市 8 月份日均最高气温')
plt.bar(range(len( data)),data)
for x,y in zip(range(len(data)),data):
plt.text(x,y,y,ha = 'center',va = 'bottom') #文本注解
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/93198fda87c33028420cb6f06ffddd64.png)
8.matplotlib可视化
8.1 绘制折线图
折线图的主要功能是查看因变量y随着自变量x改变的趋势,最适合用于显示随时间(根据常用比例设置)而变化的连续数据。同时还可以看出数量的差异,增长趋势的变化。
绘制折线图使用的 plot()函数的基本格式:
matplotlib.pyplot.plot(*args,**kwargs)
参数 | 说明 |
---|---|
x,y | 接收 array。表示 x 轴和 y 轴对应的数据。无默认。 |
color | 接收特定 string。指定线条的颜色。默认为 None。 |
linestyle | 接收特定 string。指定线条类型。默认为“-”。 |
marker | 接收特定 string。表示绘制的点的类型。默认为 None。 |
alpha | 接收 0-1 的小数。表示点的透明度。默认为 None。 |
颜色缩写 | 代表的颜色 |
---|---|
b | 蓝色 |
g | 绿色 |
r | 红色 |
c | 青色 |
m | 品红 |
y | 黄色 |
k | 黑色 |
w | 白色 |
简单折线图
import numpy as np
import matplotlib.pyplot as plt
x1 = np.arange(0, 30)
plt.plot(x1,x1*2, 'b')
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/5e2df50b39a00c820f1e961c7ebe7538.png)
例:用matplotlib库绘制折线图
import matplotlib.pyplot as plt
dataX = [1,2,3,4]
dataY = [2,4,4,2]
plt.plot(dataX,dataY)
#配置中文显示
plt.rcParams['font.family'] = ['SimHei'] #用来显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
plt.title("绘制直线");
plt.xlabel("x轴");
plt.ylabel("y轴");
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/5144952f52acb124716c8842b2d6962a.png)
例:用numpy库和matplotlib库绘制图形
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10) # 取值依次为0-9的等差数列
y = np.sin(x)
z = np.cos(x)
plt.plot(x, y, marker="*", linewidth=3, linestyle="--", color="red")
#marker设置数据点样式,linewidth设置线宽,linestyle设置线型样式,color设置颜色
plt.plot(x, z)
plt.title("matplotlib")
plt.xlabel("x")
plt.ylabel("y")
plt.legend(["Y","Z"], loc="upper right")# 设置图例
plt.grid(True)
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/65205845340bb14ae388f1f392f50db1.png)
8.2 绘制柱状图
由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或以上的数值。
绘制柱状图的 bar 函数的格式:
matplotlib.pyplot.ber(left,height,width=0.8,bottom=None,hold=None,data=None)
参数 | 说明 |
---|---|
left | 接收 array。表示 x 轴数据。无默认。 |
height | 接收 array。表示 x 轴所代表数据的数量。无默认。 |
width | 接收 0-1 之间的 float。指定柱状图宽度。默认为 0.8。 |
color | 接收特定 string 或者包含颜色字符串的 array。表示直方图颜色。默认为 None。 |
例:用matplotlib库绘制柱状图形
import matplotlib.pyplot as plt
x = [0,1,2,3,4,5]
y = [1,2,3,2,4,3]
plt.bar(x,y) #竖的条形图
plt.rcParams['font.family'] = ['SimHei'] #用来显示中文标签
plt.title("柱状图"); #图标题
plt.xlabel("x轴");
plt.ylabel("y轴");
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/d1010824a32c9438ba6d74670e854500.png)
例:绘制并列柱状图
import numpy as np
import matplotlib.pyplot as plt
#fig,ax=plt.subplots()
plt.rcParams['font.family']=['SimHei']#用来显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.figure(figsize=(7,5))
x=np.arange(1,6)
Y1=np.random.uniform(1.5,1.0,5)
Y2=np.random.uniform(1.5,1.0,5)
plt.bar(x,Y1,width=0.35,facecolor='lightskyblue',edgecolor='white')
plt.bar(x+0.35,Y2,width=0.35,facecolor='yellowgreen',edgecolor='white')
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/d2044c09bfcf175d362ab77eacb64f5e.png)
8.3 绘制直方图
直方图又称质量分布图(概率分布图),是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
绘制直方图是使用matplotlib.pyplot.hist()函数,格式:
matplotlib.pyplot.hist(x,bins=None,range=None,density=None,weights=None,
bottom=None,histtype='bar',align='mid',orientation='vertical',rwidth=Non
e,color=None,label=None,stacked=False,normed=None,data=None,…)
可以看到有很多参数,在实际使用过程中只需要关注几个重要的参数即可。其中,参数bins: 划分间隔,可以采用整数来指定间隔的数量,也可以通过列表来直接指定间隔的范围。最简单的,使用默认的,输入数据,绘制直方图,而不设置任何参数
例:绘制直方图
import matplotlib.pyplot as plt
import numpy as np
mean, sigma = 0, 1 # mean=0 均值为0,sigma=1 标准差为1
x = mean + sigma * np.random.randn(10000)
plt.hist(x,50,density=1,histtype='bar',facecolor='red',alpha=0.75)
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/d57f9bf34a3dfc4ba73c169a8fa54909.png)
例:绘制直方图及与该图相对应的正态分布曲线
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
fig,ax=plt.subplots()
plt.rcParams['font.family']=['SimHei']#用来显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
np.random.seed(1587554)
mu=100
sigma=15
x=mu+sigma*np.random.randn(437)
num_bins=50
n,bins,patches=ax.hist(x,num_bins,density=1) #绘制直方图
y=norm.pdf(bins,mu,sigma)
#正态概率密度函数 norm.pdf(X,mu,sigma)其中 x 为向量,mu 为均值,sigma 为标准差。
ax.plot(bins,y,'--')
fig.tight_layout() #自动调整子图参数,使之填充整个图像区域
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/6ca0b0592e172b50ed8712f91d4cf405.png)
8.4 绘制散点图
散点图在回归分析中使用较多,它将序列显示为一组点。值由点在图表中的位置表示,类别由图表中的不同标记表示,因此散点图通常用于比较跨类别的聚合数据。
绘制散点图的 scatter 函数的格式:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, alpha=None, **kwargs)
参数 | 说明 |
---|---|
x,y | 接收 array。表示 x 轴和 y 轴对应的数据。无默认。 |
s | 接收数值或者一维的 array。指定点的大小,若传入一维 array 则表示每个点的大小。默认为 None。 |
c | 接收颜色或者一维的 array。指定点的颜色,若传入一维 array 则表示每个点的颜色。默认为 None |
marker | 接收特定 string。表示绘制的点的类型。默认为 None。 |
alpha | 接收 0-1 的小数。表示点的透明度。默认为 None。 |
例:绘制散点图
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x,y)
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/45dbf8f941e5579f8e64bb924ae5da11.png)
8.5 绘制极坐标图
极坐标图用于对多维数组进行直接的对比,多用在企业的可视化数据模型的对比与分析中。
例:绘制极坐标图
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1 = plt.subplot(121, projection='polar')
ax1.plot(theta,theta/6,'--',lw=2)
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/7136f6b6a1351fbb2beab1bc309d1d81.png)
该例绘制了一个极坐标图,用 plt.polar()函数来实现。在 matplotlib 库中 pyplot子库提供了绘制极坐标图的方法,在调用 subplot()创建子图时通过设置projection='polar'即可创建一个极坐标图,然后调用 plot()在极坐标子图中绘图。
8.6 绘制饼图
饼图用于表示不同分类的占比情况,通过弧度大小来对比各种分类,饼图通过将一个圆饼按照分类的占比划分成多个区块,整个圆饼代表数据的总量,每个区块(圆弧)表示该分类占总体的比例大小。
# 绘制饼图的 pie 函数的格式
matplotlib.pyplot.pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None, radius=None, … )
参数 | 说明 |
---|---|
x | 接收 array。表示用于绘制撇的数据。无默认。 |
explode | 接收 array。表示指定项离饼图圆心为 n 个半径。默认为 None。 |
labels | 接收 array。指定每一项的名称。默认为 None。 |
color | 接收特定 string 或者包含颜色字符串的 array。表示饼图颜色。默认为 None。 |
autopct | 接收特定 string。指定数值的显示方式。默认为 None。 |
pctdistance | 接收 float。指定每一项的比例和距离饼图圆心 n 个半径。默认为 0.6。 |
labeldistance | 接收 float。指定每一项的名称和距离饼图圆心多少个半径。默认为 1.1。 |
radius | 接收 float。表示饼图的半径。默认为1。 |
例:绘制饼图
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] #设置字体
plt.title("饼图");#设置标题
labels = '计算机系','机械系','管理系','社科系'
sizes = [45,30,15,10] #设置每部分大小
explode = (0,0.0,0,0) #设置每部分凹凸
counterclock = False#设置顺时针方向
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=90) #设置饼图的起始位置,startangle=90表示开始角度为90度
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/fac285e6df9158db8ade7d3c28540935.png)
饼图绘制中,如果在 explode=(0,0.0,0,0)中将相应的 0.0 改为 0.1 即可将第二部分“机械系”区域凸显。
![](https://i-blog.csdnimg.cn/blog_migrate/316012141c88b8f759587faeaf3e0e2c.png)