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

2024-05-21 00:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

plt.hist(data['Col1'], align='left')enter image description here

plt.hist(data['Col1'], align='mid')enter image description here

plt.hist(data['Col1'], align='right')enter image description here

<>我想在每个栏的中间有^ {< CD5>}和^ {CD6>}。我怎样才能修好它

全部代码:

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()

Tags: 答案rightdataplt标签lefthisthow
1条回答
网友
1楼 · 发布于 2024-05-21 00:35:05

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)和默认对齐的'mid'。(当您想要绘制更窄的条形图时,这种居中方式会有所帮助。)在这种情况下,除第一个和最后一个条形图外,所有条形图都将具有高度0

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

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd

data = pd.DataFrame({'Col1': np.random.choice(['ok', '18 let'], 10, p=[0.2, 0.8])})

plt.style.use('ggplot')
fig, ax = plt.subplots()
ax.locator_params(axis='y', integer=True)
ax.set_ylabel('Frequency', fontweight='bold')

_counts, bin_boundaries, _patches = ax.hist(data['Col1'])
for i in bin_boundaries:
    ax.axvline(i, color='navy', ls=' ')
    ax.text(i, 1.01, f'{i:.1f}', transform=ax.get_xaxis_transform(), ha='center', va='bottom', color='navy')
plt.show()

visualizing  plt.hist

为了更好地控制离散数据的柱状图,最好在给定值(例如plt.hist(..., bins=[-0.5, 0.5, 1.5]))周围给出明确的BIN。更好的方法是创建计数图:计算各个值并绘制条形图(柱状图只是一种特定类型的条形图)

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

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd

data = pd.DataFrame({'Col1': np.random.choice(['ok', '18 let'], 10, p=[0.2, 0.8])})

plt.style.use('ggplot')
plt.locator_params(axis='y', integer=True)
plt.ylabel('Frequency', fontweight='bold')

labels, counts = np.unique(data['Col1'], return_counts=True)
plt.bar(labels, counts)
plt.show()

bar plot with counts

请注意,seaborn的^{}可以更好地处理离散数据。使用字符串或显式设置discrete=True时,会自动计算相应的存储箱

相关问题 更多 >