【发布时间】:2022-01-25 08:30:44
【问题描述】:
我有三个列表:x、y 和 w,如图所示: x 是对象的名称。 y 是它的高度,w 是它的宽度。
x = ["A","B","C","D","E","F","G","H"]
y = [-25, -10, 5, 10, 30, 40, 50, 60]
w = [30, 20, 25, 40, 20, 40, 40, 30]
我想在 Python 的条形图中绘制这些值,这样 y 代表高度,w 代表条形的宽度。
当我使用它来绘制它时
colors = ["yellow","limegreen","green","blue","red","brown","grey","black"]
plt.bar(x, height = y, width = w, color = colors, alpha = 0.8)
接下来,我尝试对宽度进行规范化,以便条形不会相互重叠使用
w_new = [i/max(w) for i in w]
plt.bar(x, height = y, width = w_new, color = colors, alpha = 0.8)
#plt.axvline(x = ?)
plt.xlim((-0.5, 7.5))
但是,钢筋之间的间隙仍然不均匀。例如,B 和 C 之间有很大的差距。但是F和G之间没有差距。
我想绘制两个连续条之间的间隙宽度均匀或没有间隙的图。它应该如图所示:
如何在 Python 中创建这种类型的绘图?是否可以使用任何数据可视化库,例如 matplotlib、seaborn 或 Plotly?如果数据在数据框中可用,是否有任何替代方法?
此外,我想在绘图右侧添加 A、B、C 等标签,而是将条形的实际宽度作为 x 轴上的标签(例如用红色数字表示上面的 x 轴图)。我还想在距离 x 轴 50 处添加一条垂直红线。我知道这可以使用plt.axvline(x = ...) 添加但我不确定我应该将 x 声明为什么值,因为 W 的比例与 x 轴的长度不精确。
【问题讨论】:
标签: python python-3.x pandas matplotlib seaborn