2015-03-24 34 views
20

Tôi có một dataframe trông giống như sauVẽ nhiều dòng với gấu trúc dataframe

color x y 
0 red 0 0 
1 red 1 1 
2 red 2 2 
3 red 3 3 
4 red 4 4 
5 red 5 5 
6 red 6 6 
7 red 7 7 
8 red 8 8 
9 red 9 9 
10 blue 0 0 
11 blue 1 1 
12 blue 2 4 
13 blue 3 9 
14 blue 4 16 
15 blue 5 25 
16 blue 6 36 
17 blue 7 49 
18 blue 8 64 
19 blue 9 81 

tôi cuối cùng muốn hai dòng, một màu xanh, một màu đỏ. Đường màu đỏ chủ yếu nên y = x và đường màu xanh nên y = x^2

Khi tôi làm như sau:

df.plot(x='x', y='y') 

Kết quả là thế này:

Có cách nào để làm cho gấu trúc biết rằng có hai bộ? Và nhóm chúng cho phù hợp. Tôi muốn để có thể xác định các cột 'màu' như các thiết lập khác biệt

Trả lời

32

Bạn có thể sử dụng groupby chia DataFrame vào phân nhóm theo màu sắc:

for key, grp in df.groupby(['color']): 

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.read_table('data', sep='\s+') 
fig, ax = plt.subplots() 

for key, grp in df.groupby(['color']): 
    ax = grp.plot(ax=ax, kind='line', x='x', y='y', c=key, label=key) 

plt.legend(loc='best') 
plt.show() 

sản lượng enter image description here

+0

'rìu = grp.plot (ax = ax, loại = 'dòng', x = 'x', y =' y ', c = key, label = key) ' thêm" kwarg "nhãn sẽ giúp bạn thao tác chú giải sau đó. – ErnestScribbler

+0

@ErnestScribbler: Cảm ơn bạn đã cải thiện! – unutbu

-3

Bạn có thể sử dụng mã này để có được sản lượng mong muốn của mình

import pandas as pd 
import matplotlib.pyplot as plt 
df = pd.DataFrame({'color': ['red','red','red','blue','blue','blue'], 'x': [0,1,2,3,4,5],'y': [0,1,2,9,16,25]}) 
print df 

    color x y 
0 red 0 0 
1 red 1 1 
2 red 2 2 
3 blue 3 9 
4 blue 4 16 
5 blue 5 25 

Để vẽ đồ thị

a = df.iloc[[i for i in xrange(0,len(df)) if df['x'][i]==df['y'][i]]].plot(x='x',y='y',color = 'red') 
df.iloc[[i for i in xrange(0,len(df)) if df['y'][i]== df['x'][i]**2]].plot(x='x',y='y',color = 'blue',ax=a) 

plt.show() 

Output The output result will look like this

Các vấn đề liên quan