Python 水平条形图中的重叠条

Python 水平条形图中的重叠条,python,graph,matplotlib,Python,Graph,Matplotlib,我正在使用mathplotlib从 所以:。问题是当我有两个以上的横条时,横条会重叠。不确定,我做错了什么。 下面是下面的图形代码 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],

我正在使用mathplotlib从
所以:。问题是当我有两个以上的横条时,横条会重叠。不确定,我做错了什么。 下面是下面的图形代码

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.4,但每组有三条条形。这意味着每组的宽度为1.2。但是你只将刻度设置为1个单位,所以你的条不适合空间

既然你用的是熊猫,你真的不需要这么做。只需执行
df.plot(kind='barh')
就可以得到数据帧数据的水平条形图。您可以通过使用文档中提供的各种参数来
绘图
,调整显示颜色等。(如果希望“图形”列用作y轴标签,请将其设置为索引:
df.set_index('graph').plot(kind='barh')

(使用
df.plot
将给出一个每组只有两个条形图的条形图,因为您的数据框只有两个数字列。在您的示例中,您将列
m
打印了两次,这似乎不是很有用。如果您真的想这样做,可以在数据框中添加一个重复的列。)

ax=df.plot.barh(宽度=0.85,figsize=(15,15))


调整宽度(应小于1,否则重叠)和figsize以获得最佳和清晰的条形图。因为如果图形更大,您可以获得更清晰和更大的条形图,这是最终目标。

唯一的问题是我无法在yaxis端命名元素。它只是枚举。我需要添加自定义名称,而不是yaxis中的0,1,2。我在文档中找不到这一点怎么做?有什么想法吗?@Rahul:如果你设置索引,它将自动用于标签。do
df.set_index('graph')。plot(kind='barh'))
.nah,这对我来说不太合适。如果我希望标签是yaxis上的q1、q2和q3,那么pandas期望的是q1的值。事实并非如此。我只想标记它们,而不是枚举它。@Rahul:我不太明白你在说什么,但你可以用类似
pyplot.gca()的东西设置刻度标签.yaxis.set_ticklabels([“A”、“B”、“C”、“D”、“E”、“F”)
。通过谷歌搜索“matplotlib tick labels”或类似内容,您可以找到大量有关如何执行此类操作的信息。