【问题标题】:change subplot dimension of existing subplots in matplotlib更改 matplotlib 中现有子图的子图尺寸
【发布时间】:2018-09-24 13:42:46
【问题描述】:

鉴于某个维度的子图(例如 1 行 x 9 列)的现有图,我如何将其更改为新维度(3 行 x 3 列的子图)。

当使用不向用户公开此控件的绘图库时会出现此用例(例如Nilearn.plotting.plot_prob_atlas)。据我所知,最初创建具有适当子图尺寸的图形是不可能的。

【问题讨论】:

  • nilearn.plotting.plot_prob_atlas 有一个参数 axes。这是否不允许以所需的方式自定义输出?如果确实没有,那么显示不良行为的代码示例肯定会很有用。
  • 理想情况下,我有兴趣在事后重塑子图,如上所述,而不是挖掘不会泛化到另一个问题的 plot_prob_atlas 的内部结构。但这里有一些关于我的特定问题的细节:nilearn.plotting 确实接受一个轴,所以我尝试将一个子图初始化为适当的大小,并通过传递适当的轴来逐个绘制每个切片。这种方法挂起,但即使它确实有效,由于多次调用,切片之间没有颜色对应关系(区域 1 在一个切片中可能是蓝色,而在另一个切片中可能是红色)。感谢您的帮助!

标签: python matplotlib


【解决方案1】:

我不确定是否有更好的方法来解决从 nilearn.plotting 安排子图的具体问题。

一般来说,假设您有一个黑盒函数,它返回一个带有一些子图的图形。您将需要知道它创建的子图的数量。 然后,您可以创建一个新网格并将图中轴的位置设置为该新网格的位置。

import matplotlib.pyplot as plt
import matplotlib.gridspec
import numpy as np

# blackbox function that returns a figure with 9 subplots in a row
def blackbox():
    fig, axes = plt.subplots(ncols=9)
    for ax in axes:
        a = np.random.rand(10,10)
        ax.pcolormesh(a, vmin=0, vmax=1)
    return fig


fig = blackbox()

gs = matplotlib.gridspec.GridSpec(3,3)
for i, ax in enumerate(fig.axes):
    ax.set_position(gs[i].get_position(fig))

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多