Dev*_*vil 3 python matplotlib seaborn jupyter jupyter-notebook
我希望将分类变量可视化为seaborn stripplot 中的标记样式,但这似乎并不容易。是否有捷径可寻。例如,我正在尝试运行这段代码
tips = sns.load_dataset("tips")
sns.stripplot(x="day", y="total_bill", hue="time", style="sex", jitter=True, data=tips)
Run Code Online (Sandbox Code Playgroud)
这失败了。另一种方法是使用 relplot,它确实提供了选项,但无法插入,jitter这使得可视化效果不太好。
sns.relplot(x="day", y="total_bill", hue="time", data=tips, style="sex")
Run Code Online (Sandbox Code Playgroud)
提供此的作品
有没有办法使用 stripplot/catplot/swarmplot 来做到这一点?
编辑:这个问题是相关的。然而,那里的解决方案似乎不允许生成尺寸图例(并且相当过时)。
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()
Run Code Online (Sandbox Code Playgroud)
您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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3147 次 |
| 最近记录: |