2015-07-07 21 views
1

У меня есть панд dataframe в следующем формате:Plotting Панда: Сгруппированный график

groups value 
1  0 
0  0 
0  0 
0  0.1 
1  0.4 
1  0.5 
0  0.5 
1  0.8 
0  0.8 
1  0.9 
1  1 
1  1 
1  1 
1  1 
0  1 
0  1 

Я хочу отсортированный линейный график, который имеет значение в оси у, как показано здесь:

example graph

В любом случае: мне также нужна подобная линия для каждой группы на том же участке. (Или просто две строки для групп, но они различаются по размеру)

Может кто-нибудь помочь мне? Я полагаю, что это возможно?

Я использую python 3.x с pandas 0.16.2. Я бы предпочел использовать matplotlib или морской.

+0

Где рентгеновское значения идут? Покажите код, который вы использовали для получения этого графика. – JoeCondron

+0

Эй, Джо, это был просто столбец excel, чтобы получить равномерно распределенную ось x (Jianxun решил это с помощью 'x = np.linspace (0, 1, len (group))'. – Klaster

ответ

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

df = pd.read_csv('/home/Jian/Downloads/real_data.csv') 

# processing 
# ========================== 
fig, ax = plt.subplots() 
ax.set_ylim([0, 1.2]) 
count = 0 

def func(group): 
    group.sort('value', inplace=True) 
    x = np.linspace(0, 1, len(group)) 
    global ax, count 
    if count > 0: 
     ax.plot(x, group.value, label=group.groups.values[0]) 
    count += 1 
    return group 

df.groupby('groups').apply(func) 
ax.legend(loc='best') 

enter image description here

+0

Эй, Jianxun, спасибо за ответ! Это отлично работает с данными, которые я отправил. Однако у меня возникают проблемы с моими реальными данными, которые я не смог решить самостоятельно. Не могли бы вы взглянуть на мои правки? – Klaster

+0

@Klaster Извините, что это моя ошибка. чтобы установить 'sort' в' inplace'. Я изменил код, и теперь он должен работать. :-) –

+0

Потрясающе! Еще раз спасибо! – Klaster

Смежные вопросы