我想在每个bin的中心显示x轴值。此外,这里的列 flipper_length_mm 的最小值和最大值应该分别显示在第一和最后。下面你可以找到我的尝试。
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
penguins = sns.load_dataset("penguins")
penguins = penguins.dropna()
max_n = penguins.flipper_length_mm.max()
min_n = penguins.flipper_length_mm.min()
bins = 15
step = (max_n - min_n) / bins
print(min_n, max_n, bins, step)
# 172.0 231.0 15 3.933333333333333
arr_div = np.arange(min_n + step / 2, max_n + step / 2, step=step)
arr_div_r = np.round(arr_div, 0).astype(int)
sns.histplot(data=penguins, x="flipper_length_mm", hue="sex", bins=bins, multiple="stack")
plt.xticks(arr_div, arr_div_r)
# To see the real values without rounding
# plt.xticks(arr_div)
plt.show()
使用上面的代码,居中的x刻度或x轴值不是 flipper_length_mm 列的最小值或最大值。我想将最小值显示为172,最大值显示为231。如何实现这一点?
1条答案
按热度按时间km0tfn4u1#
您可以使用次要刻度在开始和结束处添加2个特殊刻度位置。使它们更大可以避免与现有(主要)刻度重叠,并强调它们的间距不同。您还可以选择更改它们的颜色。当x轴标签被最大刻度移动时,将其填充设置为负值可以避免多余白色。
(Note由于浮点精度问题,
np.arange(start, stop, step)
有时可能包含stop
值。下面的代码在max_n
处使用stop
值,以确保滴答停止得更早。)