Как построить вертикальные наборы данных, хранящихся в панде DataFrame? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть DataFrame со структурой

columns = ['curve_number', 'x', 'y1', 'y2' ]

Как я могу построить (оверлей) с matplotlib кривыми x,y1 и x,y2 для всех curve_number?

Структура данных похожа на

curve_number   x     y1    y2
1              .5     3     2
1              1      5     6
1              1.5    4     3
1              2      3     7
2              .5     5     8
2              1      3     7
2              1.5    8     3
2              2      9     1
3              .5     2     2

На самом деле я храню различные наборы данных по вертикали.

1 Ответ

0 голосов
/ 11 мая 2018

Я не совсем уверен, что это то, что вам нужно, но вы можете просто попробовать сгруппировать по curve_number, а затем построить каждую группу в цикле.

Самая сложная часть этого на самом деле заключается в том, как вы хотите по-разному представлять номера отдельных кривых и y1 и y2 в каждой кривой: в этом примере я использую цветовую карту для представления каждой отдельной кривой (поэтому у вас не кончатся цвета, если у вас слишком много кривых, они на градиенте), и я только что изменил стиль линий между y1 и y2. На самом деле значительная часть кода ниже предназначена только для настройки цветового градиента и создания легенды, которая точно представляет все это ... Само построение графика выполняется только в цикле for

import matplotlib.pyplot as plt
# This import is just for the weird legend
from matplotlib.lines import Line2D
# This import is for the colormaps:
from matplotlib import cm

fig, axes = plt.subplots()

# Setup colormap to have right number of colors (one per number of curves)
n = df['curve_number'].nunique()
colors = cm.jet(np.linspace(0,1,n))

# Actual plotting
for i, (curve, data) in enumerate(df.groupby('curve_number')):
    plt.plot(data.x, data.y1, color = colors[i], linestyle='--', label='')
    plt.plot(data.x, data.y2, color = colors[i], label = curve)

# Regular legend (top right corner):
l1 = plt.legend(loc=1)
axes.add_artist(l1)

# Custom legend (bottom right corner):
custom_lines = [Line2D([0], [0], color='black', linestyle='--'),
                Line2D([0], [0], color='black')]    
l2 = plt.legend(custom_lines, ['y1', 'y2'], loc=4)

enter image description here

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