【问题标题】:Turning matplotlib grid of shaded values into a series of bar charts, one per row?将matplotlib的阴影值网格变成一系列条形图,每行一个?
【发布时间】:2019-12-29 17:25:57
【问题描述】:

使用 matlotlib,我可以创建如下图:

在这里,每一行由一系列从 0 到 0.6 的数字组成。左侧轴文本表示每行中的最大值。底部轴文本表示列索引。

实际网格的代码主要涉及这一行:

    im = ax[r,c].imshow(info_to_use, vmin=0, vmax=0.6, cmap='gray')

其中ax[r,c]r 行和c 列的当前子图轴,info_to_use 是一个形状为(num_rows, num_cols) 的numpy 数组,其值介于0 和0.6 之间。

我想知道是否有一种方法可以将上面的代码转换为显示条形图,每行一个?像这个手绘图:

(我的手绘图中的列数与之前的图不同。)我知道如果将它嵌入到第一个图这样的图中,这将导致一个非常难以阅读的图这里。对于行数较少的绘图,我会使用它,这将使条形更易于阅读。

帮助我制作上面第一个情节的参考资料主要来自:

但我不确定如何从这些跳转到每行的条形图。或者至少可以反映它的东西,例如,不是将整个单元格着色为灰色,而是仅根据vmax 的百分比对其进行着色?

【问题讨论】:

  • a bar chart in each row .. 如果行引用a series of numbers from 0 to 0.6,那么您只需要为每一行制作一个条形图。 Matplotlib 库有许多 bar charts 的示例,您可能希望将每个示例都放在 subplot 中。我建议花一些时间在the tutorial 上。尝试至少完成前三个和中间部分的艺术家教程。
  • 使用枚举(从一个开始)遍历info_to_use 的每一行以跟踪行号;在循环中调用 plt.subplot 与 n_rows、一列和行号;然后用行本身调用 plt.bar。
  • @wwii 感谢教程的链接。我可能需要做一个嵌套的子图stackoverflow.com/questions/34933905/…,这增加了另一个混乱的来源,但也许我最好单独制作所有这些数字并使用 Photoshop 或谷歌绘图将它们粘贴在一起
  • @wwii 您的“可能重复”中的堆叠条形图可能会起作用,除了我可能会添加一些空格,以便每一行从相同的 x 轴级别开始.

标签: python matplotlib


【解决方案1】:
import numpy as np
from matplotlib import pyplot as plt

a = np.random.rand(10,20)*.6

在循环中,为二维数组中的每一行调用 plt.subplot 然后 plt.bar。

for i, thing in enumerate(a,1):
    plt.subplot(a.shape[0],1,i)
    plt.bar(range(a.shape[1]),thing)
plt.show()
plt.close()

或者,创建所有子图;然后在一个循环中用每个轴制作一个条形图。

fig, axes = plt.subplots(a.shape[0],1,sharex=True)
for ax, data in zip(axes, a):
    ax.bar(range(a.shape[1]), data)
plt.show()
plt.close()

【讨论】:

    猜你喜欢
    • 2020-10-06
    • 2021-10-29
    • 1970-01-01
    • 2020-09-26
    • 2021-11-02
    • 1970-01-01
    • 2023-03-04
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多