假设我有两个列表。 我从原始 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, ...]
如果满足-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()
输出:
关于python - 如何生成带有截断条形的类似条形图的图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59152714/