python - 如何生成带有截断条形的类似条形图的图?

标签 python list matplotlib plot graph

假设我有两个列表。 我从原始 2dim 列表中提取了最小、最大列表。

循环原始列表,我提取列表。提取的列表的值为 -100s 和列表的最小值

例如,从 [0, 0, 1, 3, 10] 列表中,返回 [-100, -100, 0]。

这里,-100 的数量代表列表中最小值的数量(在本例中为 0 的数量)。 0 是列表的最小值。

original = [ [0, 0, 1, 3, 10], [4, 2, 2, 5, 10, 15], [3, 0, 0, 0, 0, 4, 10] ...]
min = [-100, -100, 0, -100, -100, 2, -100, -100, -100, -100 0, ...]
max = [-100, -100, 10, -100, -100, 15, -100, -100, -100, -100, 10, ...]

有了这个列表,我想绘制如下所示的条形图。 bar graph

如果满足-100,则通过该时间。如果不是,则从最小到最大绘制条形。

此外,我想根据标准给出不同的颜色。

我在 matplotlib example page 中找不到好的例子,或来自 google 的搜索结果。

我可以获得这方面的提示吗?

最佳答案

以下代码使用 matplotlib's colourmap 实现了所需的结果:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors

min_vals = [-100, -100, 0, -100, -100, 2, -100, -100, -100, -100, 0]
max_vals = [-100, -100, 10, -100, -100, 15, -100, -100, -100, -100, 10]
colours = [1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 2]

w = len(min_vals)
h = max(max_vals) - min(x for x in min_vals if x != -100)

arr = np.ones((h, w), dtype="int")

for i, vals in enumerate(zip(min_vals, max_vals)):
    if -100 not in vals:
        arr[vals[0]:vals[1]:,i] = np.array([colours[i]]*(vals[1]-vals[0]))

cmap = colors.ListedColormap(['white', 'green', 'red'])
fig, ax = plt.subplots(figsize=(6,6))

ax.imshow(arr, cmap=cmap)
plt.gca().invert_yaxis()
plt.yticks(range(h))
plt.xticks(range(w))
plt.show()

输出:

enter image description here

关于python - 如何生成带有截断条形的类似条形图的图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59152714/

相关文章:

javascript - React Native 和 Native Base 中的两个子项具有相同的键

python - 如何将文件中的单词插入列表中?

java 初学者 : which is preferred when class has arraylist of arraylist (clone(), 不可修改列表,自定义深度复制)

python - 如何在 MatPlotLib 中将线图与条形图居中?

python - 动画+在矩阵之间平滑插值

python - 如何在堆叠条形图显示中抑制零

python - 我们可以在模块中使用完全限定标识符而不导入模块吗?

python - 如何在 Python 脚本中执行 UNIX 命令

使用 TFIDF 的 Python 文本分类

python - 从语法上推迟函数执行