我想要类似于上图的东西,其中图表是数据的对数分布,但x轴刻度是相应间隔的原始数据值。
这是我目前拥有的。我尝试了一些想法here。但是它们似乎都是手动设置刻度值,我希望刻度值是从原始列值派生出来的。我目前的代码是非常基本的:
sns.histplot(data=df, x="MPG",log_scale=True)
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设置刻度值和标注
ax.set_xscale
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)
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)。
ax = sns.histplot(data=np.log(df["mpg"]))
hue
2条答案
按热度按时间dxxyhpgq1#
如果我没理解错的话,你有这样的东西:
并希望将其传递到对数刻度,同时保留刻度值和标签(但在对数刻度上)。
如果这是您要尝试实现的目标,则应使用
ax.set_xscale
在X轴上应用对数比例,并使用ax.set_xticks
设置刻度值和标注z4iuyo4d2#
如果我理解正确的话,您希望显示值的对数直方图:
或者:
ax = sns.histplot(data=np.log(df["mpg"]))
,如果您不想向 Dataframe 添加列,并且不需要其他海运特性(如hue
)。