【问题标题】:Plotting two figures side by side并排绘制两个图形
【发布时间】:2020-05-30 01:25:37
【问题描述】:

正如标题所说,我正在努力将两个情节并排绘制在一起。从概念上讲,代码如下:

def my_func(arr):    
    plt.scatter(arr[:, 0], arr[:, 1])

fig, ax = plt.subplots(1, 2, sharex='col', sharey='row')

arr1 = np.array([[1, 2], [2, 2], [4, 3], [6, 4], [5, 6]])

for i in range(2):
   my_func(arr1 + i)

这里的问题是使用 my_func 将两个绘图一起绘制 - 一个创建绘图的函数(使用多个参数,因此它应该是一个单独的函数)。这里的问题是,应该在两个不同的框中绘制的两个图被绘制在同一个框中。如何解决?

【问题讨论】:

  • 这能回答你的问题吗? How to make two plots side-by-side using Python?
  • 感谢您的链接,但它不能回答问题。问题是我必须使用单独的函数 my_func 来制作绘图。在这个简化的示例中,使用子图就足够了,并且 my_func 不是必需的。在我的真实案例中,应该使用 my_func 创建绘图,但并排绘制。 (my_func 接受多个参数,根据这些参数生成点颜色和绘图本身的标题,这需要太多代码行,最好将其用作单独的函数)。
  • 好吧,只需将正确的ax 传递给您的函数即可。我没有看到问题。
  • 参见this post 关于使用 np.ravel 和调用单独的绘图函数

标签: python matplotlib subplot


【解决方案1】:

您需要将相应的轴对象传递给您的函数进行绘图

def my_func(arr, ax):    
    ax.scatter(arr[:, 0], arr[:, 1])

fig, ax = plt.subplots(1, 2, sharex='col', sharey='row')

arr1 = np.array([[1, 2], [2, 2], [4, 3], [6, 4], [5, 6]])

for i in range(2):
   my_func(arr1 + i, ax[i])

【讨论】:

  • 谢谢!它现在正在工作,但我想将此解决方案扩展到各种数量的子图,包括仅一个图。怎么做?以下明显的想法不起作用。 def my_func(arr, ax): ax.scatter(arr[:, 0], arr[:, 1]) max_num = 2 fig, ax = plt.subplots(1, max_num, sharex='col', sharey=' row') arr1 = np.array([[1, 2], [2, 2], [4, 3], [6, 4], [5, 6]]) for i in range(max_num): my_func (arr1 + i, ax[i])```
  • @user48115 你可以使用ax = np.ravel(ax)。这适用于只有 1 个轴且存在 1d 或 2d 轴列表时。
  • 能否举例说明在这种情况下如何使用 np.ravel(ax)?
  • 谢谢,@Johan。我明白你是什么意思。以防万一其他人遇到同样的问题, ax = np.ravel(ax) 应该作为单独的行添加,如下所示: fig, ax = plt.subplots(1, max_num, sharex='col', sharey= 'row') ax = np.ravel(ax) 没马上弄明白。
  • @user48115 :您可以使用 for i, axe in enumerate(ax.flatten()):for i, axe in enumerate(ax.ravel()): 然后简单地使用 my_func(arr1 + i, axe)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 2021-02-13
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
相关资源
最近更新 更多