文章目录
matlabplid的教程一 传送门
一. 条形图
1.1 简介
条形图是一种图表或图形,它显示带有矩形条的分类数据,其高度或长度与它们所代表的值成比例。条形图显示了离散类别之间的比较,图表的一个轴显示特定类别,另一个轴表示测量值
1.2 垂直条形图
ax.bar(x,height,width=0.8,bottom=None,*,align='center',data=None,**kawargs)
参数 | 说明 |
---|---|
x | 表示条形的x坐标的标量序列。如果x是条形中心(默认)或左边缘,则对齐控件 |
height | 标量或标量序列表示条形的高度 |
width | 标量或类似数组,可选,条形的宽度默认为0.8 |
bottom | 标量或类似数组,可选,条形的y坐标默认为None |
align | {‘center’,‘edge’},可选 ,默认为center |
color | 条形颜色,可以是字符串也可以是列表 |
垂直基本条形图
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
langs=["c","c++","python","Java","PHP"]
nums=[22,45,65,33,42]
ax.bar(langs,nums,0.5,10,align='center',color='red')
垂直组合条形图
当比较多个数量值时,可能需要一个条形图,其中一个颜色的条形图用于一个数量值
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
x=np.arange(4)
data=[[30,25,50,20],
[40,23,51,17],
[35,22,48,19]]
ax.bar(x,data[0],color='r',width=0.25)
ax.bar(x+0.25,data[1],color='b',width=0.25) #让x轴平移,不然会发生覆盖
ax.bar(x+0.5,data[1],color='g',width=0.25) #让x轴平移,不然会发生覆盖
plt.show()
垂直堆叠条形图
堆积条形图堆叠表示彼此顶部的不同组的条形图,结果为条形图的高度显示组的组合结果。Pylot.bar()函数的可选bottom参数指定条的起始值。它不是从零运行到一个值,而是从底部到值。第一次调用pylot.bar()绘制蓝条。第二次调用pylot.bar()绘制红色条形图,蓝色条形图的底部位于红色条形图的顶部。
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
N=5
ind=np.arange(1,N+1)
menNum=(20,35,30,35,27)
womenNum=(25,32,34,20,25)
ax.bar(ind,menNum,color='r')
ax.bar(ind,womenNum,bottom=menNum,color='b')
ax.set_ylabel('peopleNum')
ax.set_title('The number of men and women in the class')
ax.set_xticks(ind)
ax.set_xticklabels(['G1','G2','G3',"G4",'G5'])
ax.set_yticks(np.arange(0,81,10))
ax.legend(labels=['men','women'])
plt.show()
1.3 水平条形图
ax.barh(y,width,height=0.8,left=None,*,align='center',**kwargs)
参数 | 说明 |
---|---|
y | 表示条形的y坐标的序列,如果y是条形中心(默认)或左缘,则对齐 |
width | 标量或标量序列表示的条的宽度 |
height | 标量或类似数组,可选 |
bottom | 标量或类似数组,可选 |
alith | {‘center’,‘edge’},可选,默认’center’ |
color | 条形颜色,可以是字符串也可以是列表 |
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
langs=["c","c++","python","Java","PHP"]
nums=[22,45,65,33,42]
ax.barh(langs,nums,0.5,10,align='center',color='red')
其它水平组合和堆叠条形图使用方法和垂直条形图的使用方法是一样的,这里就不展开介绍了
二. 直方图
2.1 简介
直方图是数值数据分布的精确表示。它是连续变量的概率分布的估计,它是一种条形图
2.2 API
ax.hist(x,bins=None,density=None,range=None,weights=None,cumulative=False,bottom=None,histtype='bar',align='mid',orientation='vertial',rwidth=None,log=False,color=Nnoe,label=None,stacked=False,normed=None,*,data=None,**kwargs,)
参数 | 说明 |
---|---|
x | 数组或者是数组序列 |
bins | 整数或序列或auto,可选项,通常指定为变量的连续,非重叠区间 |
range | bins的下部和上部范围 |
density | 如果为true则返回元组的第一个元素将是规范化以形成概率密度的计数 |
cumulative | 如果为True,则计算直方图,其中每个bin给出该bin中的计数加前面所有bin的值 |
histtype | 要绘制的直方图的类型,默认为bar |
normed | 如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False |
orientation | 通过设置orientation为 horizontal创建水平直方图,默认你为垂直 |
2.3 直方图绘制
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
a=np.array([22,87,5,43,56,74,55,54,11,20,51,5,79,31,27])
ax.hist(a,bins=[0,25,50,75,100])#bin用来表示区间,例如[0,25]然后直方图表示的就是落在这个区间数据的数量
ax.set_title("Result histogram")
ax.set_xticks([0,25,50,75,100])
ax.set_xlabel('score')
ax.set_ylabel('The number of students')
plt.show()
三. 饼图
3.1 简介
饼图只能显示一系列数据,饼图在一个数据系列中显示项目的大小(称为楔形),与项目的总和成比例,饼图中的数据点显示为整个饼图的百分比
3.2 API
ax.pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radiuis=None,counterclock=True,wedgeprops=None,textpros=None,center=(0,0),frame=False,rotatelabels=False,*,)
参数 | 说明 |
---|---|
x | 数组式,楔形大小 |
explode | 设置每一块顶点距圆形的长度(比例值,会使得楔形从圆形中拉出来) |
labels | 列表。一系列字符串,为每个楔形提供标签 |
colors | 一系列matplotlib颜色参数,饼图将通过它循环。如果为None,将使用当前活动周期中的颜色 |
autopct | String用于用数值标记楔形。标签将放在楔子内。格式字符串将为fmt%pct |
pctdistance | 设置比例值文字距离圆心的距离 |
shadow | 布尔值,设置是否绘制阴影 |
startangle | 设置选择旋转度 |
3.3 饼图绘制
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
fig=plt.figure(figsize=(10,5))
ax=fig.add_axes([0,0,1,1])
ax.axis('equal') #如果不设置equal由于x轴和y轴的比例不同,导致绘制出是一个椭圆
langs0=['c','c++','java','Python','PHP']
students=[23,17,35,29,12]
ax.pie(students,labels=langs,autopct="%.2f%%",colors=['red','yellow','blue','green','pink'],explode=[0.1,0,0,0,0],
shadow=True) #表示保留2位小数
四. 散点图
4.1 简介
散点图用于绘制水平轴和垂直轴上的数据点,以试图显示一个变量受另一个变量 影响的程度。数据表中的每一行都由一个标记表示,该位置取决于其在X和Y轴上设置的列中的值,可以将第三个变量设置为对应标记的颜色或大小,从而为该图添加另一个维度。
4.2 API
ax.scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,edgecolors=None,*,plotnonfinite=False,data=None,**kwargs,)
4.3 散点图绘制
fig=plt.figure(figsize=(10,5))
ax=fig.add_axes([0,0,1,1])
girls_grades=[89,90,70,89,100,80,90,100,80,34]
boys_grades=[30,29,49,48,100,48,38,45,20,30]
grades_range=[10,20,30,40,50,60,70,80,90,100]
ax.scatter(grades_range,girls_grades,color='r',alpha=1)
ax.scatter(grades_range,boys_grades,color='b',alpha=1)
ax.set_title("examples of scatter plots")
ax.set_xlabel("scores range")
ax.set_ylabel("scores")
ax.legend(labels=['girls','boys'])
plt.show()
五. 箱形图
5.1 简介
箱型图也称为须状图,显示包含最小值,第一四分位数,中位数,第三四分位数和最大值的一组数据的摘要。
在箱形图中间的方块,绘制的从第一个四分位数到第三个四分位数的方框。垂直线穿过方框,须状从每个四分位数到最小值和最大值
5.2 API
ax.boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,widths=None,patch_artist=None,bootstrap=None,usermedians=None,conf_intervals=None,meanline=None,showmeans=None,showcaps=None,showbox=None,showfliers=None,boxpros=None,labels=None,flierprops=None,medianprops=None,capprops=None,whiskerprops=None,manage_ticks=True,autorange=False,zorder=None,*,data=None)
和其它API一样,虽然参数多但基本上用不到
5.3 绘制箱状图
fig=plt.figure(figsize=(10,5))
ax=fig.add_axes([0,0,1,1])
np.random.seed(10) #传入随机数种子
collectn_1=np.random.normal(100,10,200) #生成正态分布情况的数据(均值,标准差,个数)
collectn_2=np.random.normal(80,30,200)
collectn_3=np.random.normal(70,25,200)
collectn_4=np.random.normal(70,25,200)
ax.boxplot([collectn_1,collectn_2,collectn_3,collectn_4])
plt.show()
六. 轮廓图
6.1 简介
轮廓图(有时也称为水平图)是一种在二维平面上绘制三维表面的方法,它绘制了y轴上的两个预测变量X,Y的轮廓的响应变量。这些轮廓有时称为z切片或等响应值。如果要查看Z如果随两个输入X和Y的变化而变化,则轮廓图是非常适用的,例如Z=F(X,Y)。两个变量函数或等值线是函数具有常数值的曲线。自变量x和y通常限于称为meshgrid的规则网络。使用numpy.meshgrid使用x值数组和y值数组创建一个矩形网络。
6.2 轮廓图绘制
fig=plt.figure(figsize=(10,5))
ax=fig.add_axes([0,0,1,1])
x=np.linspace(-3,3,100)
y=np.linspace(-3,3,100)
X,Y=np.meshgrid(x,y)#生成矩形网格
z=np.sqrt(X**2+Y**2)
ct=ax.contourf(x,y,z) #绘制三维图像的切面图
fig.colorbar(ct)#颜色导航
plt.show()
七. 图像内的文字、注释和箭头
7.1 Api介绍
Pyplot函数 | 描述 |
---|---|
text() | 在Axes对象的任意位置添加文字 |
xlabel() | 给x轴添加标签 |
ylabel() | 个Y轴添加标签 |
title() | 给Axes对象添加标题 |
legend() | 为Axes对象创建图例 |
suptitle() | 为Figure对象添加中心化标题 |
figtext() | 在FIgure对象的任意位置添加文字 |
annotate() | 为Axes对象添加注释(箭头可选) |
7.2 Api使用
text(),xlabel(),ylabel(),title(),legend()
可以将任何matplotlib文本字符串中的子集TeXmarkup放在一对美元符号($)中
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
t=np.arange(0.0,2.0,0.01)
s=np.sin(2*np.pi*t)
ax.plot(t,s)
ax.set_title(r"$\sin x_i$",fontsize=20) #$$中写的就是公式,使用的是markdown的语法
ax.text(0.6,0.3,r'sunck is a good man',fontsize=20,bbox={'facecolor':'red'}) #位置是(0.6,0.3)单位为英寸
ax.set_xlabel("time(s)")
ax.set_ylabel("vo;ts(mv)")
ax.legend(labels=("k"),loc="right")
plt.show()
2. subtitle(),figtext()
import math
fig=plt.figure(figsize=(12,6))
x=np.arange(0,math.pi*2,0.05)
y1=np.sin(x)
y2=np.cos(x)
ax1=plt.subplot(121)
ax1.plot(x,y1)
ax2=plt.subplot(122)
ax2.plot(x,y2,color='r')
plt.suptitle("sin&cos") #画纸的主标题
plt.figtext(0.3,0.8,s="sin(0)=0") #在figure对象的指定位置加入指定的文字
plt.show()
3. annotate()
参数 | 说明 |
---|---|
xy | 设置箭头所指的坐标位置 |
xytext | 设置注释文字的位置 |
arrowprops | 以字典的形式设置箭头的样式 |
箭头的样式属性 | 说明 |
---|---|
width | 设置箭头长方形部分的宽度 |
headlength | 设置箭头尖端的长度 |
headwidth | 设置箭头尖端底部的宽度 |
facecolor | 设置箭头的颜色 |
shrink | 设置箭头的顶点、尾部与指示点和注释文字之间的距离(比例值) |
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
t=np.arange(0.0,2.0,0.01)
s=np.sin(2*np.pi*t)
ax.plot(t,s)
ax.set_title(r"$\sin x_i$",fontsize=20) #$$中写的就是公式,使用的是markdown的语法
ax.set_xlabel("time(s)")
ax.set_ylabel("vo;ts(mv)")
ax.legend(labels=("k"),loc="right")
ax.annotate("sunck",xy=(1.5,0.8),xytext=(1,0.4),arrowprops=dict(facecolor='red',shrink=(0.005)))
plt.show()
箭头使用汇总
fig=plt.figure(figsize=(12,9))
ax=fig.add_axes([0,0,1,1])
arrstyles=['-','->','-[','<-','fancy','simple','wedge']
for i, style in enumerate(arrstyles):
ax.annotate(style,xy=(0.2,0.9-0.1*i),xytext=(0.05,0.85-0.1*i),arrowprops=dict(arrowstyle=style)) #箭头的样式
connstyles=['arc','arc,angleA=10,armA=30,rad=30','arc3,rad=.2','arc3,rad=-.2','angle','angle3']
for i ,style in enumerate(connstyles):
ax.annotate(style,xy=(0.7,0.9-0.1*i),xytext=(0.6,0.85-0.1*i),arrowprops=dict(arrowstyle="->",connectionstyle=style))#箭头的形状