我正在尝试编写一个代码,该代码绘制从头到尾运行的竖线。每个条都有不同的起点和终点,所有点均为负。我尝试使用plt.bar,但到目前为止还没有真正的成功。
import matplotlib.pyplot as plt
x = 1
y = [-97, -27]
plt.subplot(111, frameon=False)
plt.ylim(-280, 1)
plt.bar(x+0.0, y, width=0.1)
但是,这会创建一个从-97到0(而不是-97到-27)的条形图。如何以一种不错的方式绘制此图?
Plt.bar()首先绘制从0到-97的条形,然后从0到-27绘制条形。我可以在背景色中绘制第二个条形,但是我发现这是一个丑陋的解决方案。有人知道如何解决这个问题吗?
谢谢!
我想要的例子:
答案 0 :(得分:0)
您必须使用bar
绘图功能的bottom
参数。
默认情况下,条形接地为0。 在下面的示例中,我定义了一些带有两端的钢筋。 Matplotlib需要底点和高度。 因此,我用列表理解来计算它们:
[abs(b[0] - b[1]) for b in bars]
返回每个小节的高度; [min(b) for b in bars]
给出每个小节的底部。然后您也可以玩颜色等等。
由您决定如何存储条形坐标。
要么坚持目前的格式,要么两端都坚持。
另外,您可以进行更改以更适合Matplotlib的用法,将它们存储为(bottom, height)
。
import matplotlib.pyplot as plt
def main():
bars = [(-97, -27), (-50, -10), (-2, -15)]
plt.subplot(111, frameon=False)
plt.xlim(-1, len(bars))
plt.ylim(-100, 1)
plt.bar(range(len(bars)),
[abs(b[0] - b[1]) for b in bars],
bottom=[min(b) for b in bars],
width=0.1)
plt.show()
if __name__ == "__main__":
main()
如果希望Matplotlib自动处理不同的条形颜色,请在同一轴上多次调用bar
函数。
import matplotlib.pyplot as plt
def main():
bars = [(-1, -14), (-3, -20), (-2, -23), (-2, -26)]
fig, ax = plt.subplots(1, 1, figsize=(5, 10))
plt.xlim(0, len(bars)+4)
plt.ylim(-28, 1)
plt.xticks([])
for i, bar in enumerate(bars):
ax.bar(i+3,
abs(bar[0] - bar[1]),
bottom=min(bar),
width=0.9)
plt.show()
if __name__ == "__main__":
main()