python - matplotlib 第三轴标签移位
问题描述
以下代码用于生成具有三个 y 轴的图形,并使用科学计数法标记轴:
import numpy as np
import matplotlib.pyplot as plt
it = np.linspace(1, 101403, 101403, endpoint=True)
fig, ax = plt.subplots(figsize=(15,5))
fig.subplots_adjust(right=0.75)
twin1 = ax.twinx()
twin2 = ax.twinx()
twin2.spines["right"].set_position(("axes", 1.1)
ax.set_xlim(it[0], it[-1])
ax.set_ylim(0, 5e4)
ax.ticklabel_format(style='sci', axis='y', scilimits=(0,0))
twin1.set_ylim(-0.5e7, 8.9e7)
twin2.set_ylim(0, 5e8)
ax.set_xlabel("X")
ax.set_ylabel("Y1")
twin1.set_ylabel("Y2")
twin2.set_ylabel("Y3")
ax.yaxis.label.set_color('blue')
twin1.yaxis.label.set_color('red')
twin2.yaxis.label.set_color('green')
tkw = dict(size=4, width=1.5)
ax.tick_params(axis='y', colors='blue', **tkw)
twin1.tick_params(axis='y', colors='red', **tkw)
twin2.tick_params(axis='y', colors='green', **tkw)
ax.tick_params(axis='x', **tkw)
twin2.spines['left'].set_edgecolor('blue')
twin1.spines['right'].set_edgecolor('red')
twin2.spines['right'].set_edgecolor('green')
plt.show()
运行上述代码后,如下图:
1e4 和 1e7 重叠:
您可能已经注意到 Y2 轴1e4
和 Y3 轴1e7
在 Y2 轴附近重叠。如何重新定位1e7
到 Y3 轴附近的正确位置?
解决方案
这是我对这种现象的第一次体验。我为它们中的每一个设置了 ticklabel_format() ,但没有帮助。我不知道这是否是matplotlib的问题,但我通过直接移动位置来处理它。但是,当我这样做时,偏移文本作为副作用显示在 x 轴上,因此我强制将其隐藏。这就是我在这个答案中所指的。
twin2.get_yaxis().get_offset_text().set_position((1.1,5.0))
ax.get_xaxis().get_offset_text().set_visible(False)
plt.show()
推荐阅读
- c# - SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应是:5.5.1 Authentication Required
- android - 无法让 AdMob 广告选择图标显示在原生广告上
- python - 在 Python 中使用直接请求从 S3 下载
- docker - Kubernetes pod 中的 Docker 容器无法通信
- javascript - 导航后如何更新参数?
- javascript - 使用 for 循环创建多个 setState 数据
- java - Java 代码执行以在 O(1) 中获得结果
- git - GitHub:如何从用户那里下载提交
- java - 双散列哈希表重新散列问题
- java - Java Selenium 没有这样的元素:无法找到元素