Python 如何在matplotlib中居中直方图中的标签

Python 如何在matplotlib中居中直方图中的标签,python,matplotlib,Python,Matplotlib,我有以下问题。我需要在plt.hist的X轴上将标签居中。我在这里找到了一些答案:建议使用align=left/mid/right。但是,它没有给我正确的输出: plt.histdata['Col1'],align='left' plt.histdata['Col1'],align='mid' plt.histdata['Col1'],align='right' 我想把OK和18放在每个栏的中间。我怎样才能修好它 全部代码: plt.style.use('ggplot') plt.xtic

我有以下问题。我需要在plt.hist的X轴上将标签居中。我在这里找到了一些答案:建议使用align=left/mid/right。但是,它没有给我正确的输出:

plt.histdata['Col1'],align='left'

plt.histdata['Col1'],align='mid'

plt.histdata['Col1'],align='right'

我想把OK和18放在每个栏的中间。我怎样才能修好它

全部代码:

plt.style.use('ggplot')
plt.xticks(rotation='vertical')
plt.locator_params(axis='y', integer=True)
plt.suptitle('My histogram', fontsize=14, fontweight='bold')
plt.ylabel('Frequency', fontweight='bold')


plt.hist(data['Col1'], align='mid')
plt.show()
Matplotlib的带有默认参数的hist主要用于连续数据。 如果未给出任何参数,matplotlib会将值的范围划分为10个大小相同的容器

给定字符串数据时,matplotlib会在内部用数字0、1、2等替换字符串。。。。在这种情况下,ok得到值0,18 let得到值1。将该范围划分为10,将创建10个存储箱:0.0-0.1、0.1-0.2、…、0.9-1.0。钢筋放置在料仓中心0.05、0.15、…、0.95和默认对齐的“中间”。当您想要绘制更窄的条形图时,此居中功能会有所帮助。在这种情况下,除第一个和最后一个条外,所有条的高度均为0

这里是正在发生的事情的可视化。垂直线显示放置垃圾箱边界的位置

从matplotlib导入pyplot作为plt 将numpy作为np导入 作为pd进口熊猫 data=pd.DataFrame{'Col1':np.random.choice['ok','18let'],10,p=[0.2,0.8]} plt.style.使用“ggplot” 图,ax=plt子批次 ax.locator_paramsaxis='y',integer=True ax.set_ylabel'Frequency',fontwweight='bold' _计数,bin_边界,_patches=ax.histdata['Col1'] 对于bin_边界中的i: ax.axvlinei,颜色='海军',ls='-' ax.texti,1.01,f'{i:.1f}',transform=ax.get_xaxis_transform,ha='center',va='bottom',color='navy' 节目 为了更好地控制离散数据的直方图,最好在给定值周围给出明确的BIN,例如plt.hist…,BIN=[-0.5,0.5,1.5]。更好的方法是创建计数图:对单个值进行计数并绘制条形图直方图只是一种特定类型的条形图

下面是这样一个计数图的示例。请注意,numpy的return_counts=参数仅适用于1.9及更高版本

从matplotlib导入pyplot作为plt 将numpy作为np导入 作为pd进口熊猫 data=pd.DataFrame{'Col1':np.random.choice['ok','18let'],10,p=[0.2,0.8]} plt.style.使用“ggplot” plt.locator_paramsaxis='y',integer=True plt.ylabel'Frequency',fontwweight='bold' 标签,计数=np.uniquedata['Col1'],返回\u计数=True plt.bar标签、计数 节目
请注意,seaborn's能够更好地处理离散数据。使用字符串或显式设置离散=真时,会自动计算相应的存储箱。

代码?看起来你做得很对,但是你有一个额外的垃圾箱,把路线弄丢了。我把它放在下面,谢谢你的回复