<p>要创建一个直方图,其中四舍五入到2位小数的值定义了箱子,可以在这些值中间创建箱子边。例如<code>0.195</code>和<code>0.205</code>处的箱子边缘将定义<code>0.20</code>周围的箱子。您可以使用'np.arange(-0.005,1.01,0.01)'创建具有这些容器边缘的数组</p>
<p>为了只在使用的位置设置记号标签,可以使用<code>ax.set_yticks()</code>。可以对所有y值进行舍入,并对y记号使用唯一的值</p>
<p>如果不需要舍入,而需要截断,可以使用<code>bins=np.arange(0, 1.01, 0.01)</code>和<code>ax.set_yticks(np.unique(np.round(y-0.005, 2)))</code></p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
import seaborn as sns
y = np.array([0.96270, 0.93870, 0.93610, 0.69610, 0.61250, 0.61280, 0.52965, 0.50520])
ax = sns.histplot(y=y, bins=np.arange(-0.005, 1.01, 0.01), color='crimson')
ax.set_yticks(np.unique(np.round(y, 2)))
ax.xaxis.set_major_locator(MaxNLocator(integer=True))
ax.tick_params(axis='y', labelsize=6)
ax.set_xlabel("frequency", fontsize=15)
ax.set_ylabel("results", fontsize=15)
plt.show()
</code></pre>
<p>请注意,即使字体大小较小,记号标签也可能重叠</p>
<p><a href="https://i.stack.imgur.com/6Xopk.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/6Xopk.png" alt="histplot with only tick labels at nonzero positions"/></a></p>
<p>另一种方法是对舍入(或截断)的值使用<code>countplot</code>。然后,条间距均匀,不考虑空点:</p>
<pre class="lang-py prettyprint-override"><code>y = np.array([0.96270, 0.93870, 0.93610, 0.69610, 0.61250, 0.61280, 0.52965, 0.50520])
y_rounded = [f'{yi:.2f}' for yi in sorted(y)]
# y_truncated = [f'{yi - .005:.2f}' for yi in sorted(y)]
ax = sns.countplot(y=y_rounded, color='dodgerblue')
ax.xaxis.set_major_locator(MaxNLocator(integer=True))
</code></pre>
<p><a href="https://i.stack.imgur.com/0Mx55.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/0Mx55.png" alt="countplot for values rounded to 2 decimals"/></a></p>