import numpy as np #数据处理
from matplotlib import pyplot as plt #绘图
from scipy.interpolate import make_interp_spline #插值,用于平滑折线图
##############################################################################
plt.gcf().set_facecolor(np.ones(3) * 240 / 255) #设置背景色
plt.rcParams['font.sans-serif'] = 'SimHei' # 使图形中的中文正常编码显示
plt.rcParams['axes.unicode_minus'] = False # 使坐标轴刻度表签正常显示正负号
fig = plt.figure(figsize=(12, 6)) #画布
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.5, hspace=0.5) #子图间隔
##############################################################################
x = np.arange(1,10,0.1) #均匀取点
y1 = np.exp(x)
y2 = np.log(x)
# 数据点
x = np.array([16,32,48,64,80])
y1 = np.array([5,12,22,40,95])
y2 = np.array([1,3,5,8,13])
# 对x和y进行插值
x_smooth = np.linspace(x.min(), x.max(), 50)
y1_smooth = make_interp_spline(x, y1)(x_smooth)
y2_smooth = make_interp_spline(x, y2)(x_smooth)
##############################################################################
ax1 = fig.add_subplot(1,1,1) #添加子图
ax1.grid(True) #样式:网格型
# 绘制曲线
ln3 = ax1.scatter(x,y1,c='r',label="y1")
ln1, = ax1.plot(x_smooth,y1_smooth,c='g', label="y1")
# 设置坐标轴
ax1.set_xlabel('x',fontdict={'fontsize':12})
ax1.set_ylabel('y1',fontdict={'fontsize':12})
plt.xlim(0, 96)
plt.ylim(0, 100)
# 打点
for i in range(5):
ax1.text(x[i] + 1, y1[i] - 2, '({:d},{:.2f})'.format(x[i],y1[i]),fontdict={'fontsize':10})
##############################################################################
# 副轴
ax2 = ax1.twinx() #新建子图ax2,twinx()将ax1的x轴共用
#ax2.grid(True) #样式:网格型
# 绘制曲线
ln4 = ax2.scatter(x,y2,c='b',label="y2")
ln2, = ax2.plot(x_smooth,y2_smooth,c='y',label="y2")
# 设置坐标轴
ax2.set_ylabel('y2',fontdict={'fontsize':12})
plt.ylim(0, 16)
# 打点
for i in range(5):
ax2.text(x[i] + 1, y2[i], '({:d},{:.2f})'.format(x[i],y2[i]),fontdict={'fontsize':10})
##############################################################################
ax1.set_title("x - y1 - y2",size=18) #标题
ax1.legend(loc="upper left",handles=[ln1, ln2, ln3, ln4]) #图例
plt.show() #绘图
图像
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)