python - 为每个子图设置相等数量的 y 刻度
问题描述
我正在尝试绘制一个漂亮的子图,但我无法解决 y 刻度不相等的问题。例如,在下图中,“VVIX Beta”图只有 3 个刻度,而其他有 4 到 5 个刻度。理想情况下,我希望每个图表有五个 y 刻度。已经提出了类似的问题,并提出了建议:
ax1.locator_params(axis='y', nbins=5)
其中 ax1 到 ax7 是七个子图。然而这没有用,输出似乎忽略了命令。有谁知道另一种方法?任何帮助都非常感谢,并在此先感谢
解决方案
一种可能的选择是使用MaxNLocator,通过:
- nbins作为刻度数,
- min_n_ticks 比 nbins小一。
看下面的例子:
import matplotlib.ticker as ticker
def draw(ax, nBins):
ax.plot(x, y, 'g', label='line one', linewidth=3)
ax.plot(x2, y2,'c', label='line two', linewidth=3)
ax.set_title('Epic Info')
ax.set_ylabel('Y axis')
ax.set_xlabel('X axis')
if nBins > 0:
ax.yaxis.set_major_locator(ticker.MaxNLocator(nbins=nBins, min_n_ticks=nBins-1))
else:
ax.yaxis.set_major_locator(ticker.MaxNLocator(nbins='auto'))
ax.legend()
ax.grid(True, color='k')
x = [ 5, 8,10]; y = [12.1,15.2, 6.3]
x2 = [ 6, 9,11]; y2 = [ 5.4,15.5, 7.6]
fig, axs = plt.subplots(2, 2, figsize=(10,7), constrained_layout=True)
fig.suptitle('Global title')
draw(axs.flat[0], 4)
draw(axs.flat[1], 5)
draw(axs.flat[2], 6)
draw(axs.flat[3], 0)
plt.show()
如您所见,它生成了 4 个几乎相同的图:
- 3 具有明确定义的y刻度数,
- 最后一个是自动设置。
结果是:
注意:对于某些nBins,实际的刻度数与预期的不同,但至少您可以尝试使用我的代码来绘制数据。
推荐阅读
- python - 我从数组列表中找到第二大数字,但是当输入 arr 为 6,6,6,6,6,6,6,6,6,5 时出现运行时错误
- python - 使用 python 代码创建 Docker 容器的问题
- vb.net - 名称取决于字符数
- c++ - 链接列表追加到尾部
- react-native - 我们可以使用酶安装来测试用 typescript 编写的 react-native redux 连接(高阶)组件吗
- ios - userNotificationCenter 中的completionHandler 实际上是做什么的?
- php - API YouTube API 插入数据库的问题
- node.js - publishactions 范围不起作用请检查并让我更新是否有任何权限
- git - 如何将具有相关更改的两个分支合并到 master 中?
- vue.js - Vue + Vuetify 为移动端定制日历组件