Python 如何生成带有截断条的类似条形图的绘图?
假设我有两个列表。 我从原始的2dim列表中提取了最小、最大列表 循环原始列表,我提取列表。提取的列表的值为-100s和最小列表 例如,从[0,0,1,3,10]列表中,返回[-100,-100,0] 在这里,-100表示列表中最小值的数量(在本例中为0的数量)。0是列表的最小值Python 如何生成带有截断条的类似条形图的绘图?,python,list,matplotlib,plot,graph,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,4,10]…] 最小值=[-100,-100,0,-100,-100,2,-100,-100,-100,…] 最大值=[-
original=[[0,0,1,3,10],[4,2,2,5,10,15],[3,0,0,0,4,10]…]
最小值=[-100,-100,0,-100,-100,2,-100,-100,-100,…]
最大值=[-100,-100,10,-100,-100,15,-100,-100,-100,10,…]
有了这个列表,我想画如下的条形图。
如果遇到-100,就打发时间。如果不是,则从最小值到最大值绘制条形图
此外,我想给一个标准不同的颜色
我找不到好的例子,或从谷歌的搜索结果
我可以得到一些提示吗?下面的代码使用以下方法实现了所需的结果: 输出:
请不要为变量命名
min
和max
,这将禁用使用相同名称调用函数的可能性。matplotlib的栏
有一个底部
参数@当然,我之所以把这个列表命名为min,max是因为我展示了这个例子。谢谢你的观点:)我永远不会在我的代码中这样命名。@ImportanceOfBeingErnest哦,我的上帝。。。非常感谢。这是我的错。我从来没有想过找到bar
的参数。。。我只是想找一种图表,这才是我真正想要的。非常感谢。它运行良好:)
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()