我正在使用seaborn 来绘制训练课程中某项活动所花费的时间值。我遇到的问题是,由于我有两个不同的组,因此我将会话 1 的 x 值设置为例如组 1 的 0.75 和组 2 的 1.25。我试图获取值 1、2 上的 xticks , 3...但我找不到办法。
我尝试将 xtick 值设置为从 1 到 10 的数字,但这会将刻度放在 x 值的前 10 个元素中,而不是 x 轴上的点 1 到 10 中:
plt.xticks(list(range(1,11)))
我使用
sns.stripplot()
来创建绘图,每个群体有多个受试者,我希望群体 1 中的受试者在蓝色范围内具有不同颜色,而群体 2 中的受试者在蓝色范围内具有不同颜色。红色的比例,这就是为什么我不能只使用 hue='population'
,因为我在每个群体中使用 hue='subject
。
使用
native_scale=True
解决了问题,所以感谢评论的人!
我可以想到两种方法来解决这个问题。第一种是手动调整,您可以在其中创建一个新列,例如
x_vals
,调整每个组的 x 值以避免重叠,然后使用这些调整后的 x 值绘制数据,然后自定义 x-使用 plt.xticks()
进行勾选,将它们与原始会话值对齐(但是最后一步可能需要 matplotlib
,这与手动调整一起,使得这个解决方案不是非常优雅或 Pythonic。
其次,将
native_scale=True
与 sns.stripplot()
结合使用可能是一种更合适的方法,这在很大程度上是因为它的简单性以及与本机数据规模的一致性。这种方法的潜在缺点是,它无法在同一 x-tick 上的不同组之间提供固有的视觉分离。这可以通过“抖动”点来克服(通过在 jitter=True
中使用 stripplot()
,尽管在这种情况下 jitter=
和 dodge=
之间可能会出现不受欢迎的相互作用。可能需要进行一些实验。其他可能的缺点这种方法对点的放置的控制有限,虽然抖动可能有所帮助,但如果数据密集,则可能会出现重叠点。