python中的matplotlib库


一、基本用法

1. 基础例子

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1,1,50)  #-1到1均分的50个点
y = x**2
plt.plot(x,y) #绘制线
plt.show()

在这里插入图片描述

2. 一次生成两个figure,两个函数

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1,1,50)
y1 = x**2
y2 = x**3
plt.figure()  #生成第一个figure
plt.plot(x,y1) #绘制抛物线

plt.figure() #生成第二个figure
plt.plot(x,y2) #绘制三次方程线
plt.show()

figure1
在这里插入图片描述

figure2
在这里插入图片描述

3. 设置figure和函数的参数

一个图中两个函数

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1,1,50)
y1 = x**2
y2 = x
#num为figure的序号,figsize为figure的长和宽(元组类型)
plt.figure(num=3,figsize=(5,5))
plt.plot(x,y1)
#线的颜色,线的宽度,线型
plt.plot(x,y2,color='red',linewidth=1.0,linestyle='--')
plt.show()

在这里插入图片描述

二、设置坐标轴

  1. 利用plt的函数设置x和y轴
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 50) #在x轴上,图像只显示在x为[-1,1]的范围中
y1 = 2*x+1
y2 = x**2
plt.figure()
plt.plot(x, y1,'r--')
plt.plot(x, y2,'b-')
#1.设置x轴的范围
plt.xlim((-1, 2))
    #在x轴范围的基础上,进一步划分x轴上显示几个点
new_x_lim = np.linspace(-1, 2, 5)
plt.xticks(new_x_lim)
#2.设置y轴的范围
plt.ylim((-2, 3))
    #在y轴的范围的基础上,给每个对应的点,设置参数。
    #(\为转义字符,前后加$是为了使得字体美观。)
plt.yticks([-2, 0, 1.5, 3], [r'$very\ bad$', r'$bad$', r'$medium$', r'$good$'])

plt.xlabel('xxxx') #3.设置x轴的名字
plt.ylabel('yyyy') #4.设置y轴的名字
plt.show()

在这里插入图片描述

  1. 利用plt.gca()类中的函数来设置figure(中的坐标轴参数)
import numpy as np
import matplotlib.pyplot as plt
ax = plt.gca() #准备对坐标轴进行修改
#1.显示框figure 有4条线(left,top,right,bottom)
ax.spines['right'].set_color('none') #使得right的线颜色消失。
ax.spines['top'].set_color('none')   #使得top线颜色消失。
#2.tick刻度
ax.xaxis.set_ticks_position('bottom')  #将x轴设定为bottom那条线
ax.yaxis.set_ticks_position('left')    #将y轴2设定为left那条线
#3.对齐
ax.spines['bottom'].set_position(('data',-1)) #将bottom那条线与另外一条线的-1对齐(将x轴与y的-1对齐)
ax.spines['left'].set_position(('data',-1))   #将left那条线与另外一条线的-1对齐(将y轴与x的-1对齐)
plt.show()

在这里插入图片描述

三、legend图例

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1,1)
y1 = x
y2 = x**2
l1, = plt.plot(x,y1,'r-')  #直线
l2, = plt.plot(x,y2,'b--')  #抛物线
plt.legend(handles=[l2,l1],labels=['aaa','bbb'],loc='best')

handles表示 需要传入所画线条的实例对象(列表形式),它和labels一一对应:
labels设置两个函数图像的名字
loc=‘best’ 表示图例会自动放在最合适的位置上

上例表示 l2直线 对应名字 ‘aaa’ , l1抛物线 对应名字 ’bbb’
在这里插入图片描述

四、Annotation标注

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3,3,50) #50个点
y = 2*x+1
plt.figure()  #spines
plt.plot(x,y)  #line
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
#1.设置标注点
x0 = 1
y0 = 2*x0+1

plt.scatter(x0,y0,s=50,color='blue') #x0,y0,标点的大小,标点的颜色  (绘制一个散点)
#2.画虚线((x0,y0)和(x0,0)两点连成的虚线)
plt.plot([x0,x0],[0,y0],'b--',linewidth=2.5) #直接以列表的形式传入x的范围和y的范围 (绘制线)
#3.标注右
plt.annotate('2x+1=%s'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
#4.标注左
plt.text(-3.7,3,r'$this\ is\ text!\ \sigma_i,\alpha_j$',fontdict={'size':16,'color':'red'})

plt.show()
  1. 标注右

第一个参数为标注内容
xy为被注释的坐标点,xycoords=‘data’是为默认情况,即指向注释点

xytext为注释文字的坐标位置(“xytext=(+30,-30),textcoords=‘offset points’,” 可换成“xytext=(2,2), ”)
offset points 表示:从xy值偏移,以点(np.linespace()设置的点)为单位

fontsize为注释大小
arrowprops为箭头参数,参数类型为字典dict
(arrowstyle为箭头类型,connectionstyle为箭头弯曲角度)

  1. 标注左

第一个和第二个参数为注释文本的 起始坐标位置x和y
第三个参数为文本内容
fontdict参数类型为字典类型,size为文本大小,color为文本颜色
在这里插入图片描述
注:aa = {'a':1,'b':2} 和 bb = dict(a = 2,b = 3) 输出结果相同

五、tick能见度

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3,3,50)
y = 0.1*x
plt.figure()  #spines
plt.plot(x,y,linewidth=10,zorder=1)  #line
plt.ylim(-2,2)
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
#1.设置坐标轴上的点的大小
for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(12)
#2.设置坐标轴上的点的背景参数
    label.set_bbox(dict(facecolor='w',edgecolor='None',alpha=0.9))
plt.show()

facecolor为坐标轴上的点的背景颜色
edgecolor为边框颜色,alpha为背景框的不透明度
在这里插入图片描述

六、scatter散点图

import numpy as np
import matplotlib.pyplot as plt
#1.设置基本参数
n = 1024
x = np.random.normal(0,1,n) #平均值为1,方差为0,有n个x点
y = np.random.normal(0,1,n) #平均值为1,方差为0,有n个x点
t = np.arctan2(y,x) #颜色参数(好看)
#2.散点参数
# s表示散点的大小,c表示散点颜色,alpha为散点的不透明度
plt.scatter(x,y,s=20,c=t,alpha=0.5)
plt.xticks(()) #x刻度设为没有
plt.yticks(()) #y刻度设为没有
plt.show()

在这里插入图片描述

  1. 常用用法
import numpy as np
import matplotlib.pyplot as plt
#参数应该为两个序列或列表
#x为0,1,2,3,4  y为0,1,2,3,4的散点
plt.scatter(np.arange(5),np.arange(5))
plt.show()

在这里插入图片描述

七、Bar柱状图

import numpy as np
import matplotlib.pyplot as plt
#1.设置基本参数
n = 12
x = np.arange(n)
y = (1-x/float(n))*np.random.uniform(0.5,1.0,n)#均匀分布随机数
#2.bar柱状图描绘
# +y1表示向上的柱状图,facecolor为柱体颜色,edgecolor为柱框颜色
plt.bar(x,+y,facecolor='green',edgecolor='purple')
#3.设置柱状图参数
#前两个参数为标注点的坐标位置(表示相对于默认位置偏移0.01)
#第三个参数为标注内容是y的值且保留两位小数
#ha为左右方向center对齐,va为垂直方向bottom对齐
for i,j in zip(x,y):
    plt.text(i+0.01,j+0.01,'%.2f'%j,ha='center',va='bottom')
plt.xlim(-1,n)
plt.ylim(0,1)
plt.show()

在这里插入图片描述

八、Contours等高线图

import numpy as np
import matplotlib.pyplot as plt
#1.设置基本参数
def f(x,y):#计算高度的公式
    return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2)
n=256
x=np.linspace(-3,3,n)
y=np.linspace(-3,3,n)
#2.x,y组合
X,Y = np.meshgrid(x,y)
#3.Contours图填充颜色
#前三个参数x,y和高度,8表示分为8+2部分不同颜色,alpha为不透明度
#cmap对应的颜色为f(x,y)的值所对应的颜色,hot为偏热的颜色。
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)
#4.Contours图设置线条
# 8表示分为8+2条线,colors为线条的颜色
C = plt.contour(X,Y,f(X,Y),8,colors='black')
#5.设置线上f(x,y)的参数
plt.clabel(C,inline='True',fontsize=10)
plt.show()

X,Y = np.meshgrid(x,y):
将x中每一个数据和y中每一个数据组合生成很多坐标点,然后将这些坐标点的x坐标放到大X中,y坐标放在大Y中,相应位置是对应的。
在这里插入图片描述

九、image图片

import numpy as np
import matplotlib.pyplot as plt
a = np.random.randn(2,3) #图像分为6块
#1.interpolation为图像格式种类,可网上搜索,origin表示是正还是反plot (lower)
# cmap对应的颜色为矩阵a数字所代表的颜色,bone表示一种颜色类型
plt.imshow(a,interpolation='nearest',cmap=plt.cm.bone,origin='upper')
#2.右面的柱状的颜色,shrink表示相对于figure显示70%的大小
plt.colorbar(shrink=0.7)
plt.show()

在这里插入图片描述

十、3D数据

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x = np.arange(-4,4,0.25) #-4到4步长为0.25的序列
y = np.arange(-4,4,0.25)
X,Y = np.meshgrid(x,y)#x和y组合
#1.设置z轴的值
Z = np.sin(np.sqrt(X**2,Y**2))
#2.把显示框放入 Axes3D()函数中
ax = Axes3D(plt.figure())
#3.画3D图.
#前三个参数为xyz,rstride和cstride表示跨度(经过多少切换成下一个颜色,越小精细度越好)
#cmap为z的值对应的颜色盘上的颜色,rainbow为一种颜色类型
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='rainbow')
#4.设置对应平面的颜色
#zdir='x',表示将3D图压到x=offset的平面上
ax.contourf(X,Y,Z,zdir='x',offset=-4,cmap='rainbow')
plt.show()

在这里插入图片描述

十一、subplot

import matplotlib.pyplot as plt
plt.figure()
plt.subplot(2,2,1)  #figure当作两行两列,设置第1个
plt.plot([0,1],[0,1]) #x范围和y的范围
plt.subplot(2,2,2)  #figure当作两行两列,设置第2个
plt.plot([0,2],[0,2]) #x范围和y的范围
plt.subplot(2,2,3)  #figure当作两行两列,设置第3个
plt.plot([0,3],[0,3]) #x范围和y的范围
plt.subplot(2,2,4)  #figure当作两行两列,设置第4个
plt.plot([0,4],[0,4]) #x范围和y的范围
plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
plt.figure()
plt.subplot(2,1,1)
plt.plot([0,1],[0,1])
plt.subplot(2,3,4)
plt.plot([0,2],[0,2])
plt.subplot(2,3,5)
plt.plot([0,3],[0,3])
plt.subplot(2,3,6)
plt.plot([0,4],[0,4])
plt.show()

在这里插入图片描述

十二、图中图

import matplotlib.pyplot as plt
#1.设置基本参数
x=[1,2,3,4,5,6,7]
y=[1,2,5,3,9,8,4]
x_percent,y_percent,width,height = 0.1,0.1,0.8,0.8
#2.设置图一在显示框中x和y的占比(从最左开始计算)、宽度和高度
plt.axes([x_percent,y_percent,width,height])#默认下面语句设置图一
plt.plot(x,y,'r-')
plt.xlabel('x')
plt.ylabel('y')
plt.title('line 1')
#3.设置图二在显示框中x和y的占比(从最左开始计算)、宽度和高度
plt.axes([0.2,0.6,0.25,0.25])#默认下面语句设置图二
plt.plot(x,y,'b-')
plt.xlabel('xx')
plt.ylabel('yy')
plt.title('line 2')
plt.show()

在这里插入图片描述

十三、共享轴

import numpy as np
import matplotlib.pyplot as plt
#1.设置基本参数
x = np.arange(0,10,0.1) #范围[0,10),步长为0.1
y1 = 0.05*x**2
y2 = -1*y1
#2.共享x轴
fig,ax1 = plt.subplots()
ax2 = ax1.twinx()
#3.加以区分
#ax1表示y1,ax2表示y2
ax1.plot(x,y1,'g-') #绿色实线
ax1.plot(x,y2,'b--') #绿色虚线
ax1.set_xlabel('x data')
ax1.set_ylabel('y1',color='g')
ax2.set_ylabel('y2',color='b')
plt.show()

在这里插入图片描述

十四、Animation动画

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
fig,ax = plt.subplots()

x = np.arange(0,2*np.pi,0.01)
y = np.sin(x)
line, = ax.plot(x,y)#line为一个列表,加逗号表示列表首个元素

def animate(i):
    line.set_ydata(np.sin(x+i/10))
    return line,
def init():
    line.set_ydata(np.sin(x))
#frames表示帧数,interval表示频率
ani = animation.FuncAnimation(fig=fig,func=animate,frames=100,init_func=init,interval=20,blit=False)
plt.show()

结果为动图:
在这里插入图片描述

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值