我正在尝试构建一个简单的直方图。出于某种原因,我的酒吧表现异常。正如你在这张照片中所看到的,我的酒吧超过" 3"移到右侧。我不确定是什么造成的。我做了对齐=' mid'但它没有解决它。
这是我用来创建它的代码:
def createBarChart(colName):
df[colName].hist(align='mid')
plt.title(str(colName))
RUNS = [1,2,3,4,5]
plt.xticks(RUNS)
plt.show()
for column in colName:
createBarChart(column)
这就是我得到的: bar is not centered over 3
要重新创建我的数据:
df = pd.DataFrame(np.random.randint(1,6,size=(100, 4)), columns=list('ABCD'))
感谢您的帮助!
P / s:如果此信息相关,则为idk,但我使用的是seaborn-whitegrid样式。我试图重新创建一个包含样本数据的图表,但它仍然显示出来。这是一个错误吗?
答案 0 :(得分:1)
hist
函数的行为完全符合预期。默认情况下,它会将您传递的数据拆分为10个区间,第一个区域的左边缘位于数据的最小值,最后一个区域的右边缘位于最大值。下图显示了以这种方式分组的随机生成的数据,用红色虚线标记了分档的边缘。
解决这个问题的方法是自己定义bin边缘,稍微调整最小值和最大值,使条形在x轴刻度上居中。这可以通过numpy的linspace
函数轻松完成(以随机生成的数据框中的A列为例):
bins = np.linspace(df["A"].min() - .5, df["A"].max() + .5, 6)
df["A"].hist(bins=bins)
我们要求6个值,因为我们正在定义bin edge ,这将产生5个bin,如下图所示:
如果你想保持条形之间的间隙,你可以将区间数增加到9并略微调整偏移量,但这并不适用于所有情况(因为每个值都是1,所以这里有效) 2,3,4或5)。
bins = np.linspace(df["A"].min() - .25, df["A"].max() + .25, 10)
df["A"].hist(bins=bins)
最后,由于此数据包含离散值并且您正在绘制计数,因此可以使用value_counts
函数创建一个系列,然后将其绘制为条形图:
df["A"].value_counts().sort_index().plot(kind="bar")
# Provide a 'color' argument if you need all of the bars to look the same.
df["A"].value_counts().sort_index().plot(kind="bar", color="steelblue")
答案 1 :(得分:0)
尝试在代码中使用类似的东西来创建所有直方图条到同一个地方。
plt.hist("Your data goes here", bins=range(1,7), align='left', rwidth=1, normed=True)
将数据放在您的数据到此处
的位置