Python高级--matplotlib画图
一、Matplotlib基础
下面的测试数据下载
Matplotlib中的基本图表包括的元素
1) x轴和y轴 axis
水平和垂直的轴线
2)轴标签 axisLabel
水平和垂直的轴标签
3)x轴和y轴刻度 tick
刻度标示坐标轴的分隔,包括最小刻度和最大刻度
4)x轴和y轴刻度标签 tick label
表示特定坐标轴的值
5)绘图区域(坐标系) axes
实际绘图的区域
6)画布 figure
呈现所有的坐标系
1)只含单一曲线的图
画一条正弦曲线
x = np.arange(-np.pi,np.pi,0.1) # [start,] stop[, step,] 开始值 结束值 步长值
x
y = np.sin(x)
y
plt.plot(x,y) # plot(x, y) 最简单的参数形式 传入x和y的值
2)只含多个曲线的图
方法一:使用多个plot函数(推荐)
x1 = np.arange(-np.pi,0,0.1)
x2 = np.arange(0,np.pi,0.1)
# 方式一:多次使用 plt.plot绘制多个函数
plt.plot(x1,np.sin(x1))
plt.plot(x2,np.sin(x2))
方法二:在一个plot函数中传入多对X,Y值
x1 = np.arange(-np.pi,0,0.1)
x2 = np.arange(0,np.pi,0.1)
#调用一次plt.plot里面传入多个x和y的值 plt.plot(x1,y1,x2,y2,...xn,yn)
plt.plot(x1,np.sin(x1),x2,np.sin(x2))
3)子画布
matplotlib中画布分为主画布与子画布,主画布包含子画布
1、设置主画布的大小
plt.figure(figsize=None)
x = np.arange(-np.pi,np.pi,0.1)
plt.figure(figsize=(5,5)) #设置主画布大小 注意设置画布大小必须在图形之前才有效
plt.plot(x,np.tan(x))
2、设置子画布的大小
plt.subplot(*args, **kwargs)
'''
# subplot(2, 3, 3)
创建一个子画布 把原来的大的画布
上下分成2部分 左右分成3部分 占用哪个部分
'''
(1) : 创建子画布
plt.figure(figsize=(8,8))
axes1 = plt.subplot(4,2,1) # 根据传入的参数创建子画布 返回坐标系对象这里占纵向的1/4
axes2 = plt.subplot(4,2,4)
axes3 = plt.subplot(2,2,3) #注意,这里的纵向画布是占总画布的一半
axes4 = plt.subplot(2,2,4)
(2) : 在子画布中绘图
在每一个小的坐标系上绘图 而不是在大的画布上绘图
axes1.plot(x,np.sin(x))
axes2.plot(x,np.cos(x))
axes3.plot(x,np.tan(x))
axes4.plot(x,np.tanh(x))
4)网格线
plt.grid(b=None,which=’major’,axis=’both’,**kwargs)
注意:如果画布有子画布的话,plt.grid只会给离他最近的那个子画布绘制网格线
一般给子画布单独绘制网格线
创建一个空的画布
plt.figure(figsize=(8,8))
axes1 = plt.subplot(221)
axes2 = plt.subplot(222)
axes3 = plt.subplot(223)
axes4 = plt.subplot(224)
axis显示轴向
'''
axis: 默认为横纵都有
axis="x" 在 X 轴上方绘制网格线
axis="y" 在 Y 轴上方绘制网格线
'''
axes2.grid(axis='x') # 在轴上方绘制网格线
color(c)代表颜色
alpha表示线的明暗程度
linewidth(lw)代表线的粗细
axes4.grid(color='red',linewidth=2,alpha=0.2)
axes1.grid() # axis='both' 默认水平竖直方向都有网格线
axes2.grid(axis='x') # 在轴上方绘制网格线
axes3.grid(axis='y')
axes4.grid(color='red',linewidth=2,alpha=0.2)
5)坐标轴的轴线
plt.axis([xmin,xmax,ymin,ymax])
1)设置坐标轴的刻度起止值
(1) plt.axis()设置坐标轴起始值
plt.axis([xmin,xmax,ymin,ymax])
x = np.linspace(-1,1,100)
# x**2+y**2=1
# y**2=1-x**2
# y=(1-x**2)**0.5
y=(1-x**2)**0.5
plt.plot(x,y)
plt.plot(x,-y)
plt.axis([-2,2,-2,2]) # [x轴的起始值,x轴的结束值,y轴的起始值,y轴的结束值]
(2) xlim方法和ylim方法设置坐标轴起始值
2)设置坐标轴类型
plt.axis(‘xxx’) ‘off’、’equal’……
'''
equal:改变*x*或*y*轴的极限,使其等于*x*的增量
和*y*长度相同;一般用来绘制圆形
off:隐藏坐标轴
'''
(2) 绘制圆形
x = np.linspace(-1,1,100)
6)坐标轴的标签
设置坐标轴标签的方向,颜色,旋转角度
plt.xlabel( )方法 和 plt.ylabel( )方法
plt.xlabel(s,color=’orange’,fontsize=20,rotation=20)
'''
s: 标签名称
color:标签颜色
fontsize:标签字体大小
rotation: 标签旋转角度
'''
# 正弦曲线
x = np.arange(-np.pi,np.pi,0.1)
y = np.sin(x)
plt.plot(x,y)
# X Y 标签的内容
plt.xlabel('x')
plt.ylabel('f(x)=sin(x)')
plt.xlabel('x',color='orange',fontsize=20,rotation=20) #设置X轴标签的内容及样式
plt.ylabel('f(x)=sin(x)',rotation=60 ,fontsize=20) #设置Y轴标签的内容及样式
7)画布的标题
plt.title(s, *args, **kwargs)
'''
color:颜色
fontsize:字体大小
rotation:旋转角度
loc:位置{'center', 'left', 'right'}
默认在中间
'''
# 正弦曲线
x = np.arange(-np.pi,np.pi,0.1)
x
y = np.sin(x)
plt.plot(x,y)
plt.title('Sin(x)',color='red',fontsize=25,rotation=45,loc='right') # 默认在中间
8)图例
(1)方式一 plt.plot()中传入名字
# 方式一 plt.plot()中传入名字
x = np.linspace(0,10,101)
x
plt.plot(x,x,label='normal')
plt.plot(x,2*x,label='fast')
plt.plot(x,x/2,label='slow')
plt.legend() #注意,使用label之后需要调用legend()
(2)方式二 plt.plot()中传入名字
x = np.linspace(0,10,101)
x
plt.plot(x,x)
plt.plot(x,2*x)
plt.plot(x,x/2)
plt.legend(['normal','fast','slow'])
(3) loc参数
功能:设置图例的位置
默认在最优位置
字符串 | 数值 | 字符串 | 数值 |
---|---|---|---|
best 最优的位置 | 0 | center left 中间靠左 | 6 |
upper right 右上角 | 1 | center right 中间靠右 | 7 |
upper left 坐上角 | 2 | lower center 中间靠下 | 8 |
lower left 左下角 | 3 | upper center 中间靠上 | 9 |
lower right | 右下角 | center 正中间 | 10 |
right 中间靠右 | 5 |
data = np.random.randint(0,100,size=(10,3))
df = DataFrame(data,columns=list('ABC'))
df
plt.plot(df['A'])
plt.plot(df['B'])
plt.plot(df['C'])
plt.legend(['1','2','3'],loc=9)
loc参数还可以是2个元素的列表,表示图例左下角的坐标
- [0,0] 左下
- [0,1] 左上
- [1,0] 右下
- [1,1] 右上
data = np.random.randint(0,100,size=(10,3))
df = DataFrame(data,columns=list('ABC'))
df
plt.plot(df['A'])
plt.plot(df['B'])
plt.plot(df['C'])
plt.legend(['1','2','3'],loc=[1,0.5])
(4) ncol参数
功能:设置图例有几列
data = np.random.randint(0,100,size=(10,3))
df = DataFrame(data,columns=list('ABC'))
df
plt.plot(df['A'])
plt.plot(df['B'])
plt.plot(df['C'])
plt.legend(ncol=3)
二、设置plot的风格和样式
1、点和线的样式
(1)颜色
参数colo=”red”或c=”red”
颜色值的方式
1.合法的HTML颜色名
2.别名
3.HTML十六进制字符串
4.归一化到[0, 1]的RGB元组
x = np.linspace(-np.pi,np.pi,100)
x
plt.plot(x,np.sin(x),color='red') #常规设置颜色
plt.plot(x,np.sin(x),c='red') #简写设置颜色
plt.plot(x,np.sin(x),c='#aabbcc') #十六进制设置颜色
plt.plot(x,np.sin(x),c='r') #十六进制设置颜色
plt.plot(x,np.sin(x),c=(1,0.2,0)) #RGB设置颜色
2)透明度plt.plot(x,y,alpha=0.2)
设置线条的颜色
x = np.linspace(-np.pi,np.pi,100)
plt.plot(x,np.sin(x),c=(1,0.2,0.5),alpha=0.5) # 取值范围0-1
3)背景色plt.subplot(facecolor=”颜色”)
注意:
设置背景色,通过plt.subplot()方法传入facecolor参数
先画背景色 再划线 否则背景色就把线给盖住了
"""
facecolor:设置背景颜色
facecolor="green" 可以直接传入颜色
facecolor=(0,1,0) 可以传入RGB三色
"""
x = np.linspace(-np.pi,np.pi,100)
plt.subplot(facecolor=(0,0,1))
plt.plot(x,np.sin(x),c=(1,0,0))
4)线型和线宽
(1)线型 参数linestyle或ls
线条风格 | 描述 | 线条风格 | 描述 |
---|---|---|---|
‘-‘ | 实线 | ‘:’ | 虚线 |
‘–’ | 破折线 | ‘steps’ | 阶梯线 |
‘-.’ | 点划线 | ‘None’ / ‘,’ | 什么都不画 |
(2)宽度 参数linewidth或lw
x = np.arange(0,10,1)
plt.plot(x,x,ls='--',lw=3) #ls设置线型 lw设置线宽
5)破折线(断续线)
设置破折号序列各段的宽度
plt.plot(x,y,dashes=[10,10])
'''
dashes = [5, 5] #长度5,后面空5
dashes = [2, 3, 5,1] #长度2,后面空3, 长度5, 空1
'''
x = np.arange(-np.pi,np.pi,0.1)
y = np.sin(x)
plt.plot(x,y,dashes=[2,3,5,1])
6) 点型
在绘图时,是将连续的点连起来的图形
这是将点显示出来
'''
marker 设置点形
markersize 设置点形大小
'''
下面是一些点的形状
标记 | 描述 | 标记 | 描述 |
---|---|---|---|
‘1’ | 一角朝下的三脚架 | ‘3’ | 一角朝左的三脚架 |
‘2’ | 一角朝上的三脚架 | ‘4’ | 一角朝右的三脚架 |
’s’ | 正方形 | ‘p’ | 五边形 |
‘h’ | 六边形1 | ‘H’ | 六边形2 |
‘8’ | 八边形 | ||
‘.’ | 点 | ‘x’ | X |
‘*’ | 星号 | ‘+’ | 加号 |
‘,’ | 像素 | ||
‘o’ | 圆圈 | ‘D’ | 菱形 |
‘d’ | 小菱形 | ’ ’ , ‘None’ , ’ ‘,None |
无 |
‘_’ | 水平线 | ‘|’ | 竖线 |
‘v’ | 一角朝下的三角形 | ‘<’ | 一角朝左的三角形 |
‘^’ | 一角朝上的三角形 | ‘>’ | 一角朝右的三角形 |
x = np.arange(1,10,1)
y = np.sin(x)
plt.plot(x,y,marker='*',markersize=20)
7)点线设置参数总结
参数 | 描述 | 参数 | 描述 |
---|---|---|---|
color或c | 线的颜色 | linestyle或ls | 线型 |
linewidth或lw | 线宽 | marker | 点型 |
markeredgecolor | 点边缘的颜色 | markeredgewidth | 点边缘的宽度 |
markerfacecolor | 点内部的颜色 | markersize | 点的大小 |
2、同时设置多个曲线样式
1)多曲线同一设置
多个曲线样式相同
x = np.linspace(0,100,30)
# plt.plot(x1,y1,x2,y2,x3,y3...) 颜色 点的形状 线的样式
plt.plot(x,x,x,2*x,x,x/2,c='r',marker='*',ls=':')
2)多个曲线不同设置
多个都进行设置时,多参数连用 plt.plot(x1, y1, fmt1, x2, y2, fmt2, …)
'''
fmt = '[color][marker][line]' 颜色 点的样式 线的样式
fmt format 格式 格式化字符串 就是按照人家指定的格式去设置样式的字符串
'''
x = np.linspace(0,100,30) # 0-100要30个
plt.plot(x,x,'ro:',x,2*x,'k*--',x,x/2,'c1-.') #[color][marker][line]' '颜色 点的样式 线的样式'
3、曲线样式的三种设置方式
(1)对坐标系使用一系列的setter方法
x = np.linspace(0,100,30) # 0-100要30个
x
axes = plt.subplot() #获取坐标系
axes.plot(x,x,x,2*x,x,x/2) #画三条线
axes.set_title('title') #设置标题
axes.set_facecolor('gray') #设置背景色
axes.set_xlabel('x') #设置X轴标签
axes.set_ylabel('y') #设置Y轴标签
(2)对线使用一系列的setter方法
plt.plot()方法返回一个包含所有线的列表
设置每一个线需要获取该线对象
x = np.linspace(0,100,30) # 0-100要30个
x
lines = plt.plot(x,x,x,2*x,x,x/2) #返回一个包含所有线的列表对象
lines[0].set_linewidth(5) #设置第一条线的宽度
lines[1].set_linestyle(':') #设置第二条线的样式
lines[2].set_color('y') #设置第三条先线的颜色
4、X、Y轴坐标刻度
1)plt.xticks()和plt.yticks()方法
需指定刻度值和刻度名称 plt.xticks([刻度起始值],[名称列表])
x = np.linspace(-np.pi,np.pi,100)
plt.plot(x,np.sin(x))
plt.xticks([-np.pi,0,np.pi],['-π',0,'π']) #设置x轴轴线的刻度
plt.yticks([-1,0,1]) #设置Y轴
plt.grid() #画网格线 网格线是按照刻度来画的
使用LaTex语法,用、等表达式在图表上写上希腊字母
x = np.linspace(-np.pi,np.pi,100)
plt.plot(x,np.sin(x))
plt.xticks([-3.14,-3.14/2,0,3.14/2,3.14],["-$\pi$","-$\pi$/2",0,"$\pi$/2","$\pi$"])
plt.xticks([-3.14,-3.14/2,0,3.14/2,3.14],["-$\pi$","-$\pi$/2",0,"$\pi$/2","$\pi$"],fontsize=20,color="red",rotation=20)
2)plt.set__xticks()和plt.yticks()方法
5、网格线密度
网格线是由X轴和Y轴的值决定的。
x = np.arange(-np.pi, np.pi, step=0.1)
plt.plot(x,np.sin(x))
plt.xticks(np.arange(-4,4,0.5)) #密度大
# plt.xticks(np.arange(-4,4,1)) #密度小
plt.grid()
三、2D图形
1、直方图
plt.hist(x,bins=None,normed=False,color=”blue”,orientation=”vertical”,**kwargs)
'''
bins: 整数值,也可以是表示bin的一个序列。默认值为10
density:将表示个数的值变成表示密度的值
color: 直方图的颜色
orientation: 默认为vertical 竖直直方图
'''
data = np.random.randint(0,100,size=100)
data
plt.hist(data, bins=5, density=True, color="red", orientation="horizontal")
# bins=5 将所有的数据分为5份
# density=True 将表示有多少的数据转变为数据的密度
# orientation="horizontal" 水平直方图
2、条形图
条形图适合比较各部分的大小
# height 竖直方向的长度 width 水平方向的长度
1)竖直方向plt.bar()
# x = index
data = np.array([1,4,7,2,5,8,9])
index = [1,2,3,4,5,6,7]
plt.bar(x=index,height=data,width=0.5)
注意竖直方向与水平方向上的height和width是相反的
2)水平方向plt.barh()
# y = index
data = np.array([1,4,7,2,5,8,9])
index = [1,2,3,4,5,6,7]
plt.barh(y=index,height=0.5,width=data)
3)极坐标plt.axes(polar=True)
在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对 (ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系。
data = np.array([1,4,7,2,5,8,9])
index = [1,2,3,4,5,6,7]
plt.axes(polar=True) # 极坐标
plt.bar(x=index,height=data,width=0.5)
3、饼图
饼图适合展示各部分占总体的比例
1)普通各部分占满饼图
x = [89,45,32,16]
plt.pie(x)
2)普通各部分未占满饼图
x = [0.1,0.2,0.25,0.23]
plt.pie(x)
3)饼图各参数
'''
labels:设置每一块的标签; 必须一一对应,不能是中文
labeldistance:设置标签距离圆心的距离(0为 圆饼中心数 1为圆饼边缘)
autopct:设置比例值的显示格式(%1.1f%%)保留一位小数的百分比;
pctdistance:设置比例值文字距离圆心的距离(浮点值)
explode:设置每一块顶点距圆心的长度(比例值,列表);
colors:设置每一块的颜色(列表);最好一一对应
shadow:设置是否绘制阴影,默认为False
startangle:设置饼图起始角度 正右方为0度
'''
x = [89,45,32,16]
plt.pie(x,
labels=['A','B','C','D'],
labeldistance=1.2,
autopct="%1.1f%%", #1.1f% 保留一位小数的百分比
pctdistance=0.5, # 比例值文字距离圆心的距离
explode=[0,0.2,0,0], # 每一块顶点距圆形的长度
colors=["red","blue","yellow","green"], #最好一一对应
shadow=True, # 是否有阴影
startangle=60 #第一块开始的角度
4、散点图plt.scatter()
plt.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, hold=None, data=None, **kwargs)
'''
s=None :大小 可以传入多个值 间隔输出
c=None :点的颜色 可以传入多个值(可以传入多个列表【多维数组】,也可以传入多个元祖) 间隔输出
marker :点的形状
cmap :颜色映射
alpha :透明度
'''
x = np.random.normal(loc=0,scale=1,size=1000)
y = np.random.normal(loc=0,scale=1,size=1000)
plt.scatter(x, y)
plt.scatter(x, y,s = [30, 100],c=[(1,0,0),(0,1,0),(0,0,1)],marker="o",alpha=0.8)
随机散点图
x = np.random.normal(loc=0,scale=1,size=1000)
y = np.random.normal(loc=0,scale=1,size=1000)
size = np.random.randint(10,100,size=1000) #随机产生1000个整数
color = np.random.random(size=(1000,3)) #随机给1000个整数产生 RGB
plt.scatter(x, y, s=size, c=color ,marker="o", alpha=0.8)
=============以上为重点=================
四、图形内的文字、注释、箭头
1)图形内的文字
pyplot函数 | API方法 | 描述 |
---|---|---|
text() | mpl.axes.Axes.text() | 在Axes对象的任意位置添加文字 |
xlabel() | mpl.axes.Axes.set_xlabel() | 为X轴添加标签 |
ylabel() | mpl.axes.Axes.set_ylabel() | 为Y轴添加标签 |
title() | mpl.axes.Axes.set_title() | 为Axes对象添加标题 |
legend() | mpl.axes.Axes.legend() | 为Axes对象添加图例 |
figtext() | mpl.figure.Figure.text() | 在Figure对象的任意位置添加文字 |
suptitle() | mpl.figure.Figure.suptitle() | 为Figure对象添加中心化的标题 |
annnotate() | mpl.axes.Axes.annotate() | 为Axes对象添加注释(箭头可选) |
(1)图形内的文字
plt.suptitle("图形") #整个图形的标题
plt.suptitle("suptitle") #整个图形的标题
plt.figtext(0.5,0.5,"figtext") #必须传入x y来设置文本位置 在整个图中,按照位置设置文字
(2)坐标内的文字
axes = plt.subplot()
plt.suptitle("suptitle") #整个图形的标题
plt.figtext(0.5,0.5,"figtext") #必须传入x y来设置文本位置 在整个图中,按照位置设置文字
axes.text(0.2,0.2,'axes text') #必须传入x y来设置文本位置 坐标轴内设置文本
axes.set_title('axes title') # 给坐标轴设置title
2)注释plt.annotate( )
'''
s:要注释的内容
xy:设置箭头指示的位置
xytext:设置注释文字的(左下角)位置
arrowprops:以字典的形式设置箭头的样式
width:设置箭头长方形部分的宽度
headlength:设置箭头尖端的长度,
headwidth:设置箭头尖端底部的宽度
shrink:设置箭头顶点、尾部与指示点、注释文字的距离(比例值),可以理解为控制箭头的长度
'''
data = np.random.randint(0,10,size=10)
index = np.arange(0,10,1)
plt.plot(index, data)
plt.annotate(s="this is a annotate", xy=[5,4], xytext=[3,8],arrowprops={"width":2,'shrink':0.6})
3)箭头
4)综合运用
库里面还定义了一些arrowstyle可以选择的风格样式
'->'
head_length=0.4,head_width=0.2 '-['
widthB=1.0,lengthB=0.2,angleB=None '|-|'
widthA=1.0,widthB=1.0 '-|>'
head_length=0.4,head_width=0.2 '<-'
head_length=0.4,head_width=0.2 '<->'
head_length=0.4,head_width=0.2 '<|-'
head_length=0.4,head_width=0.2 '<|-|>'
head_length=0.4,head_width=0.2 'fancy'
head_length=0.4,head_width=0.4,tail_width=0.4 'simple'
head_length=0.5,head_width=0.5,tail_width=0.2 'wedge'
tail_width=0.3,shrink_factor=0.5
这里不同 arrowprops={"arrowstyle":'->'}
plt.plot(index, data)
plt.annotate(s="this is a annotate", xy=[5,4], xytext=[3,8],arrowprops={"arrowstyle":'->'})
五、3D图
1) 导包
from mpl_toolkits.mplot3d.axes3d import Axes3D
2) 使用mershgrid函数切割x,y轴
功能: 将二维坐标转换为三维坐标, 将坐标网格化
(1) 创建坐标轴所需数据
x = np.linspace(0,10,101)
y = np.linspace(0,10,101)
x,y
(array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ,
1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. , 2.1,
2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3. , 3.1, 3.2,
3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4. , 4.1, 4.2, 4.3,
4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5. , 5.1, 5.2, 5.3, 5.4,
5.5, 5.6, 5.7, 5.8, 5.9, 6. , 6.1, 6.2, 6.3, 6.4, 6.5,
6.6, 6.7, 6.8, 6.9, 7. , 7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
7.7, 7.8, 7.9, 8. , 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7,
8.8, 8.9, 9. , 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8,
9.9, 10. ]),
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ,
1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. , 2.1,
2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3. , 3.1, 3.2,
3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4. , 4.1, 4.2, 4.3,
4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5. , 5.1, 5.2, 5.3, 5.4,
5.5, 5.6, 5.7, 5.8, 5.9, 6. , 6.1, 6.2, 6.3, 6.4, 6.5,
6.6, 6.7, 6.8, 6.9, 7. , 7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
7.7, 7.8, 7.9, 8. , 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7,
8.8, 8.9, 9. , 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8,
9.9, 10. ]))
(2) mershgrid函数切割x,y轴
功能:切割后能被3D坐标系使用, 将x, y 轴转换为X, Y轴为3D坐标系使用
X,Y = np.meshgrid(x,y)
X,Y
(array([[ 0. , 0.1, 0.2, ..., 9.8, 9.9, 10. ],
[ 0. , 0.1, 0.2, ..., 9.8, 9.9, 10. ],
[ 0. , 0.1, 0.2, ..., 9.8, 9.9, 10. ],
...,
[ 0. , 0.1, 0.2, ..., 9.8, 9.9, 10. ],
[ 0. , 0.1, 0.2, ..., 9.8, 9.9, 10. ],
[ 0. , 0.1, 0.2, ..., 9.8, 9.9, 10. ]]),
array([[ 0. , 0. , 0. , ..., 0. , 0. , 0. ],
[ 0.1, 0.1, 0.1, ..., 0.1, 0.1, 0.1],
[ 0.2, 0.2, 0.2, ..., 0.2, 0.2, 0.2],
...,
[ 9.8, 9.8, 9.8, ..., 9.8, 9.8, 9.8],
[ 9.9, 9.9, 9.9, ..., 9.9, 9.9, 9.9],
[10. , 10. , 10. , ..., 10. , 10. , 10. ]]))
3)创建3d坐标系
功能: 建立一个三维坐标系, 返回一个三维坐标
axes = plt.subplot(projection=’3d’)
4)绘制3d图形
数据: 使用上边的X, Y
'''
参数:
cmap='rainbow' 将图形显示为彩色
'''
Z = np.sin(X)-np.cos(Y)
从X矩阵中对应位置 取值 求sin 然后减去 从Y矩阵中对应位置 取值 求cos
得到的值 是 Z矩阵中对应位置的值
axes = plt.subplot(projection='3d')
axes.plot_surface(X,Y,Z)
5)添加colorbar
功能: 为图形添加状态条
plt.colorbar(p,shrink=0.5)
'''
参数
p 3D图形对象
shrink 改变进度条的长度
注意: 3D图形的颜色需要时可表示的颜色才可以使用colorbar(颜色全是蓝色的就不能设置)
'''
axes = plt.subplot(projection='3d')
p = axes.plot_surface(X,Y,Z,cmap='rainbow')
plt.colorbar(p,shrink=0.8)
6)综合绘制3D图
plt.figure(figsize=(10,6)) #改变画布大小
axes = plt.subplot(projection='3d') ##
p = axes.plot_surface(X,Y,Z,cmap='rainbow')
plt.colorbar(p,shrink=0.5)
六、极坐标(玫瑰)图
创建极坐标,设置 polar 属性 plt.axes(polar = True)
1)普通数字绘制极坐标
data = np.array([2,4,6,8,10,12])
index = np.array([1,2,3,4,5,6])
plt.axes(polar=True)
plt.bar(x=index, height=data)
2)π 绘制极坐标
index = np.arange(0,2*np.pi,2*np.pi/8) #将0-2π 分为8分
plt.axes(polar=True)
plt.bar(x=index,height=[1,2,3,4,5,6,7,8])
3)角度和弧度的转换
如果数据用的是角度(0-360的)
极坐标用的是弧度(0度-360度)
弧度/(2*np.pi)=角度/360
弧度=角度*np.pi/180
plt.axes(polar=True)
plt.bar(x=角度数据*np.pi/180,height= 实际数据)