Я не совсем уверен, что это то, что вам нужно, но вы можете просто попробовать сгруппировать по 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)