由于我的数据的性质,我有两个年龄组进行了两次测试。重要的是,我有一种方法来可视化整个样本的行为(箱线图)以及每个个体在会话之间的变化(Swarmplot/Lineplot)。
当不使用色调或组时,只需连续使用这三个函数,或者跳过linepot,就像这里(Swarmplot with connected dots);但由于我使用色调来区分不同的组,我还没有设法将每个主题的前和后的数据点连接起来。
到目前为止,我已经实现了绘制线条,但它们没有与箱线图对齐,而是与“Pre”和“Post”条件的刻度对齐:
下图显示了四个箱线图(pre_young、pre_old和post_young、post_old),数据点与每个箱线图对齐,但线与“Pre”和“Post”的刻度对齐,而不是与实际数据点或箱线图的中间对齐。
我是通过这个代码得到的:
fig, ax = plt.subplots(figsize=(7,5))
sns.boxplot(data=test_data,
x="Session",
y="Pre_Post",
hue="Age",
palette="pastel",
boxprops=boxprops,
ax=ax)
sns.swarmplot(data=test_data,
x="Session",
y="Pre_Post",
hue="Age",
dodge=True,
palette="dark",
ax=ax)
sns.lineplot(data=test_data,
x="Session",
y="Pre_Post",
hue="Age",
estimator=None,
units="Subject",
style="Age",
markers=True,
palette="dark",
ax=ax)
plt.title("Test")
plt.xlabel("Session")
plt.ylabel("Score")
# Move the legend outside the plot
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plt.show()
我也试着通过以下方法得到点的坐标:
points = ax.collections[0]
offsets = points.get_offsets()
x_coords = offsets[:, 0]
y_coords = offsets[:, 1]
但我无法将每个坐标与它们所涉及的主题联系起来。
我正在添加一个数据集的样本,如果它能帮助你帮助我。它是csv格式的:
'Session,Subject,Age,Pre_Post\nPre,SY01,young,14.0\nPre,SY02,young,14.0\nPre,SY03,young,13.0\nPre,SY04,young,13.0\nPre,SY05,young,13.0\nPre,SY06,young,15.0\nPre,SY07,young,14.0\nPre,SY08,young,14.0\nPre,SA01,old,5.0\nPre,SA02,old,1.0\nPre,SA03,old,10.0\nPre,SA04,old,3.0\nPre,SA05,old,9.0\nPre,SA06,old,5.0\nPre,SA07,old,13.0\nPre,SA08,old,13.0\nPost,SY01,young,14.0\nPost,SY02,young,13.0\nPost,SY03,young,14.0\nPost,SY04,young,13.0\nPost,SY05,young,15.0\nPost,SY06,young,13.0\nPost,SY07,young,15.0\nPost,SY08,young,14.0\nPost,SA01,old,6.0\nPost,SA02,old,2.0\nPost,SA03,old,10.0\nPost,SA04,old,7.0\nPost,SA05,old,8.0\nPost,SA06,old,11.0\nPost,SA07,old,14.0\nPost,SA08,old,11.0\n'
2条答案
按热度按时间dced5bon1#
这将工作:
我们可以讨论这个图的优点。它肯定是混乱的,可能会更好地在两个单独的轴上分裂,减少数据相互重叠。我个人不认为条形图更好。之前/之后的线图可以很好地讲述故事。例如,在one below that I found on google中,我更喜欢在条形图中看这个~40对条形图:
bnlyeluc2#
swarmplot
放在boxplot
上,因为它提供了有关发行版的其他信息。'Subject'
的'Score'
变化,一个barplot
更合适。'Age'
组。'Age'
的每个标记添加从'Pre'
到'Post'
的趋势线,这会导致plot难以读取**,即使是数据的一个小子集**。lineplot
无法与从swarmplot
开始的标记对齐。导入和数据
old
young
绘图
figsize
元组中的第二个数字以增加图的长度,并调整height_ratios
中的第二个数字以使条形图使用更多的图形。可视化易读