питон.Matplotlib.значения графика на основе значений других столбцов (параллельные линии) - PullRequest
0 голосов
/ 10 декабря 2018

Допустим, у меня есть следующий фрейм данных, и я хочу, чтобы время по оси X, а VLS и ID по оси Y.но я хочу сгруппировать идентификаторы строк, чтобы увидеть идентификаторы строк с разделителями и соответствующие им «vls».до сих пор я использовал 'groupby' '

df = pd.DataFrame({'vls': [ -22.0390625, -22.03515625, -27.0, -15.99609375, -10.984375, -12.9765625, -12.97265625, -19.9609375,-13.96484375, -19.95703125, -13.953125, -19.94921875, -21.9453125, -11.94140625, -21.9375, -21.93359375, -16.92578125, -13.921875, -12.91796875, -19.9140625, -10.91015625, -10.90625, -19.90234375, -10.8984375], 'id' : [1,2,3,4,5,4,5,5,5,4,3,3,4,4,4,2,1,5,5,3,5,2,5,5], 'time' : [51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74]})
g1 = df.groupby(["id"])
for i, data in g1:
    plt.plot(df.time, df.vls.values, label = i, linestyle=':', marker = 'o')
    plt.plot(df.time, df.id.values, linestyle=':', marker = 'o') 
plt.legend()

, но мой вывод такой:

enter image description here

но я бы хотелполучить 5 отдельных строк для идентификатора (должно быть 5 параллельных строк) и 5 ​​строк для «vls», который не связан последовательно, но основан на столбце «id».как то так: enter image description here

1 Ответ

0 голосов
/ 10 декабря 2018

Вы по-прежнему используете исходный фрейм данных, хотя вы правильно использовали группу.Я думаю, что вы намеревались сделать следующее:

from numpy import *
from matplotlib.pyplot import *
import pandas as pd
df = pd.DataFrame({'vls': [ -22.0390625, -22.03515625, -27.0, -15.99609375, -10.984375, -12.9765625, -12.97265625, -19.9609375,-13.96484375, -19.95703125, -13.953125, -19.94921875, -21.9453125, -11.94140625, -21.9375, -21.93359375, -16.92578125, -13.921875, -12.91796875, -19.9140625, -10.91015625, -10.90625, -19.90234375, -10.8984375], 'id' : [1,2,3,4,5,4,5,5,5,4,3,3,4,4,4,2,1,5,5,3,5,2,5,5], 'time' : [51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74]})
g1 = df.groupby(["id"])
fig, ax = subplots()
colors = cm.tab10(arange(len(set(df.id.values))+1))
for i, data in g1:
    ax.plot(data.time, data.vls.values, label = i, color = colors[i],linestyle=':', marker = 'o')
    ax.plot(data.time, data.id.values, linestyle=':', color = colors[i], marker = 'o') 
ax.legend()

edit: добавлен подбор цветов (не уверен, что это так)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...