我正在使用来自
的mathplotlib生成水平条形图
所以:How to plot multiple horizontal bars in one chart with matplotlib。问题是当我有超过2个水平条时,条形图会重叠。不确定,我做错了什么。
以下是图表代码
import pandas
import matplotlib.pyplot as plt
import numpy as np
df = pandas.DataFrame(dict(graph=['q1','q2','q3' , 'q4','q5',' q6'],
n=[3, 5, 2,3 ,5 , 2], m=[6, 1, 3, 6 , 1 , 3]))
ind = np.arange(len(df))
width = 0.4
opacity = 0.4
fig, ax = plt.subplots()
ax.barh(ind, df.n, width, alpha=opacity, color='r', label='Existing')
ax.barh(ind + width, df.m, width, alpha=opacity,color='b', label='Community')
ax.barh(ind + 2* width, df.m, width, alpha=opacity,color='g', label='Robust')
ax.set(yticks=ind + width , yticklabels=df.graph, ylim=[2*width - 1, len(df)])
ax.legend()
#plt.xlabel('Queries')
plt.xlabel('Precesion')
plt.title('Precesion for these queries')
plt.show()
目前,图表看起来像这样
答案 0 :(得分:2)
您可以将条形的宽度设置为0.4,但每组中有三个条形。这意味着每组的宽度为1.2。但是你只设置1个单位的刻度,所以你的酒吧不适合空格。
由于您使用的是熊猫,因此您并不需要这么做。只需执行df.plot(kind='barh')
,您将获得数据框数据的水平条形图。您可以使用文档中的plot
各种参数来调整显示颜色等。 (如果要将“图形”列用作y轴标签,请将其设置为索引:df.set_index('graph').plot(kind='barh')
)
(使用df.plot
会给每个组只有两个条形的条形图,因为您的DataFrame只有两个数字列。在您的示例中,您将列m
绘制了两次,这似乎不太如果你真的想这样做,你可以在DataFrame中添加一个重复的列。)
答案 1 :(得分:0)
ax=df.plot.barh(width=0.85,figsize=(15,15))
调整宽度(应小于1,否则应重叠)和figsize以获得最佳清晰的条形图。因为如果数字更大,则最终目标就是条形图的清晰和更大。