python - 子图和 twinx 轴
问题描述
我试图制作两个带有 twinx 轴的子图,第一个子图上的 3 条曲线(曲线、曲线 1 和曲线 2)和第二个子图上的 3 条曲线(曲线、曲线 3 和曲线 4)。但我没有得到我想要的。我想知道你们是否可以帮助我。
x = df['curvex']
y = df['curvey']
y1 = df['curve1']
y2 = df['curve2']
y3=df['curve3']
y4=df['curve4']
fig, ax = plt.subplots(figsize=(40,10), dpi=500)
plt.subplot(2,1,1)
fig.subplots_adjust(right=0.75)
twin1 = ax.twinx()
twin2 = ax.twinx()
twin2.spines['right'].set_position(('axes', 1.02))
p1, = ax.plot(x,y, 'bo--', label='curvey', markersize=0.1, linewidth=0.2)
p2, = twin1.plot(x,y1, 'go--', label='curvey1', markersize=0.1, linewidth=0.2)
p3, = twin2.plot(x,y2, 'ro--', label='curvey2', markersize=0.1, linewidth=0.2)
ax.set_xlabel('CURVEX')
ax.set_ylabel('CURVEY')
twin1.set_ylabel('CURVE1')
twin2.set_ylabel('CURVE2')
ax.yaxis.label.set_color(p1.get_color())
twin1.yaxis.label.set_color(p2.get_color())
twin2.yaxis.label.set_color(p3.get_color())
tkw = dict(size=0.5, width=0.2)
ax.tick_params(axis='y', colors=p1.get_color(), **tkw)
twin1.tick_params(axis='y', colors=p2.get_color(), **tkw)
twin2.tick_params(axis='y', colors=p3.get_color(), **tkw)
ax.legend(handles=[p1,p2,p3])
plt.subplot(2,1,2)
fig.subplots_adjust(right=0.75)
twin3 = ax.twinx()
twin4 = ax.twinx()
twin4.spines['right'].set_position(('axes', 1.02))
p1, = ax.plot(x,y, 'bo--', label='curvey', markersize=0.1, linewidth=0.2)
p4, = twin3.plot(x,y3, 'go--', label='curvey4', markersize=0.1, linewidth=0.2)
p5, = twin4.plot(x,y4, 'ro--', label='curvey5', markersize=0.1, linewidth=0.2)
ax.set_xlabel('CURVEX')
ax.set_ylabel('CURVEY')
twin3.set_ylabel('CURVE4')
twin4.set_ylabel('CURVE5')
ax.yaxis.label.set_color(p1.get_color())
twin3.yaxis.label.set_color(p4.get_color())
twin4.yaxis.label.set_color(p5.get_color())
tkw = dict(size=0.5, width=0.2)
ax.tick_params(axis='y', colors=p1.get_color(), **tkw)
twin3.tick_params(axis='y', colors=p4.get_color(), **tkw)
twin4.tick_params(axis='y', colors=p5.get_color(), **tkw)
ax.legend(handles=[p1,p4,p5])
plt.show()
这就是我得到的。对于每个子图,左侧的 Y 轴应分开。Curvey、curve1 和 curve2 应该在第一个子图上,curvey、curve3 和curve4 应该在第二个子图上。总的来说,我想在每个子图中看到 3 条曲线。我也看不到传说。左右的 Y 刻度也是错误的,因为代码不好,我猜
解决方案
您的问题可能在于以下几行:
twin1 = ax.twinx() twin2 = ax.twinx()
错误地,您为同一轴制作双胞胎。将两条子图创建行更改为这一行:
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(40,10), dpi=500)
之后,您可以执行以下操作:
twin1 = ax1.twinx()
twin2 = ax2.twinx()
另外,不要忘记在开始处理第二个图之前绘制并关闭第一个图:
ax.legend(handles=[p1,p2,p3])
plt.show()
plt.close()
推荐阅读
- php - laravel 5.8 eloquent:有很多关系模型
- python - Tkinter - 选择文件后自动关闭顶级窗口
- javascript - 数组数据过滤到数据
- ruby-on-rails - `
': 未初始化的常量 Datagrid::Filters (NameError) - c# - 如何通过android文本到语音的代码设置语音?它为不可用的语音提供默认响应。我该如何解决这个问题?
- bash - 用于将特定文件从 csv 复制到具有相同文件夹层次结构的另一个目录的 Shell 脚本
- node.js - 查询文档不考虑时区mongodb
- python - 提取无类型输出
- mongodb - 在 MongoDB 中存储和查询 GeoJson 时出现的奇怪问题
- c# - .NET Core 2.2 Razor 页面代码背后创建文本文件,但无法将简单的行写入文件