matplotlib 如何在x轴上显示原始值而不是对数直方图中的对数值

j5fpnvbx  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(189)


我想要类似于上图的东西,其中图表是数据的对数分布,但x轴刻度是相应间隔的原始数据值。


这是我目前拥有的。
我尝试了一些想法here。但是它们似乎都是手动设置刻度值,我希望刻度值是从原始列值派生出来的。
我目前的代码是非常基本的:

sns.histplot(data=df, x="MPG",log_scale=True)
dxxyhpgq

dxxyhpgq1#

如果我没理解错的话,你有这样的东西:

X = np.random.normal(loc=50, scale=10, size=1000)

fig, ax = plt.subplots(figsize=(10, 6))
ax.hist(X, range(20, 90, 5), ec="k")

并希望将其传递到对数刻度,同时保留刻度值和标签(但在对数刻度上)。
如果这是您要尝试实现的目标,则应使用ax.set_xscale在X轴上应用对数比例,并使用ax.set_xticks设置刻度值和标注

fig, ax = plt.subplots(figsize=(10, 6))
ax.hist(X, range(20, 90, 5), ec="k")

ax.set_xscale("log")

ticks_range = range(20, 90, 10)  # The ticks values you want here.
ax.set_xticks(ticks_range, ticks_range)

z4iuyo4d

z4iuyo4d2#

如果我理解正确的话,您希望显示值的对数直方图:

from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np

df = sns.load_dataset('mpg')

df['log mpg'] = np.log10(df['mpg'])
ax = sns.histplot(data=df, x="log mpg")

plt.tight_layout()
plt.show()

或者:ax = sns.histplot(data=np.log(df["mpg"])),如果您不想向 Dataframe 添加列,并且不需要其他海运特性(如hue)。

相关问题