如何在 Python/Pylab/Seaborn/Plotly 中创建比较散点图 plot/swarm?

How to create a comparative scatter plot/swarm plot in Python/Pylab/Seaborn/Plotly?

对于最小的、可重现的示例 (reprex),我们假设我在以下数据结构中有动物的反应时间(秒),保存在 .csv 文件中。该文件名为 "ReactionTimes.csv"

"Birds","Mammals"
1.15878,1.494555
1.418479,1.738676
1.034765,1.541106
1.310064,1.328025
1.087671,1.583186
1.001802,1.770486

到目前为止我无法从这里调整解决方案 到我的数据结构,因此我的代码如下所示:

import pandas as pd
import pylab as plt
import seaborn as sns

RT = pd.read_csv('ReactionTimes.csv')

print(RT) 正确打印 table。

命令 sns.scatterplot(RT["Birds"],RT["Mammals"])sns.swarmplot(RT["Birds"],RT["Mammals"]) 生成了绘图,但这些绘图看起来不像所需的绘图。目标应如下所示:

Comparative scatter plot

那么如何创建比较散点图 plot/swarm?我对使用 Pylab、Seaborn 或 Plotly 中的任何一个库的解决方案都满意。

这是我所做的:

RT = {'Birds': [1.15878, 1.418479, 1.034765, 1.310064, 1.087671, 1.001802],
     'Mammals': [1.494555, 1.738676, 1.541106, 1.328025, 1.583186, 1.770486]}
RT = pd.DataFrame(data=RT)
ax = sns.swarmplot(data=RT[["Birds", 'Mammals']])
ax.set_ylabel('Reaction time [s]')
ax.set_xlabel('Species')
ax.tick_params(labelrotation = 45)

输出:

这是你想要的吗?

您需要融化数据框以从宽格式框架变为长格式框架。 Seaborn 主要使用长格式框架。

u ="""Birds,Mammals
1.15878,1.494555
1.418479,1.738676
1.034765,1.541106
1.310064,1.328025
1.087671,1.583186
1.001802,1.770486"""

import io
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

dfin = pd.read_csv(io.StringIO(u))


df = pd.melt(dfin)

sns.swarmplot(x="variable", y="value", data=df)
sns.boxplot(x="variable", y="value", data=df,
            boxprops={'facecolor':'None'}, showfliers=False,)
plt.show()