Pandas DataFrame Plot:值列表

时间:2019-03-06 09:15:26

标签: python pandas seaborn

我有一个类似的Pandas DataFrame:

pd.DataFrame({
    'el1': {
        'steps': [0,1,2], 
        'values': [10, 9, 8]
    },
    'el2': {
        'steps': [0,1,2], 
        'values': [1,  2, 8]
    },
    'el3': {
        'steps': [0,1,2], 
        'values': [5,  9, 4]
    }
})

        el1         el2         el3
steps   [0, 1, 2]   [0, 1, 2]   [0, 1, 2]
values  [10, 9, 8]  [1, 2, 8]   [5, 9, 4]

尝试使用Panda的DataFrame图获得一些简单的线图的最佳方法是在values轴上使用y,在steps轴上使用x ? (例如应该有三行)

2 个答案:

答案 0 :(得分:1)

使用matplotlib

c = ['r', 'g', 'b']
for i in range(df.shape[1]):
    plt.plot(df.iloc[0, i], df.iloc[1, i], c=c[i], label=df.columns[i])
plt.legend(df.columns)
plt.xlabel('Steps')
plt.ylabel('Values')
plt.show()

plt

答案 1 :(得分:1)

这是另一种构造。很大程度上是因为我对在绘制之前先转换基础数据框比较满意。图的绘制几乎相同,因此,代码行应归功于@meW。

import pandas as pd
import matplotlib.pyplot as plt


df = pd.DataFrame({
    'el1': {
        'steps': [0,1,2], 
        'values': [10, 9, 8]
    },
    'el2': {
        'steps': [0,1,2], 
        'values': [1,  2, 8]
    },
    'el3': {
        'steps': [0,1,2], 
        'values': [5,  9, 4]
    }
})

ndf = pd.DataFrame({v:df[v].values[1] for v in df.columns})
ndf.index = df.el1.steps
ndf.columns = df.columns

>>>ndf
   el1  el2  el3
0   10    1    5
1    9    2    9
2    8    8    4

plt.plot(ndf)
plt.legend(ndf.columns)
plt.xlabel('Steps')
plt.ylabel('Values')
plt.show()