轴内特定坐标处的直方图

时间:2017-10-11 15:37:34

标签: python matplotlib python-3.6

我想用Python 3.6实现的是这样的: Histogram and scatter on same axes

显然是在油漆中制作并且在xAxis上丢失了一些刻度。这样的事情可能吗?基本上,我可以控制完全在哪里绘制直方图(以及以什么方向)?

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

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)

2 个答案:

答案 0 :(得分:0)

一种。使用两个轴

没有理由不使用两个不同的轴。可以使用两个不同的轴轻松复制问题中的图:

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()

enter image description here

B中。使用单轴

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

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()

enter image description here

答案 1 :(得分:0)

您可能对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

产生这个: enter image description here

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