【问题标题】:How to plot scatter subplots of columns from pandas如何绘制熊猫列的散点图
【发布时间】:2017-01-28 16:25:31
【问题描述】:

假设我有一个包含 100 行和 40 列的数据框,其中第 40 列代表散点图的 Y 轴值。对于 39 个散点图,我想在第 1 列的函数中绘制第 40 列,在第 2 列的函数中绘制第 40 列,在第 3 列的函数中绘制第 40 列,等等,在第 39 列的函数中绘制到第 40 列。什么是最好的无需手动完成所有操作即可生成这样一个子图的方法?

例如(使用较小的数据框),尝试在子图中将第 1 列函数中的第 3 列和第 2 列函数中的第 3 列散点图。

df = pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]})
df.plot(x=["AAA", "BBB"], y=["CCC"], kind="scatter", subplots=True, sharey=True)

【问题讨论】:

    标签: python pandas matplotlib scatter


    【解决方案1】:

    一种方法是在外部创建子图并遍历列名,为每个子图创建一个图。

    import pandas as pd
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]})
    
    fig, axes = plt.subplots(1,len(df.columns.values)-1, sharey=True)
    
    for i, col in enumerate(df.columns.values[:-1]):
        df.plot(x=[col], y=["CCC"], kind="scatter", ax=axes[i])
    
    plt.show()
    


    另一种可能适用于 pandas 0.19 的方法是使用 subplots 参数。根据the documentation

    子图:布尔值,默认为 False
    为每一列制作单独的子图

    我对此进行了解释,因此以下内容应该可以工作,但是,我无法对其进行测试。

    import pandas as pd
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]})
    
    df.plot(x=df.columns.values[:-1], y=["CCC" for _ in df.columns.values[:-1]], 
                                kind="scatter", subplots=True, sharey=True)
    plt.show()
    

    【讨论】:

    • 我已经测试了你的第二种方法并且它有效。其他人注意:如果从上面的@ImportanceOfBeingErnest 的答案中不清楚,则必须提供 x 和 y 参数的相同长度的列表。因此,例如,如果您想针对 col2 和 col3 绘制 col1,那么您必须使用 x=['col1','col1'] 和 y=['col2','col3'] 而不是 x='col1'和 y=['col2','col3']。
    • 还要注意 subplots=True 不是必需的。只要您有 x=['col1','col1'] 和 y=['col2','col3'] ,无论是否有 subplots=True,它都会生成相同的图。
    • 第二种方法不适用于 pandas 1.3.5。它确实创建了两个轴,但它只显示其中一个轴,其中使用了所有数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2017-05-28
    • 2021-02-27
    • 2021-11-25
    • 2020-10-10
    • 1970-01-01
    相关资源
    最近更新 更多