我正在尝试重新创建下图的主要功能:
(摘自E.M. Ozbudak,M。Thattai,I。Kurtser,A.D。Grossman和A. van Oudenaarden,Nat Genet 31,69(2002))
seaborn.jointplot
满足了我的大部分需求,但似乎无法使用折线图,也没有明显的方法可以沿x轴隐藏直方图。有没有办法让jointplot
做我需要的事情?除此以外,还有其他合理简单的方法可以使用Seaborn创建这种情节吗?
答案 0 :(得分:1)
您可以使用ax_marg_x.patches
来影响结果。
在这里,我用它来将x轴图变成白色,以便看不到它(尽管它的余量仍然存在):
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="white", color_codes=True)
x, y = np.random.multivariate_normal([2, 3], [[0.3, 0], [0, 0.5]], 1000).T
g = sns.jointplot(x=x, y=y, kind="hex", stat_func=None, marginal_kws={'color': 'green'})
plt.setp(g.ax_marg_x.patches, color="w", )
plt.show()
输出:
答案 1 :(得分:1)
这是一种创建与问题中所示大致相同的图的方法。您可以在两个子图之间共享轴,并使宽度比不对称。
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(42)
x = np.linspace(0,8, 300)
y = np.tanh(x)+np.random.randn(len(x))*0.08
fig, (ax, axhist) = plt.subplots(ncols=2, sharey=True,
gridspec_kw={"width_ratios" : [3,1], "wspace" : 0})
ax.plot(x,y, color="k")
ax.plot(x,np.tanh(x), color="k")
axhist.hist(y, bins=32, ec="k", fc="none", orientation="horizontal")
axhist.tick_params(axis="y", left=False)
plt.show()
答案 2 :(得分:1)
事实证明,您可以通过直接与基础JointGrid
对象一起工作来产生具有所需特征的修改后的jointplot
:
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
x = np.linspace(0,8, 300)
y = (1 - np.exp(-x*5))*.5
ynoise= y + np.random.randn(len(x))*0.08
grid = sns.JointGrid(x, ynoise, ratio=3)
grid.plot_joint(plt.plot)
grid.ax_joint.plot(x, y, c='C0')
plt.sca(grid.ax_marg_y)
sns.distplot(grid.y, kde=False, vertical=True)
# override a bunch of the default JointGrid style options
grid.fig.set_size_inches(10,6)
grid.ax_marg_x.remove()
grid.ax_joint.spines['top'].set_visible(True)
输出: