如何绘制来自pandas的列的散点子图

3
假设我有一个包含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)
1个回答

7

一种方法是在外部创建子图并循环列名称,为每个列名称创建一个绘图。

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参数。根据文档

subplots:默认值为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参数必须提供相同长度的列表。因此,例如,如果您想绘制col1相对于col2和col3,请使用x=['col1','col1']和y=['col2','col3']而不是x='col1'和y=['col2','col3']。 - Mishal Ahmed
请注意,subplots=True并不是必要的。只要你有x=['col1','col1']和y=['col2','col3'],无论是否有subplots=True,都会产生相同的图形。 - Mishal Ahmed
1
第二种方法在pandas 1.3.5中不起作用。它确实创建了两个轴,但它只显示其中一个,其中使用了所有数据。 - T_T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接