【问题标题】:pandas plotting 2 dataframes with same column names大熊猫绘制 2 个具有相同列名的数据框
【发布时间】:2019-06-27 06:33:24
【问题描述】:

我有 2 个数据框,包含相同的索引和相同的列名(10 列 例如: 来自df1

   A  B  C
1  0  4  8
2  5  6  9
3  2  5  1

来自 df2:

   A  B  C
1  9  4  5
2  1  4  2
3  5  5  1

我想在同一张图上绘制,来自 df1 的 A 列与来自 d​​f2 的 A 列,来自 df1 的 B 列与来自 d​​f2 的 B 列,等等……这适用于每一列。 我怎么能用 pandas 和 matplotlib 做到这一点

【问题讨论】:

  • 你在看什么样的情节?
  • 只是简单的线条。我正在绘制一些比率与温度的关系。我想知道如何在整组列上进行迭代,而不是编写代码来独立地为每一对绘图
  • 你想要条形图吗?
  • 不,谢谢,我需要台词

标签: python pandas matplotlib


【解决方案1】:

这是一种方法:

import pandas as pd
import matplotlib.pyplot as plt

d1 = {'A':[0,5,2],'B':[4,6,5],'C':[8,9,1]}
d2 = {'A':[9,1,5],'B':[4,4,5],'C':[5,2,1]}
df1 = pd.DataFrame(data=d1)
df2 = pd.DataFrame(data=d2)

df1_a = df1['A'].tolist()
df1_b = df1['B'].tolist()
df2_a = df2['A'].tolist()
df2_b = df2['B'].tolist()

plt.plot(df1_a, df1_b, 'r') 
plt.plot(df2_a, df2_b, 'b') 
plt.show()

【讨论】:

    【解决方案2】:

    假设 df1df2 是您的数据框,您可以使用以下代码循环所有列并为您保存图表。

    import matplotlib.pyplot as plt
    import pandas as pd    
    for column in df1.columns:
            x = df1[column]
            y = df2[column]
    
            if len(x) != len(y):
                x_ind = x.index
                y_ind = y.index
                common_ind = x_ind.intersection(y_ind)
                x = x[common_ind]
                y = y[common_ind]
    
            plt.scatter(x,y)
            plt.savefig("plot" +column+".png")
            plt.clf()
    

    希望这会有所帮助!

    【讨论】:

    • 看起来不错,但我有一个问题。我的 x 和 y 大小不同。对于 y 中的某些数据,我在 x 中没有值。我应该怎么办?有没有办法从 y 中删除 x 中不存在的索引?
    • 我添加了一个条件来检查大小是否相同,如果不是,那么它只会选择那些常见的索引。
    猜你喜欢
    • 2020-09-21
    • 1970-01-01
    • 2015-03-30
    • 2016-08-12
    • 1970-01-01
    • 2017-06-09
    • 2017-02-20
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多