2017-07-11 52 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