このコードを here から少し変更しました:
_import seaborn as sns
sns.set(style="darkgrid")
tips = sns.load_dataset("tips")
color = sns.color_palette()[5]
g = sns.jointplot("total_bill", "tip", data=tips, kind="reg", stat_func=None,
xlim=(0, 60), ylim=(0, 12), color='k', size=7)
g.set_axis_labels('total bill', 'tip', fontsize=16)
_
見栄えの良いプロットが表示されます。ただし、私の場合は、個々のポイントの色と形式を変更できる必要があります。
キーワードmarker
、style
、fmt
を使用してみましたが、エラーTypeError: jointplot() got an unexpected keyword argument
が発生します。
これを行う正しい方法は何ですか? _sns.JointGrid
_を呼び出してデータと限界分布を手動でプロットすることは避けたいです。
この問題を解決することは、周辺分布を維持したかったことを除いて、matplotlib(異なるマーカーと色で散布図をプロットすること)とほとんど同じです。
import seaborn as sns
from itertools import product
sns.set(style="darkgrid")
tips = sns.load_dataset("tips")
color = sns.color_palette()[5]
g = sns.jointplot("total_bill", "tip", data=tips, kind="reg", stat_func=None,
xlim=(0, 60), ylim=(0, 12), color='k', size=7)
#Clear the axes containing the scatter plot
g.ax_joint.cla()
#Generate some colors and markers
colors = np.random.random((len(tips),3))
markers = ['x','o','v','^','<']*100
#Plot each individual point separately
for i,row in enumerate(tips.values):
g.ax_joint.plot(row[0], row[1], color=colors[i], marker=markers[i])
g.set_axis_labels('total bill', 'tip', fontsize=16)
これは私にこれを与えます:
これで回帰直線はなくなりましたが、これで十分です。
受け入れられた答えは複雑すぎます。 plt.sca()
を使用すると、これをより簡単な方法で行うことができます。
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.jointplot("total_bill", "tip", data=tips, kind="reg", stat_func=None,
xlim=(0, 60), ylim=(0, 12))
g.ax_joint.cla() # or g.ax_joint.collections[0].set_visible(False), as per mwaskom's comment
# set the current axis to be the joint plot's axis
plt.sca(g.ax_joint)
# plt.scatter takes a 'c' keyword for color
# you can also pass an array of floats and use the 'cmap' keyword to
# convert them into a colormap
plt.scatter(tips.total_bill, tips.tip, c=np.random.random((len(tips), 3)))
キーワードjoint_kws
(seaborn 0.8.1でテスト済み)のおかげで、引数のリストで直接正確にすることもできます。必要に応じて、marginal_kws
を使用してマージナルのプロパティを変更することもできます
したがって、コードは次のようになります。
import seaborn as sns
colors = np.random.random((len(tips),3))
markers = (['x','o','v','^','<']*100)[:len(tips)]
sns.jointplot("total_bill", "tip", data=tips, kind="reg",
joint_kws={"color":colors, "marker":markers})
seaborn/categorical.py
_で_def swarmplot
_を見つけます。marker='o'
_の前にパラメータ_**kwargs
_を追加しますkwargs.update
_に_marker=marker
_を追加します。次に、たとえばMatplotlib sns.swarmplot()
の場合と同様に、plt.scatter()
を使用してプロットするときに、パラメータとして_marker='x'
_を使用します。
ちょうど同じ必要性に遭遇し、marker
をkwarg
として使用しても機能しませんでした。だから私は簡単に見ていた。他のパラメーターも同様の方法で設定できます。 https://github.com/ccneko/seaborn/blob/master/seaborn/categorical.py
ここで必要なのはわずかな変更だけですが、クイックリファレンス用のGitHub forkページがあります;)
もう1つのオプションは、jointGridを使用することです。これは、jointplotがその使用を簡単にするラッパーであるためです。
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.JointGrid("total_bill", "tip", data=tips)
g = g.plot_joint(plt.scatter, c=np.random.random((len(tips), 3)))
g = g.plot_marginals(sns.distplot, kde=True, color="k")