【问题标题】:How to create a comparative scatter plot/swarm plot in Python/Pylab/Seaborn/Plotly?如何在 Python/Pylab/Seaborn/Plotly 中创建比较散点图/群图?
【发布时间】:2019-12-02 09:49:54
【问题描述】:

对于一个最小的、可重现的示例 (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

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

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

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

print(RT) 正确打印表格。

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

Comparative scatter plot

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

【问题讨论】:

    标签: python matplotlib seaborn scatter-plot swarmplot


    【解决方案1】:

    这是我所做的:

    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)
    

    输出:

    这是你想要的吗?

    【讨论】:

    • 感谢您的回答!这个解决方案比我的任何尝试都更接近我的目标。尽管为了达到最终目标,仍然缺少中位数和分位数等统计符号的额外绘图。
    【解决方案2】:

    您需要融合数据框以从宽格式帧变为长格式帧。 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()
    

    【讨论】:

    • Aaahhh,融合数据框并将 swarmplot 与箱线图相结合是一个很好的解决方案。谢谢您的回答!它适用于 reprex,也适用于我的真实、更大的数据集 - 谢谢!
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    相关资源
    最近更新 更多