我只是想知道将 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()
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/