我有一个类似的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
? (例如应该有三行)
答案 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()
答案 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()