Python--matplotlib.pyplot绘图系列

一、注释:

只做代码的搬运工。注释很纤细,适合收藏自学。想了解更多可在B站搜《莫烦Python》

二、目录:

 1. 绘制出直线和二次曲线
 2. 优化坐标轴
 3. 设置x,y常态坐标
 4. 为曲线和直线添加图标说明
 5. 给图像中特殊点进行注释
 6. 坐标被线条遮住时,设置透明度使其显现。
 7. 散点图
 8. 条形直方图
 9. 山地高低势能图
 10. 色块与渐变条形图注释
 11. 3D图像与平面映射
 12. 画板分块显示(方法一)
 13. 画板分块显示(方法一)多举例
 14. 画板分块显示(方法二、更普遍)
 15. 大图嵌套小图
 16. 俩条线公用x轴,显示在一张fig上
 17. 导入animation(活跃)绘制动图***

三、正文:
1.

###绘制出直线和二次曲线
import matplotlib.pyplot as plt
import numpy as np
#在指定的间隔内[start,stop]返回num个均匀间隔的数字。
x=np.linspace(-3,3,50)
y1=2*x+1
y2=x**2
'''
plt.figure(
    num=None,      //图像编号或名称,数字为编号 ,字符串为名称  
                   //第一个默认为1,然后依次1,2,3;在IDLE运行上可以看出,这里无法显示。
    figsize=None,  //设置整个画板大小
    dpi=None,      //指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80;1英寸等于2.5cm 
    facecolor=None,//背景颜色
    edgecolor=None,//边框颜色
    frameon=True,  //是否显示边框
    FigureClass=<class 'matplotlib.figure.Figure'>,
    clear=False,
    **kwargs,
)
'''
plt.figure(facecolor='y',dpi=100,num='csd')
plt.plot(x,y1)
#一个figure只能画一张
plt.figure(figsize=(8,5),facecolor='y')
plt.plot(x,y2)
plt.plot(x,y1,color='red',linestyle='--',linewidth=1.0)
plt.show()

在这里插入图片描述
在这里插入图片描述

2.

#####改变画板视图的显示位置(相当于放大突出显示)
#####优化坐标轴,然他用途更广
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-3,3,50)
y1=2*x+1
y2=x**2

plt.figure(facecolor='y')
plt.plot(x,y2)
plt.plot(x,y1,color='red',linestyle='--',linewidth=1.0)

#显示图大小(坐标)的取值范围,
plt.xlim((-1,2))
plt.ylim((-2,3))

#加入x,y标签或说明
plt.xlabel('I am x')
plt.ylabel('I am y')

#在plt.xlim((-1,2))指定的x轴显示范围内均分5个坐标点
new_ticks=np.linspace(-1,2,5)
print(new_ticks)
plt.xticks(new_ticks)

#plt.yticks([-2,-1,1,2,3],['really bad','bad','normal','good','really good'])
#正则表达式显示好看字体,打印空格时用到 '/'转译符,</+空格>
'''
#plt.yticks([],[],)  
前俩个参数为数组,
第二个代表标签(可以非数字)会覆盖第一个默认数字标签,
第三个参数对最后标签起修饰作用(比如,形状、颜色)

'''
plt.yticks([-2,-1,1,2,3],[r'$really\ bad\ \alpha$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'],rotation=30)

plt.show()

在这里插入图片描述
3.

#####设置x,y常态坐标(return 我们画图做数学题的常见坐标系)

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y1=2*x+1
y2=x**2

plt.figure()
plt.plot(x,y2)
plt.plot(x,y1,color='red',linestyle='--',linewidth=1.0)

#显示图大小(坐标)的取值范围,
plt.xlim((-1,2))
plt.ylim((-2,3))


plt.xlabel('I am x')
plt.ylabel('I am y')


new_ticks=np.linspace(-1,2,5)
print(new_ticks)
plt.xticks(new_ticks)
#plt.yticks([-2,-1,1,2,3],['really bad','bad','normal','good','really good'])
#正则表达式显示好看字体
plt.yticks([-2,-1,1,2,3],[r'$really\ bad\ \alpha$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])


#gca='get current axis'  axis:轴
ax=plt.gca()
#设置右边、上边的轴线为透明,隐藏     spines:脊椎
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
#将ax获取的'bottom'轴设为x轴
#将ay获取的'bottom'轴设为y轴
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
#设x,y的起点为:(0,0)原点
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))


plt.show()

在这里插入图片描述
4.

#####为曲线和直线添加图标说明

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y1=2*x+1
y2=x**2

plt.figure(figsize=(7,7))
l1,=plt.plot(x,y2,)
l2,=plt.plot(x,y1,color='red',linestyle='--',linewidth=1.0,)
#legend:图标说明   
#loc参数:定义图标说明显示位置默认为'best',可选参数有:'upper center', 'lower center', 'center left', 'center right' etc.、
#handles:可根据labels大小自动设置边框大小。
plt.legend(handles=[l1,l2,],labels=['aaa','bbb',],loc='upper center')


#显示图大小(坐标)的取值范围,
plt.xlim((-1,2))
plt.ylim((-2,3))


plt.xlabel('I am x')
plt.ylabel('I am y')


new_ticks=np.linspace(-1,2,5)
print(new_ticks)
plt.xticks(new_ticks)
#plt.yticks([-2,-1,1,2,3],['really bad','bad','normal','good','really good'])
#正则表达式显示好看字体
plt.yticks([-2,-1,1,2,3],[r'$really\ bad\ \alpha$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])


#gca='get current axis'  axis:轴
ax=plt.gca()
#设置右边的轴线为透明,隐藏     spines:脊椎
ax.spines['right'].set_color('none')
ax.spines['top'].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))

plt.show()

在这里插入图片描述
5.

#########给图像中特殊点进行注释
#########在画板中相对图像添加自定义文本


import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y=2*x+1

plt.figure(num=1,figsize=(8,5))
plt.plot(x,y,)

ax=plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))


x0=1
y0=2*x0+1
#设置一个分散点,S:点的大小。
plt.scatter(x0,y0,s=50,color='b')
#在俩端点之间,画一条黑色宽度为2的虚线。
plt.plot([x0,x0],[y0,0],'k--',lw=2)


#method 1
####################
#annotate:中文意思:注释   
# %y:相当于C语言中的取地址符&,为%s赋值。
#xytest:设置文本(2x+1=3)相对于注释点的相对位置。    
#textcoords='offset points':默认值,偏执点(根据xytext设置值偏离(x0,y0)),最后以此为锚点来画注释曲线指向(x0,y0)
#arrowprops:设置style,    ,箭头、角度、半径
plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))


#method2
'''
plt.text(x,y,s,fontdict,)
x, y : 放置文本的位置

s : str  the 文本内容.

fontdict : 用于覆盖默认文本属性的字典(自定义文本样式)

'''
plt.text(-3.7,5,r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$',fontdict={'size':16,'color':'r'})


plt.show()

在这里插入图片描述
6.

#######当有时候,坐标被线条遮住时,设置透明度使其显现。

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y=0.1*x

plt.figure()
#alpha:不透明度
plt.plot(x,y,linewidth=10,color='green',alpha=0.5)
plt.ylim(-2,2)

ax=plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

#取出x,y轴的标签(坐标),设置大小为12,为标签加box_style
for label in ax.get_xticklabels()+ ax.get_yticklabels():
    label.set_fontsize(12)
    label.set_bbox(dict(facecolor='red',edgecolor='None',alpha=0.7))

plt.show()





在这里插入图片描述
7.

#####散点图

import matplotlib.pyplot as plt
import numpy as np

#n=1024
#X=np.random.normal(0,1,n)
#Y=np.random.normal(0,1,n)
#T=np.arctan2(Y,X)  #for color value

'''
np.arange()
一个参数时,参数值为终点,起点取默认值0,步长取默认值1。
两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。
三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数
'''
#plt.scatter(X,Y,s=75,c=T,alpha=0.5)
#plt.scatter设置散点图。
plt.scatter(np.arange(5),np.arange(5))

#plt.xlim((-1.5,1.5))
#plt.ylim((-1.5,1.5))

#不传参,去掉外围坐标
plt.xticks(())
plt.yticks(())

plt.show()

在这里插入图片描述
8.

#####条形直方图

import matplotlib.pyplot as plt
import numpy as np

n=12
X=np.arange(12)
# 1/float(2)=0.5
#np.random.uniform:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high,n为采样点个数
Y1=(1-X/float(n))*np.random.uniform(0.5,1.0,n)
Y2=(1-X/float(n))*np.random.uniform(0.5,1.0,n)

#bar:条、棒。代表柱状图
plt.bar(X,+Y1,facecolor='red',edgecolor='white')
plt.bar(X,-Y2,facecolor='blue',edgecolor='white')

#zip:x,y以元组为单位,依次在X,Y数组中取值。
for x,y in zip(X,Y1):
    #ha:horizontal alignment
    plt.text(x+0.4,y+0.05,'%.2f'% y,ha='center',va='bottom')

for x,y in zip(X,Y2):
    #ha:horizontal alignment
    plt.text(x+0.4,-y-0.05,'%.2f'% y,ha='center',va='top')
    
plt.xticks(())
plt.yticks(())



plt.show()


在这里插入图片描述
9.

######山地高低势能图
'''
np.linspace(x,y,n):以n为总数均匀划分
np.arange(x,y,n)  :以n为步长均匀划分
'''

import matplotlib.pyplot as plt
import numpy as np

def f(x,y):
    b=(1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
    #the height function
    return b

n=256
x=np.linspace(-3,3,n)
y=np.linspace(-3,3,n)
#meshgrid:网格
'''
np.meshgrid(x,y)基于向量x和向量y中包含的坐标返回二维网格坐标。

x是向量[1 2 3],y是向量[1 2 3 4 5];
矩阵X的每一行都是x,即[1 2 3],总共有length(y)=5行;
矩阵Y的每一列都是y,即[1 2 3 4 5],总共有length(x)=3列。

X =                                         Y = 

    1 2 3                                   1    1    1

    1 2 3                              2    2    2

    1 2 3                              3    3    3

    1 2 3                              4    4    4

    1 2 3                              5    5    5
'''
X,Y=np.meshgrid(x,y)

#contour:等位线

#use plt.contourf to filling contours
#X,Y and value for(X,Y)point
#8:8个划分
#cmap=color_map        contourf:填色等位面
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)

#use plt.contour to add contour lines    contour:定位线 
C=plt.contour(X,Y,f(X,Y),8,colors='black',linewidths=0.5)

#adding label   
#inline:在线里面添加label
plt.clabel(C,inline=True,fontsize=10)

plt.xticks(())
plt.yticks(())

plt.show()


在这里插入图片描述
10.

#######色块与渐变条形图注释
import matplotlib.pyplot as plt
import numpy as np

#image data
#以数字指定颜色,传入数组,后reshape(3,3)重塑3——3矩阵
a=np.array([0.313660827978,0.365348418405,0.423733120134,
           0.365348418405,0.439599930621,0.525083754405,
           0.423733120134,0.525083754405,0.651536351379]).reshape(3,3)

plt.figure(figsize=(8,5),facecolor='white')
"""
fornthe value of"interpolation",check this:
http://matplotlib.org/examples/images_contours_and_fields/interpolation_methods.html

"""
#cmap:color map;
# cmap='bone':设置图片的颜色为骨白色。
#origin相对于原始3X3矩阵的首尾部起始显示,   origin='upper'   
#interpolation='nearest'
plt.imshow(a,cmap='bone',origin='lower')
#shrink:定义注释bar相对于色块的收缩比
plt.colorbar(shrink=0.9)

plt.xticks(())
plt.yticks(())
plt.show(

在这里插入图片描述
11.

########3D图像与平面映射
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure(facecolor='white')
ax=Axes3D(fig)

#X,Y value
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)
#height value
Z=np.cos(R)

#r,cstride:黑线的密度   rstride:横轴间距;cstride:纵轴间距
#rainbow:彩虹色
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,edgecolor='black',cmap=plt.get_cmap('rainbow'))

#zdir->z;沿纵轴方向压等高线,映射到地面
ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap='rainbow')
ax.set_zlim(-2,2)
plt.show()

在这里插入图片描述
12.

########画板分块显示(方法一)
import matplotlib.pyplot as plt
import numpy as np
plt.figure(facecolor='white')

#把很多张图画到一个显示界面,把面板切分成一个一个子图
#subplot前面俩参数指定的是一个画板被分割成的行和列,后面一个参数则指的是当前正在绘制的编号!
plt.subplot(2,2,1)
plt.plot([0,1],[0,1])

plt.subplot(2,2,2)
plt.plot([0,1],[0,2])

plt.subplot(2,2,3)
plt.plot([0,1],[0,3])

plt.subplot(224)
plt.plot([0,1],[0,4])

plt.show()

在这里插入图片描述
13.

########画板分块显示(方法一)多举例
import matplotlib.pyplot as plt
import numpy as np
plt.figure(facecolor='white')
plt.subplot(2,1,1)
plt.plot([0,1],[0,1])

plt.subplot(2,3,4)
plt.plot([0,1],[0,2])

plt.subplot(2,3,5)
plt.plot([0,1],[0,3])

plt.subplot(236)
plt.plot([0,1],[0,4])

plt.show()

在这里插入图片描述
14.

#######画板分块显示(方法二、更普遍)

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

#method 1:subplot2grid
############################
plt.figure(facecolor='white')
ax1=plt.subplot2grid((3,3),(0,0),colspan=3,rowspan=1)
ax1.plot([1,2],[1,2])
ax1.set_title('ax1_title')
ax2=plt.subplot2grid((3,3),(1,0),colspan=2,rowspan=1)
ax3=plt.subplot2grid((3,3),(1,2),colspan=1,rowspan=2)
ax4=plt.subplot2grid((3,3),(2,0),colspan=1,rowspan=1)
ax5=plt.subplot2grid((3,3),(2,1),colspan=1,rowspan=1)

在这里插入图片描述
15.

######大图嵌套小图

'''
调用plt.figure.add_axes 重定义坐标系占用整个fig的百分比及位置,从而实现功能。
left,bottom,width,height=0.1,0.1,0.8,0.8:重定义坐标系边框位置
'''

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt

fig=plt.figure(facecolor='white')
x=[1,2,3,4,5,6,7]
y=[1,3,4,2,5,8,6]

#占整个figure()的百分比
left,bottom,width,height=0.1,0.1,0.8,0.8
ax1=fig.add_axes([left,bottom,width,height])
ax1.plot(x,y,'r')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('title')

left,bottom,width,height=0.2,0.6,0.25,0.25
ax1=fig.add_axes([left,bottom,width,height])
ax1.plot(x,y,'b')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('title_inside 1')

plt.axes([0.6,.2,.25,.25])
plt.plot(y[::-1],x,'g')
plt.xlabel('x')
plt.ylabel('y')
plt.title('title_inside 2')
plt.show()

在这里插入图片描述
16.

#####俩条线公用x轴,显示在一张fig上

import matplotlib.pyplot as plt
import numpy as np

plt.figure(facecolor='white')

x=np.arange(0,10,0.1)
y1=0.05*x**2
y2=-1*y1

fig,ax1=plt.subplots(facecolor='y')
#坐标反转
ax2=ax1.twinx()
ax1.plot(x,y1,'g-')
ax2.plot(x,y2,'b--')

ax1.set_xlabel('X_data')
ax1.set_ylabel('Y1',color='g')
ax2.set_ylabel('Y2',color='r')

plt.show()

在这里插入图片描述
17.

#######导入animation(活跃)绘制动图

import numpy as np
import matplotlib.pyplot as plt#导入动画模块
from matplotlib import animation

fig,ax=plt.subplots(facecolor='y')

x=np.arange(0,2*np.pi,0.01)
line,=ax.plot(x,np.sin(x))

def anime(i):
    line.set_ydata(np.sin(x+i/100))
    return line,
def init():
    line.set_ydata(np.sin(x))
    return line,

#frames:多窗口页面,帧数
#interval:间隔 20ms
#blit:位块传送
ani=animation.FuncAnimation(fig=fig,func=anime,frames=100,init_func=init,interval=20,blit=False)

plt.show()

在这里插入图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值