导入库,并设置中文字体
import numpy as npimport matplotlib.pyplot as pltimport matplotlib# 设置这个,防止图片不显示汉字matplotlib.rcParams['font.sans-serif']=['SimHei']matplotlib.rcParams['axes.unicode_minus']=False #这两行需要手动设置
画一个正弦函数图
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('横坐标')
plt.ylabel('纵坐标')
plt.title('正弦函数图')
plt.show()
自定义函数图
# 自定义y=sin(x) + x + x^0.5 + 6
x = np.linspace(0, 100, 1000)
y = np.sin(x) + x + np.sqrt(x) + 6
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.title('函数图:y=sin(x) + x + x^0.5 + 6')
plt.show()
使用不同画笔轨迹画图,同时在一个图中画2个函数
:::tips 在plt.show()之前连续画就可以了 :::
# 使用不同的画笔轨迹画图
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [10, 2, 3, 4, 5, 2, 4, 7, 2, 4]
plt.plot(x, y, '*')
plt.title('使用不同的轨迹画图')
m = random.rand(100) * 10
n = random.rand(100) * 10
plt.plot(m, n, '--')
plt.show()
画多个子图
"""
画子图 分为上下两个图
plt.subplot(n, m, idx)
n指的是图片有几行
m指的是图片有几列
idx指的是当前的图片占据的位置是多少
idx的范围在[1,m*n]
idx按照行优先的方式进行排序
"""
x = np.linspace(0, 5, 100)
y1 = np.sin(x*np.pi)
y2 = np.cos(x*np.pi)
plt.subplot(2, 1, 1)
plt.plot(x, y1, 'r--')
plt.title('一个图')
plt.subplot(2, 1, 2)
plt.plot(x, y2, 'g*')
plt.title('另一个图')
plt.show()
另一种画子图的方式
"""
另一种画子图的方式
"""
figure, ax = plt.subplots(2, 2)
ax[0][0].plot(x, y1, 'r-')
ax[0][1].plot(x, y1, 'g--')
ax[1][0].plot(x, y2, '*')
ax[1][1].plot(x, y2, 'b--')
plt.show()
调整子图间距
:::tips
subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=None, hspace=None)
# 参数说明:
top、bottom、left、right:整个图距离上下左右边框的距离
wspace、hspace:这个才是调整各个子图之间的间距
wspace:调整子图之间的横向间距
hspace:调整子图之间纵向间距
:::
:::tips
scatter绘制散点,plot绘制经过点的曲线
:::
"""
另一种画子图的方式
"""
figure, ax = plt.subplots(2, 2)
ax[0][0].plot(x, y1, 'r-')
ax[0][1].plot(x, y1, 'g--')
ax[1][0].plot(x, y2, '*')
ax[1][1].plot(x, y2, 'b--')
plt.subplots_adjust(1, 2, 3, 3, 0.5, 0.5)
plt.show()
设置自定义坐标轴
x = np.linspace(-1, 3, 100)
y = np.sin(x)
plt.scatter(x, y)
plt.yticks([-1, -0.5, 0, 0.5, 1], ['h', 'hh', 'hhh', 'hhhh', 'hhhhh'])
plt.xticks([-1,0,1,2,3], ['level2','level2','level3','level4','level5'])
plt.show()
实现双Y坐标轴
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0., np.e, 0.01)
y1 = np.exp(-x)
y2 = np.log(x)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(x, y1,'r',label="right");
ax1.legend(loc=1)
ax1.set_ylabel('Y values for exp(-x)');
ax2 = ax1.twinx() # this is the important function
ax2.plot(x, y2, 'g',label = "left")
ax2.legend(loc=2)
ax2.set_xlim([0, np.e]);
ax2.set_ylabel('Y values for ln(x)');
ax2.set_xlabel('Same X for both exp(-x) and ln(x)');
plt.show()
画指点,文本
x0 = 0.5
y0 = 2*x0 + 1
# 画点
plt.scatter(x0,y0,s=50,color='blue')
# 画竖虚线
plt.plot([x0,x0],[y0,0],'k--',lw=2) # k--代表颜色的虚线,lw代表宽度
# 画斜线
x = np.linspace(-2, 2, 100)
y = 2*x+1
plt.plot(x, y, 'b--')
# 画指点
plt.annotate(r'$2x+1=%s$' % y0,xy=(x0,y0),xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
#xy=(x0,y0)指在x0,y0点,xytext=(+30,-30)指在点向右移动30,向下移动30,textcoords='offset points'指以点为起点
#arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')指弧度曲线, .2指弧度
# 画文本
plt.text(-2,2,r'$This\ is\ the\ text$',fontsize=16,color='red') #-2,2指从-2,2开始写
plt.show()
设置坐标轴范围,限制在某区间内
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('横坐标')
plt.ylabel('纵坐标')
plt.title('正弦函数图')
plt.xlim(0,6)
plt.ylim(-0.9, 0.9)
plt.show()
挪动x, y轴位置
x0 = 0.5
y0 = 2*x0 + 1
# 画点
plt.scatter(x0,y0,s=50,color='blue')
# 画竖虚线
plt.plot([x0,x0],[y0,0],'k--',lw=2) # k--代表颜色的虚线,lw代表宽度
# 画斜线
x = np.linspace(-2, 2, 100)
y = 2*x+1
plt.plot(x, y, 'b--')
# 画指点
plt.annotate(r'$2x+1=%s$' % y0,xy=(x0,y0),xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
#xy=(x0,y0)指在x0,y0点,xytext=(+30,-30)指在点向右移动30,向下移动30,textcoords='offset points'指以点为起点
#arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')指弧度曲线, .2指弧度
# 画文本
plt.text(-2,2,r'$This\ is\ the\ text$',fontsize=16,color='red') #-2,2指从-2,2开始写
ax = plt.gca()
#挪动x,y轴的位置,也就是图片下边框和左边框的位置
ax.spines['bottom'].set_position(('data',0)) #data表示通过值来设置x轴的位置,将x轴绑定在y=0的位置
ax.spines['left'].set_position(('axes',0.5)) #axes表示以百分比的形式设置轴的位置,即将y轴绑定在x轴50%的位置,也就是x轴的中点
plt.show()

