考虑一个简单的2x2数据集,其中系列标签作为第一列预先添加(“Repo”)
Repo AllTests Restricted
0 Galactian 1860.0 410.0
1 Forecast-MLib 140.0 47.0
以下是DataFrame列:
p(df.columns)
([u'Repo', u'AllTests', u'Restricted']
所以我们的第一列是字符串/标签,第二列和第三列是数据值。我们希望每个行一个系列对应Galactian
和Forecast-MLlib
回购。
这似乎是一项常见任务,只需简单地plot
DataFrame即可。但是,以下相关问题没有提供任何简单的方法:它基本上抛弃了DataFrame结构知识并手动绘制:
Set matplotlib plot axis to be the dataframe column name
有没有更自然的方式来绘制这些系列 - 这不涉及解构已经很有用的DataFrame,而是将第一列推断为标签,剩下的是系列数据点?
更新以下是一个自包含的代码段
runtimes = npa([1860.,410.,140.,47.])
runtimes.shape = (2,2)
labels = npa(['Galactian','Forecast-MLlib'])
labels.shape=(2,1)
rtlabels = np.concatenate((labels,runtimes),axis=1)
rtlabels.shape = (2,3)
colnames = ['Repo','AllTests','Restricted']
df = pd.DataFrame(rtlabels, columns=colnames)
ps(df)
df.set_index('Repo').astype(float).plot()
plt.show()
这是输出
Repo AllTests Restricted
0 Galactian 1860.0 410.0
1 Forecast-MLlib 140.0 47.0
使用piRSquared
帮助它看起来像这样
所以数据现在显示..但系列和标签交换。将进一步尝试正确排列它们。
另一次更新
按flipping the columns/labels
,系列会按照需要推出。
改变是:
labels = npa(['AllTests','Restricted'])
..
colnames = ['Repo','Galactian','Forecast-MLlib']
所以更新的代码是
runtimes = npa([1860.,410.,140.,47.])
runtimes.shape = (2,2)
labels = npa(['AllTests','Restricted'])
labels.shape=(2,1)
rtlabels = np.concatenate((labels,runtimes),axis=1)
rtlabels.shape = (2,3)
colnames = ['Repo','Galactian','Forecast-MLlib']
df = pd.DataFrame(rtlabels, columns=colnames)
ps(df)
df.set_index('Repo').astype(float).plot()
plt.title("Restricting Long-Running Tests\nin Galactus and Forecast-ML")
plt.show()
p('df columns', df.columns)
ps(df)
答案 0 :(得分:1)
Pandas假设您的标签信息在索引和列中。首先设置索引:
df.set_index('Repo').astype(float).plot()
或者
df.set_index('Repo').T.astype(float).plot()