pandas - seaborn.histplot() 中的 log_scale = True

标签 pandas seaborn

我只是想知道将 log_scale=True 放入其中

sns.histplot(data, log_scale=True)

这是否意味着数据通过对数函数进行转换,或者它们保持不变,只是如何绘制的问题?

非常感谢,

詹姆斯

最佳答案

数据保持原样,但在对数刻度 x 轴上绘制时,直方图的箱边缘计算为均匀分布。此外,x 轴会自动绘制为对数刻度。

这里是一些代码,将 log_scale=True 与通过单独计算 bin 边缘进行模拟的方式进行比较。左图的代码是 this example 的简化.

import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter
import seaborn as sns

sns.set_theme(style="ticks")
diamonds = sns.load_dataset("diamonds")

fig, axs = plt.subplots(ncols=2, figsize=(12, 5))
sns.despine(fig)

sns.histplot(diamonds, x="price",
             edgecolor=".3", linewidth=.5, log_scale=True, ax=axs[0])
axs[0].set_title("setting 'log_scale=True'")

sns.histplot(diamonds, x="price",
             bins=np.logspace(np.log10(diamonds["price"].min()), np.log10(diamonds["price"].max()), 46),
             edgecolor=".3", linewidth=.5, log_scale=False, ax=axs[1])
axs[1].set_xscale('log')
axs[1].set_title("mimicking 'log_scale=True'")

for ax in axs:
    ax.xaxis.set_major_formatter(ScalarFormatter())
    ax.set_xticks([500, 1000, 2000, 5000, 10000])

plt.show()

sns.histplot with log_scale=True

PS:在内部,seaborn 使用 numpy 的 histogram_bin_edges计算垃圾箱,例如:

bins=np.power(10, np.histogram_bin_edges(np.log10(diamonds["price"]), bins='auto'))

关于pandas - seaborn.histplot() 中的 log_scale = True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69573823/

相关文章:

python - 如何连接两个具有不同大小的相似索引的 pandas DataFrame

python - Pandas:如何打印 groupby 值

python - 在 seaborn 中结合两个热图

python - Seaborn FacetGrid PointPlot 添加 1 条网格线

python - Pandas 子图布局在这种情况下不起作用

python - Seaborn PointPlot 类别排序问题

python - 标记数据时出错。 C 错误 : Expected n fields in line j, 通过忽略额外列看到 k 修复了吗?

pandas - 如何合并不完整列上的两个数据集?

python - 如何删除值顺序不重要的数据框中的行

python - 未应用 Matplotlib 样式