Day05 - python中2D绘图库matplotlib基本使用

Day05 - python中2D绘图库matplotlib基本使用

参考代码链接:https://pan.baidu.com/s/1SRbjdQyAvR54hnV4l1z2og 提取码:9aos

1,matplotlib基本介绍

作为一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。 Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。这节课的内容主要讲解Matplotlib绘图的基本用法,可视化数据,让一切变得更简单。

matplotlib可以画图线图,散点图,等高线图,条形图,柱形图,3D图形,图形动画等

python3使用pip3 install matplotlib在命令行直接安装

2,基础用法

*matplotlib的figure就是一个单独的figure小窗口

使用plt.figure定义一个图像窗口:

plt.figure(num=1,figsize=(8,5))#定义编号为1,大小为(8,5)

*设置坐标轴

(1)设置坐标轴的范围:

plt.xlim()

plt.ylim()

(2)设置坐标轴的显示

plt.xlabel()

plt.ylabel()

(3)替换坐标轴刻度

plt.xticks()

plt.yticks()

(4)设置坐标轴边框属性

(5)调整移动坐标轴

plt.xlim(-1,2)#x轴的范围
plt.ylim(-2,3)#y轴的范围
plt.xlabel("x轴")
plt.ytable("y轴")
ax.spines['right'].set_color('none')#边框属性设置为none不显示
new_ticks = np.linspace(-1,2,5)#-1到2分成5段,包含端点
plt.xticks(new_ticks)#进行 替换新下标
plt.yticks([-2,-1,0,1,2]),[r'$really\bad$','$bad$','$0$','$well$','$really\well$']

*annotation标注

s为注释文本

xy为被标注的坐标点

xytext为注释文字的坐标位置

plt.annotation(r'$2x0+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))							#xycoords='data'基于数据的值来选位置,xytext=(+30,-30),对于标注位置的描述,textcoords='offset points',xy偏差值,arrowprops对图中箭头类型设置


plt.annotate(s,xy,xycoords,xytext,textcoords,fontsize,arrowprops)
#在annotation标注函数中,可以设置注释文本的内容,被注释的坐标点位置,注释文字的坐标位置,标注箭头的类型

*tick能见度

当图片的内容较多时,对于重合部分通过设置相关内容的透明度使图片更易于观察,也即通过本节bbox参数调节图像信息

set_bbox(dict(facecolor=‘white’,edgecolor=‘none’,alpha=0.7,zorder=2))

facecolor设置box的前景色

edgecolor设置边框

alpha设置透明度

zorder设置图层顺序,在z轴方向排序

*3D数据

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D	#导入模块Axes3D

fig = plt.figure()	#定义图像窗口

ax = Axes3D(fig)	#在窗口上添加3D坐标轴,将X和Y绘制成栅格

X = np.arange(-4,4,0.25)

Y = np.arange(-4,4,0.25)

X,Y = np.meshgrid(X,Y)

R = np.sqrt(X**2+Y**2)

Z = np.sin(R)#高度值
#将colormap ranbow填充颜色,之后将三维图像投影到XY平面做等高线图,其中rstride和cstride表示row和column的宽度
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))
#rstride表示图像中分割线的跨图
#添加XY平面等高线投影到Z平面
ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap=plt.get_cmap('rainbow'))
#把图像进行投影的图形offset表示比0坐标轴低两个位置
ax.set_zlim(-2,2)
plt.show()

*次坐标轴

同一个图中有两个坐标轴:

获取figure默认坐标系:fig,ax1 = plt.subplots()

获取zx1调用twinx,生成ax2:ax2 = ax1.twinx()

分别在ax1和ax2中画图

x = np.arange(0,10,0.1)
y1 = 0.5*x**2
y2 = -1*y1
fig,ax = plt.subplots()
ax2 = ax1.twinx()	#镜像显示
ax1.plot(x,y1,'g-')
ax2.plot(x,y2,'b-')
ax1.set_xlabel('x data')
ax1.set_ylabel('Y1 data',color='g')
ax2.set_ylabel('Y2 data',color='b')
plt.show()

*动画

fig:进行动画绘制的figure

func:自定义动画函数,即传入刚定义的函数animate

frames:动画长度,一次循环包含的帧数

init_func:自定义开始帧,即传入刚定义的函数init

interval:更新频率,以毫秒ms计

blit:选择更新所有点,还是仅更新产生变化的点。应选择True,但是Mac用户请选择False,否则无法显示动画

#调用funcAnimation函数生成动画
ani = FuncAnimation(fig=fig,func=animate,frames=200,init_func=init,interval=10,blit=False)
#构造自定义动画函数animate,用来更新每一帧上x和y坐标值,参数表示第i帧
def animate(i):
	line.set_ydata(np.sin(x+i/100))
	return line
#构造开始帧函数init
def init():
	line.set_ydata(np.sin(x))
	return line

猜你喜欢

转载自blog.csdn.net/qq_44621510/article/details/89950647
今日推荐