2017-07-11 107 views
3

您好,我有以下数据框:如何用python制作xy线图?

df = [{'Column1': 1, 'Colunm2': 'A', 'Colunm3': 2}, 
     {'Column1': 2, 'Colunm2': 'A', 'Colunm3': 4}, 
     {'Column1': 3, 'Colunm2': 'A', 'Colunm3': 1}, 
     {'Column1': 1, 'Colunm2': 'B', 'Colunm3': 7}, 
     {'Column1': 2, 'Colunm2': 'B', 'Colunm3': 2}, 
     {'Column1': 3, 'Colunm2': 'B', 'Colunm3': 9}] 

怎样才能让Column1Colunm3但画两条线diffentent,一个值Colunm2 = 'A'和其他的值Colunm2 ='B'之间的X Y情节?

+1

你尝试过这么远吗?你使用什么工具? https://stackoverflow.com/help/how-to-ask – patrick

回答

1

你可以试试这个:

import matplotlib.pyplot as plt 

df = [{'Column1': 1, 'Colunm2': 'A', 'Colunm3': 2}, 
     {'Column1': 2, 'Colunm2': 'A', 'Colunm3': 4}, 
     {'Column1': 3, 'Colunm2': 'A', 'Colunm3': 1}, 
     {'Column1': 1, 'Colunm2': 'B', 'Colunm3': 7}, 
     {'Column1': 2, 'Colunm2': 'B', 'Colunm3': 2}, 
     {'Column1': 3, 'Colunm2': 'B', 'Colunm3': 9}] 

first = [(i["Column1"], i['Colunm3']) for i in df if i['Colunm2'] == 'A'] 
second = [(i["Column1"], i['Colunm3']) for i in df if i['Colunm2'] == 'B'] 


plt.plot([a for a, b in first], [b for a, b in first]) 
plt.plot([a for a, b in second], [b for a, b in second]) 

plt.show() 
3

IIUC:

import pandas as pd 
df1 = pd.DataFrame(df) 
fig,ax = plt.subplots() 
for i,g in df1.groupby('Colunm2'): 
    g.plot('Column1','Colunm3',ax=ax,label=i) 

enter image description here

+0

这是一个更灵活的答案,利用了[groupby]专门实施的绘图这一事实(http://pandas.pydata.org/pandas-docs /version/0.16.2/generated/pandas.core.groupby.DataFrameGroupBy.plot.html)对象。在我看来(熊猫而不是答案)唯一的缺点是你应该能够在一次调用中传递一个标签列表给'.plot',即'g.plot('Column1','Colunm3', ax = ax,label = ['A','B'])''。 –

+0

@BradSolomon你可以使用'hue'参数完全做到这一点。 –

+0

'sns.lmplot'? –

2

正如在他的评论中指出@ScottBoston还有sns.pointplot其中hue参数是一个有效通过...分组。

import sns.apiponly as sns 
sns.pointplot('Column1', 'Colunm3', data=DataFrame(df), hue='Colunm2') 
plt.ylabel('Colunm3') 

enter image description here