如何在 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()
对于最小的、可重现的示例 (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()