Python Matplotlib:将一个大型图拆分为多个子图(子图)

2024-09-27 22:17:45 发布

您现在位置:Python中文网/ 问答频道 /正文

简单地说,假设我有两个列表:
A->;有名称列表['A'、'B'、'C'、'D'、'E'、'F'、'G'、'H']
B->;具有值列表[5,7,3,8,2,9,1,3]
A是X轴标签的名称,B中的相应值是图形的高度(即Y轴)。

%matplotlib inline
import pandas as pd
from matplotlib import rcParams
import matplotlib.pyplot as plt
from operator import itemgetter

rcParams.update({'figure.autolayout': True})
plt.figure(figsize=(14,9), dpi=600)

reso_names = ['A','B','C','D','E','F','G','H']
reso_values = [5,7,3,8,2,9,1,3]
plt.bar(range(len(reso_values)), reso_values, align='center')
plt.xticks(range(len(reso_names)), list(reso_names), rotation='vertical')

plt.margins(0.075)
plt.xlabel('X-Axis')
plt.ylabel('Y-Axis')
plt.title('Graph', {'family' : 'Arial Black',
        'weight' : 'bold',
        'size'   : 22})
plt.show()

此代码给出以下输出:enter image description here

但是我希望它每2个值都有子图。在这种情况下,应该有4个子图:

  • 第一张图有“A”和“B”
  • 第二张图有“C”和“D”
  • 第三张图有“E”和“F”
  • 第四张图有“G”和“H”

这种拆分应该是动态的(不是4个不同的循环,它应该根据输入的大小将图分成2个单位,如果列表A有10个值,那么它应该给出5个子图)。在



我知道了如何将图分成两半,但我需要使用每个图的N步来实现它(在这个例子中N是2)。
我把图分成两个相等的子图的代码是:

^{pr2}$


这给了我:enter image description here


我只想让程序根据分裂数N动态地把图分成子图


Tags: fromimportgt名称列表lennamesmatplotlib
1条回答
网友
1楼 · 发布于 2024-09-27 22:17:45

您可以使用以下代码直接将列表values/namessize元素拆分为size//N + 1列表中的N元素:

N=3
sublists_names = [reso_names[x:x+N] for x in range(0, len(reso_names), N)]
sublists_values = [reso_values[x:x+N] for x in range(0, len(reso_values), N)]

请注意,如果N不划分大小,最后一个子列表的元素将更少。在

然后您只需执行zip并在不同的图形中绘制每个子列表:

^{pr2}$

enter image description here

如果列表不能被N分割,您可以取消注释最后一行注释,这样条就在最后一个子块上对齐:(ax.set_xlim(0, N)):

enter image description here

相关问题 更多 >

    热门问题