matplotlib 创建两个大小不同的子区[重复]

6xfqseft  于 2023-03-19  发布在  其他
关注(0)|答案(2)|浏览(128)

此问题在此处已有答案

Matplotlib different size subplots(6个答案)
1年前关闭。
我有一个脚本,它创建一个或两个图表,这取决于是否满足一个特定的条件。实际上,基本上,我目前所做的如下:

import matplotlib.pyplot as plt

list1 = [1,2,3,4]
list2 = [4,3,2,1]
somecondition = True
plt.figure(1) #create one of the figures that must appear with the chart
ax = plt.subplot(211) #create the first subplot that will ALWAYS be there
ax.plot(list1) #populate the "main" subplot
if somecondition == True:
   ax = plt.subplot(212) #create the second subplot, that MIGHT be there
   ax.plot(list2) #populate the second subplot
plt.show()

这段代码(包含正确的数据,但我所做的这个简单版本无论如何都是可执行的)生成了两个大小相同的子图,一个在另一个的上面。然而,我想得到的是以下内容:

  • 如果某个条件为True,那么两个子图都应该出现在图中。因此,我希望第二子图比第一子图小1/2;
  • 如果某个条件是False,那么只有第一个子图应该出现,我希望它的大小与所有图形一样(在第二个子图不出现的情况下,不要留下空白)。

我很确定这只是两个子图大小的问题,甚至可能是参数211和212(我不明白它们代表什么,因为我是Python的新手,在网络上还找不到明确的解释)。有人知道如何以简单的方式调节子情节的大小吗?与子图的数量以及整个图形的大小成比例?为了使它更容易理解,你也可以编辑我的简单代码,我附上得到我想要的结果吗?提前感谢!

s8vozzvw

s8vozzvw1#

这个解决方案是否令人满意?

import matplotlib.pyplot as plt

list1 = [1,2,3,4]
list2 = [4,3,2,1]
somecondition = True
plt.figure(1) #create one of the figures that must appear with the chart

if not somecondition:
    ax = plt.subplot(111) #create the first subplot that will ALWAYS be there
    ax.plot(list1) #populate the "main" subplot
else:
    ax = plt.subplot(211)
    ax.plot(list1)
    ax = plt.subplot(223) #create the second subplot, that MIGHT be there
    ax.plot(list2) #populate the second subplot
plt.show()

如果您需要宽度相同但高度减半,最好使用matplotlib.gridspec此处参考

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

list1 = [1,2,3,4]
list2 = [4,3,2,1]
somecondition = True
plt.figure(1) #create one of the figures that must appear with the chart

gs = gridspec.GridSpec(3,1)

if not somecondition:
    ax = plt.subplot(gs[:,:]) #create the first subplot that will ALWAYS be there
    ax.plot(list1) #populate the "main" subplot
else:
    ax = plt.subplot(gs[:2, :])
    ax.plot(list1)
    ax = plt.subplot(gs[2, :]) #create the second subplot, that MIGHT be there
    ax.plot(list2) #populate the second subplot
plt.show()

vybvopom

vybvopom2#

似乎你正在寻找这个:

if somecondition:
    ax = plt.subplot(3,1,(1,2))
    ax.plot(list1)
    ax = plt.subplot(3,1,3)
    ax.plot(list2)
else:
    plt.plot(list1)

幻数是nrows,ncols,plot_number,请参阅文档。因此3,1,3将创建3行1列,并绘制到第三个单元格。其缩写为313
可以使用元组plot_number,这样你就可以创建一个位于第一个和第二个单元格中的图:3,1,(1,2) .

相关问题