2015-07-21 90 views
3

我有两个pandas数据框我想绘制在相同的seaborn jointplot。它看起来是这样的(命令是不要在IPython的壳; ipython --pylab):在seaborn.jointplot中绘制两个分布

import pandas as pd 
import seaborn as sns 
iris = sns.load_dataset('iris') 
df = pd.read_csv('my_dataset.csv') 
g = sns.jointplot('sepal_length', 'sepal_width', iris) 

在两个dataframes的密钥是相同的。
如何绘制我的值在同一个阴谋(当然不同的颜色)?甚至更详细:我如何绘制两个数据集,但只有第一个分布在顶部和侧面?即只绘制点。

+0

我怀疑这是最好的方式,但你可以使用pairplot'的'了'hue'选项来获得不同的颜色(第一合并后数据集)。 http://stanford.edu/~mwaskom/software/seaborn/examples/scatterplot_matrix.html – JohnE

+0

顺便说一下,现在推荐在启动ipython之后使用'%matplotlib inline',而不是用'--pylab'调用。 – JohnE

+0

什么是'--pylab'和'%matplotlib inline'之间的区别? –

回答

13

以下是修改sns.JointGrid的基础数据的方法。

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns 

# simulate some artificial data 
# ======================================== 
np.random.seed(0) 
data1 = np.random.multivariate_normal([0,0], [[1,0.5],[0.5,1]], size=200) 
data2 = np.random.multivariate_normal([0,0], [[1,-0.8],[-0.8,1]], size=100) 

# both df1 and df2 have bivaraite normals, df1.size=200, df2.size=100 
df1 = pd.DataFrame(data1, columns=['x1', 'y1']) 
df2 = pd.DataFrame(data2, columns=['x2', 'y2']) 


# plot 
# ======================================== 
graph = sns.jointplot(x=df1.x1, y=df1.y1, color='r') 

graph.x = df2.x2 
graph.y = df2.y2 
graph.plot_joint(plt.scatter, marker='x', c='b', s=50) 

enter image description here

+0

谢谢。这工作完美! :) –

+0

@DanielThaagaardAndreasen你是最受欢迎的。很高兴它有帮助。 :-) –

+7

怎样才能在边上的直方图中显示第二个分布? – user1834164

1

可能更容易绘制jointplot,更改到您要画的东西,使用再正常pyplot或基于轴seaborn地块轴后:

g=sns.jointplot(...) 
plt.sca("axis_name") 
plt.plot/plt.scatter/.../sns.kde(ax="axis_name") 

轴名称可以是2d-Plot的ax_joint,或者是边上的1d Plots的ax_marg_x或ax_marg_y。另外,如果你想使用jointplot结构,但是用pyplot绘制所有的图形,使用cla函数,例如,为清除二维绘图:

g.ax_joint.cla()