log2 轴不适用于 matplotlib/seaborn 中的直方图
log2 axis doesn't work for histograms in matplotlib/seaborn
在使用 matplotlib/seaborn 绘制直方图时,我想将 x-axis 更改为 log2 比例。绘制的数据是 here
当我取值的 log2 并制作直方图时它可以工作,但是如果我绘制未记录的值并使用 set_xscale
更改 x-axis,它会给出错误的结果。代码是:
import numpy as np
import seaborn as sns
import matplotlib.pylab as plt
df = pandas.read_table("data.csv",sep="\t")
plt.figure()
sns.set_style("ticks")
ax1 = plt.subplot(2, 1, 1)
plt.hist(df["y"])
ax1.set_xscale("log", basex=2)
ax2 = plt.subplot(2, 1, 2)
plt.hist(np.log2(df["y"]))
情节:
这是一个错误还是我错误地更改了轴?
两者都不是!看看如果你增加垃圾桶的数量会发生什么:
plt.hist(df["y"], bins = 300)
ax1.set_xscale("log", basex=2)
ax2 = plt.subplot(2, 1, 2)
plt.hist(np.log2(df["y"]), bins=300)
直方图的数据与相同,但 bin 大小分布在顶部情况下仍然是线性的。
如何使两个案例理想化?将日志 space 中的自定义 bin 大小传递给 plt.hist
:
plt.figure()
sns.set_style("ticks")
ax1 = plt.subplot(2, 1, 1)
logbins = np.logspace(np.log2(df["y"].min()),
np.log2(df["y"].max()),
300, base=2)
plt.hist(df["y"], bins = logbins)
ax1.set_xscale("log", basex=2)
ax2 = plt.subplot(2, 1, 2)
plt.hist(np.log2(df["y"]), bins=300)
这两个情节之间还有一些细微的差别,但我相信它们与你原来的问题无关。
在使用 matplotlib/seaborn 绘制直方图时,我想将 x-axis 更改为 log2 比例。绘制的数据是 here
当我取值的 log2 并制作直方图时它可以工作,但是如果我绘制未记录的值并使用 set_xscale
更改 x-axis,它会给出错误的结果。代码是:
import numpy as np
import seaborn as sns
import matplotlib.pylab as plt
df = pandas.read_table("data.csv",sep="\t")
plt.figure()
sns.set_style("ticks")
ax1 = plt.subplot(2, 1, 1)
plt.hist(df["y"])
ax1.set_xscale("log", basex=2)
ax2 = plt.subplot(2, 1, 2)
plt.hist(np.log2(df["y"]))
情节:
这是一个错误还是我错误地更改了轴?
两者都不是!看看如果你增加垃圾桶的数量会发生什么:
plt.hist(df["y"], bins = 300)
ax1.set_xscale("log", basex=2)
ax2 = plt.subplot(2, 1, 2)
plt.hist(np.log2(df["y"]), bins=300)
直方图的数据与相同,但 bin 大小分布在顶部情况下仍然是线性的。
如何使两个案例理想化?将日志 space 中的自定义 bin 大小传递给 plt.hist
:
plt.figure()
sns.set_style("ticks")
ax1 = plt.subplot(2, 1, 1)
logbins = np.logspace(np.log2(df["y"].min()),
np.log2(df["y"].max()),
300, base=2)
plt.hist(df["y"], bins = logbins)
ax1.set_xscale("log", basex=2)
ax2 = plt.subplot(2, 1, 2)
plt.hist(np.log2(df["y"]), bins=300)
这两个情节之间还有一些细微的差别,但我相信它们与你原来的问题无关。