web-dev-qa-db-ja.com

seaborn.jointplotで2つの分布をプロットする

2つのpandasデータフレームがあり、同じ海底にプロットしたい jointplot 。それはこのようなものです(コマンドはIPython Shellにありません; ipython --pylab):

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)

2つのデータフレームのキーは同じです。
値を同じプロット(もちろん異なる色)にプロットするにはどうすればよいですか?さらに詳細:両方のデータセットをプロットするにはどうすればよいですか。つまりドットのみをプロットします。

これは、sns.JointGridの基礎となるデータを変更することによって行う1つの方法です。

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

19
Jianxun Li

Jointplotを描画した後、何かを描画したい軸に変更して、通常のPyplotまたは軸ベースのSeabornプロットを使用する方が簡単な場合があります。

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

軸名は、2dプロットの場合はax_joint、側面の1dプロットの場合はax_marg_xまたはax_marg_yのいずれかです。

さらに、jointplot構造を使用してすべてのプロットをpyplotでプロットする場合は、関数claを使用します。 2Dプロットをクリアする場合:

g.ax_joint.cla()
1
Guiste