轴内特定坐标处的直方图

Histogram at specific coordinates inside axes

我想用 Python 3.6 实现的是这样的:

显然是用油漆制作的,在 x 轴上缺少一些刻度。这样的事情可能吗?本质上,我可以精确地 控制绘制直方图的位置(以及方向)吗?

我特别希望它们像上图一样位于相同轴上,而不是在单独的轴或子图中。

fig = plt.figure()
ax2Handler = fig.gca()
ax2Handler.scatter(np.array(np.arange(0,len(xData),1)), xData)
ax2Handler.hist(xData,bins=60,orientation='horizontal',normed=True)

这种方法和其他方法(反转坐标轴)没有给我任何结果。 xData 从熊猫数据框加载。

# This also doesn't work as intended
fig = plt.figure()
axHistHandler = fig.gca()
axScatterHandler = fig.gca()
axHistHandler.invert_xaxis()
axHistHandler.hist(xData,orientation='horizontal')
axScatterHandler.scatter(np.array(np.arange(0,len(xData),1)), xData)

一个。使用两个轴

没有理由不使用两个不同的轴。问题的情节可以很容易地用两个不同的轴重现:

import numpy as np
import matplotlib.pyplot as plt
plt.style.use("ggplot")
xData = np.random.rand(1000)

fig,(ax,ax2)= plt.subplots(ncols=2, sharey=True)
fig.subplots_adjust(wspace=0)

ax2.scatter(np.linspace(0,1,len(xData)), xData, s=9)
ax.hist(xData,bins=60,orientation='horizontal',normed=True)
ax.invert_xaxis()
ax.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax2.tick_params(axis="y", left=0)

plt.show()

乙。使用单轴

只是为了回答这个问题:为了在同一轴上绘制两者,可以将条的长度向左移动,有效地给出镜像直方图。

import numpy as np
import matplotlib.pyplot as plt
plt.style.use("ggplot")
xData = np.random.rand(1000)

fig,ax= plt.subplots(ncols=1)
fig.subplots_adjust(wspace=0)

ax.scatter(np.linspace(0,1,len(xData)), xData, s=9)
xlim1 = ax.get_xlim()
_,__,bars = ax.hist(xData,bins=60,orientation='horizontal',normed=True)

for bar in bars:
    bar.set_x(-bar.get_width())

xlim2 = ax.get_xlim()
ax.set_xlim(-xlim2[1],xlim1[1])

plt.show()

您可能对 seaborn 联合图感兴趣:

# Import and fake data
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(2,1000)
# actual plot
jg = sns.jointplot(data[0], data[1], marginal_kws={"bins":100})
jg.ax_marg_x.set_visible(False) # remove the top axis
plt.subplots_adjust(top=1.15) # fill the empty space

产生这个:

查看 Seaborn 中提供的 bivariate distribution representations 的更多示例。