Как выделить самую нижнюю строку на линейном графике в matplotlib?

#python #matplotlib

#python #matplotlib

Вопрос:

В настоящее время мой код генерирует линейный график на основе массива значений x, y, сгенерированных функцией с именем f (), примерно так:

 T = 0
for i in range(0,10):
    
    #function f generates array of values based on T to plot x,y
    x,y = f(T)

    plt.plot(x, y, label = "T={}".format(T))
    
    T  = 1
  

Это генерирует график, подобный следующему:

введите описание изображения здесь

Есть ли упрощенный способ сделать все строки серыми, выделив линию с самой низкой конечной точкой красным, а самую высокую конечную точку зеленым по оси x, независимо от того, что такое y?

Итак, для этого примера, где T = 5 строка будет красной, а где T = 3 строка будет зеленой, а для остальных строк все того же оттенка серого.

Ответ №1:

Просто сохраните все ваши x и y значения в двух списках :

 X = [x0,..., x9] # List of lists.
Y = [y0,..., y9] # Same. x0, y0 = f(0)
  

Затем найдите самое высокое и самое низкое значение :

 highest_endpoint, highest_endpoint_indice = Y[0][-1], 0 # Initialisation.
lowest_endpoint, lowest_endpoint_indice = Y[0][-1], 0 # Initialisation.

for i, y in enumerate(Y[1:]) : # No need to check for Y[0] = y0 thanks to the initialisations.
  if y[-1] > highest_endpoint : # If current endpoint is superior to temporary highest endpoint.
    highest_endpoint, highest_endpoint_indice = y[-1], i 1
  elif y[-1] < lowest_endpoint :
    lowest_endpoint, lowest_endpoint_indice = y[-1], i 1

# Plot the curves.
for T in range(10) :
  if T == highest_endpoint_indice :
    plt.plot(X[T], Y[T], label = "T={}".format(T), color = 'green')
  elif T == lowest_endpoint_indice :
    plt.plot(X[T], Y[T], label = "T={}".format(T), color = 'red')
  else :
    plt.plot(X[T], Y[T], label = "T={}".format(T), color = 'gray')

plt.show()