因此,我计算了一些数据,现在应该将其可视化。 对于每个数据元素,我想放置一个单独的子图,以使整个图尽可能紧凑。 这是五个元素的示例:

5个数据元素的2x3子图

这是我为任意元素数想到的原型:

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

data = ... # some list of pairs of numpy arrays, for x and y axes
size = len(data)
cols = math.floor(math.sqrt(size))
rows = math.ceil(size / cols)

f, diags = plt.subplots(rows, cols)

for (row, col), diag in np.ndenumerate(diags):
    dataIdx = row * cols + col
    if dataIdx < size:
        x = data[dataIdx][0]
        y = data[dataIdx][1]
        diag.scatter(x, y)
        diag.set_title('Regressor {}'.format(dataIdx + 1))
    else: # discard empty subplots
        f.delaxes(diag)
f.show()

简短说明:为了紧凑起见,如果可能,我尝试以方矩阵形式调整图。 如果没有,我为其余图表添加另一行。 然后,迭代这些图,计算数据元素的相应位置并绘制其值。 如果找不到该图的数据元素,则表示该图是最后一行的剩余部分,可以丢弃。

但是,这是我可能会用C ++或Java写的代码,问题是,pythonic的方式是什么?

另外,当遍历数据而不是图时,对此的最佳解决方案是什么? 我当然可以像在初始行/列计算中一样从元素索引计算图的行/列,但是也许有更好的方法可以...

提前致谢!

#1楼 票数:1 已采纳

我可能会像这样创建剧情:

size = len(data)
cols = round(math.sqrt(size))
rows = cols
while rows * cols < size:
    rows += 1
f, ax_arr = plt.subplots(rows, cols)
ax_arr = ax_arr.reshape(-1)
for i in range(len(ax_arr)):
    if i >= size:
        ax_arr[i].axis('off')
    x = data[i][0]
    y = data[i][1]
    ax_arr[i].scatter(x,y)

  ask by hoefling translate from so

未解决问题?本站智能推荐:

1回复

使用热图调整子图

我有一个Subplots与都带有混乱矩阵HeatMap 。 我想调整图表使其更易读,并执行以下操作: 1)在“目标”列上方添加一个大标题 2)添加一个大的Ylabel“预测” 3)每列只有一个大图例,因为它们显示相同的内容 4)为每列添加列名['Train CM', 'Tr
1回复

设置matplotlib子图的大小

我在 MPL 图上创建了两个子图,但我很难在它们上设置大小。 我希望在两个图表之间分割空间,因此每个图表需要具有图形总宽度的 50%,并且我希望它们具有与图形相同的高度,这是我初始化子图的方式: 这就是我得到的:
2回复

如何使子图的大小相等?

我正在使用 matplotlib 和 GridSpec 在 3x3 子图中绘制 9 个图像。 但是,每行的图像大小不同。 例如,第一行图片大小为256x256,第二行图片大小为200x200,第三行图片大小为128x128 我想在子图中绘制相同大小的图像。 我应该如何在python中使用它? 谢谢这
1回复

重用matplotlib子图的图和轴

在图中创建 2 x 2 子图并保存该图。 示例代码: 我认为 'plot_all' 函数的前两行占用了每次迭代的大部分时间,所以我尝试重用 fig 和轴,这样就不需要为下一次连续绘图再次创建这些。 有什么办法可以再次为下一次迭代保存无花果和轴吗?
1回复

在figPython中赋予子图不同的方向

您好,我正在尝试使用 matplotlib 中的 subplot 函数绘制 6 个图形,但是我想将这些图表分解为不同的可视化样式。 我想让 3 行a1占据整个第一列a2, a3将占据第二列,而c1 , c2, c3将占据第三列。
3回复

在子图中绘制网格Pythonmatplotlib

我尝试了以下方法: 我得到以下输出: 但我期待以下输出: 我如何获得跨越两个地块的网格?
1回复

如何制作子图以显示图例列表

**输出为:我绘制了两个子图,这很好。 问题出在图例上。 两者都应仅显示十个图例的列表。 因为V_cel和I_cel都具有[10个列表,每个列表具有1000个值]。 相反,两个图都显示了100个图例。 请参阅所附的图。 我希望它仅显示十个图例[100, 200, 300, 400,
1回复

如何在子图之间创建空间?

标题基本概括了所有内容。 我有一个包含两个子图的笔记本,并希望在它们之间创建一些空间。 他们说的话彼此看起来太接近了。