水平条形图中的重叠条形图

时间:2014-11-15 21:14:14

标签: python graph matplotlib

我正在使用来自
的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()

目前,图表看起来像这样 Overlapped bars in Graph

2 个答案:

答案 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以获得最佳清晰的条形图。因为如果数字更大,则最终目标就是条形图的清晰和更大。