sns.relplot 是一个图形级函数,它依赖于轴级函数sns.scatterplot。 sns.scatterplot 有一个参数 x_jitter 不幸的是目前没有效果(seaborn 0.11.2)。
您可以通过掌握点的位置来模拟功能,添加一些随机抖动并重新分配这些位置。
这是一个例子:
from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np
tips = sns.load_dataset("tips")
ax = sns.scatterplot(x="day", y="total_bill", hue="time", data=tips, style="sex")
for points in ax.collections:
vertices = points.get_offsets().data
if len(vertices) > 0:
vertices[:, 0] += np.random.uniform(-0.3, 0.3, vertices.shape[0])
points.set_offsets(vertices)
xticks = ax.get_xticks()
ax.set_xlim(xticks[0] - 0.5, xticks[-1] + 0.5) # the limits need to be moved to show all the jittered dots
sns.move_legend(ax, bbox_to_anchor=(1.01, 1.02), loc='upper left') # needs seaborn 0.11.2
sns.despine()
plt.tight_layout()
plt.show()
使用sns.relplot,您可以遍历所有子图:
g = sns.relplot(x="day", y="total_bill", hue="time", data=tips, style="sex")
for ax in g.axes.flat:
for points in ax.collections:
vertices = points.get_offsets().data
if len(vertices) > 0:
vertices[:, 0] += np.random.uniform(-0.3, 0.3, vertices.shape[0])
points.set_offsets(vertices)
xticks = ax.get_xticks()
ax.set_xlim(xticks[0] - 0.5, xticks[-1] + 0.5) # the limits need to be moved to show all the jittered dots
plt.show()