matplotlib(2)

    技术2022-07-11  93

    图像上的注释

    加注释

    import matplotlib.pyplot as plt import numpy as np x = np.arange(-10,11,1) y = x*x plt.plot(x,y) plt.annotate('this the bottom',xy=(0,1),xytext=(0,20), arrowprops=dict(facecolor = 'r',frac=0.3,headwidth=30,width=10))#第一个参数为注释的内容,第二个为注释的起始点,第三个为第一个注释内容的坐标 #frac为箭头箭头尾的比例,headwidth为箭头的宽度,width为箭头尾部的宽度 plt.show()

    文字添加

    #加文字 import matplotlib.pyplot as plt import numpy as np x = np.arange(-10,11,1) y = x*x plt.plot(x,y) plt.text(-2,40,'dunction:y=x*x',family='serif',size=20,style='italic',weight=1000,bbox=dict(facecolor='r',alpha=0.2)) #第一个参数为文字所加的位置,第二个为字体的类型,size为字体大小,style为斜体或正体,weight为字体粗细,bbox为加边框,alpha为透明度 plt.text(-2,20,'dunction:y=x*x') plt.show()

    公式的添加 matplotlib自带mathtext引擎,不需要安装TeX系统 $作为开始和结束的符号, 在matplotlib官网进行查询具体公式写法

    #在图形中加入公式 import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.set_xlim([1,7]) ax.set_ylim([1,5]) ax.text(2,4,r"$ \alpha_i \beta_j \pi \lambda \omega $",size=25) ax.text(4,4,r"$ \sin(0)=\cos(\frac{\pi}{2}) $",size=25) ax.text(2,2,r"$ \lim_{x \rightarrow y} \frac{1}{x^3} $",size=25) ax.text(4,2,r"$ \sqrt[4]{x}=\sqrt{y} $",size=25) plt.show()

    给图片填充区域 对曲线下图或者曲线之间的区域进行填充 fill fill_between

    import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,5*np.pi,100) y1 = np.sin(x) y2 = np.sin(2*x) plt.plot(x,y1) plt.plot(x,y2) plt.fill(x,y1,'b',alpha= 0.2) plt.fill(x,y2,'r',alpha= 0.2) plt.show()

    #面向对象方法

    #面向对象的方式 import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,5*np.pi,100) y1 = np.sin(x) y2 = np.sin(2*x) fig = plt.figure() ax = plt.gca() ax.plot(x,y1,x,y2,color = 'black') ax.fill_between(x,y1,y2,where = y1>y2,facecolor='blue',alpha = 0.2) ax.fill_between(x,y1,y2,where = y2>y1,facecolor='r',alpha=0.2) plt.show()

    在指定图片加入特定形状

    import matplotlib.patches as mpatches fig,ax = plt.subplots() xy1 = np.array([0.2,0.2]) xy2 = np.array([0.2,0.8]) xy3 = np.array([0.8,0.2]) xy4 = np.array([0.8,0.8]) circle = mpatches.Circle(xy1,0.05)#圆形半径0.05 ax.add_patch(circle) rect = mpatches.Rectangle(xy2,0.2,0.1,color='r')#矩形参数为长宽 ax.add_patch(rect) polygon = mpatches.RegularPolygon(xy3,5,0.1,color='g')#五边形,半径为0.1 ax.add_patch(polygon) elipse = mpatches.Ellipse(xy4,0.4,0.2,color='y') ax.add_patch(elipse) plt.axis('equal') plt.show()

    美化图形 使用自带样式进行美化

    import numpy as np import matplotlib.pyplot as plt plt.style.use('ggplot')#自带美化样式 fig,axes = plt.subplots(nrows=2,ncols=2)#生成四个子图 ax1,ax2,ax3,ax4 = axes.ravel()#四个子图坐标轴赋给四个对象 x,y = np.random.normal(size = (2,100))#散点图 ax1.plot(x,y,'o') x = np.arange(0,10) y = np.arange(0,10) ncolors = len(plt.rcParams['axes.prop_cycle'])#默认的颜色循环 shift = np.linspace(0,10,ncolors) for s in shift: ax2.plot(x,y+s,'-')#7个颜色,画出7条线 x = np.arange(5) y1,y2,y3 = np.random.randint(1,25,size=(3,5)) width = 0.25 ax3.bar(x,y1,width) ax3.bar(x+width,y2,width,color = plt.rcParams['axes.prop_cycle'].by_key()['color'][2])#柱状图 ax3.bar(x+2*width,y2,width,color = plt.rcParams['axes.prop_cycle'].by_key()['color'][3]) for i ,color in enumerate(plt.rcParams['axes.prop_cycle'].by_key()['color']): xy = np.random.normal(size = 2) ax4.add_patch(plt.Circle(xy,radius=0.3,color = color)) ax4.axis('equal') plt.show()

    极坐标 绘制以极坐标为坐标轴的图形(角度和半径)

    import numpy as np import matplotlib.pyplot as plt r = np.arange(1,6,1)#生成半径 theta = [0,np.pi/2,np.pi,3*np.pi/2,2*np.pi]#生成半径 #画图 ax = plt.subplot(111,projection = 'polar') ax.plot(theta,r,linewidth=3) ax.grid(True) plt.show()

    函数积分图

    import numpy as np import matplotlib.pyplot as plt def func(x): return -(x-2)*(x-8)+40 x = np.linspace(0,10) y = func(x) fig,ax = plt.subplots() plt.plot(x,y,'r',linewidth = 2) a = 2 b = 9 ax.set_xticks([a,b])#X的坐标值只保留a和b(2,9) ax.set_yticks([])#Y的坐标值全部删除 ax.set_xticklabels(['$a$','$b$'])#将2,9值变为数学公式的a,b plt.figtext(0.9,0.05,'$x$') plt.figtext(0.01,0.9,'$y$') plt.show()

    画出积分图的阴影:

    import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Polygon#多边形 def func(x): return -(x-2)*(x-8)+40 x = np.linspace(0,10) y = func(x) fig,ax = plt.subplots() plt.plot(x,y,'r',linewidth = 2) a = 2 b = 9 ax.set_xticks([a,b])#X的坐标值只保留a和b(2,9) ax.set_yticks([])#Y的坐标值全部删除 ax.set_xticklabels(['$a$','$b$'])#将2,9值变为数学公式的a,b ix = np.linspace(a,b)#X轴a-b的直线 iy = func(ix) #将X,和Y的坐标拼接起来称为坐标点对 ixy = zip(ix,iy) verts = [(a,0)]+list(ixy)+[(b,0)]#数组几个点的坐标 poly = Polygon(verts,facecolor='0.8',edgecolor='0.1')#生成一个多边形对象 ax.add_patch(poly)#添加poly对象 plt.figtext(0.9,0.05,'$x$') plt.figtext(0.01,0.9,'$y$') #添加数学公式 x_math = (a+b)*0.50 y_math = 35 plt.text(x_math,y_math,r'$\int_a^b (-(x-2)*(x-8)+40)dx$',fontsize = 10,horizontalalignment = 'center')#horizontalalignment自动居中 plt.show()

    散点-条形图 组合图形基本结构

    import numpy as np import matplotlib.pyplot as plt plt.style.use('ggplot') x = np.random.randn(200) y = x+np.random.randn(200)*0.5#Y在X基础上进行随机振动 margin_border = 0.1 width = 0.6 margin_between = 0.02 height = 0.2 #查询生成自定义的子图的办法matplotlib官网 #第一个主图 left_s = margin_border bottom_s = margin_border height_s = width width_s = width left_x = margin_border bottom_x = margin_border+margin_between height_x = height width_x = width left_y = bottom_x bottom_y = margin_border height_y = width width_y = height plt.figure(1,figsize=(8,8)) rect_s = [left_s,bottom_s,width_s,height_s] rect_x = [left_x,bottom_x,width_x,height_x] rect_y = [left_y,bottom_y,width_y,height_y] axScatter = plt.axes(rect_s) axHisX = plt.axes(rect_x) axHisY = plt.axes(rect_y) plt.show()
    Processed: 0.012, SQL: 9