Как найти и соединить максимальные точки с каждой контурной линией

#python #numpy #matplotlib

Вопрос:

Как я могу найти максимальные точки кривых, сгенерированных контурной диаграммой, а затем соединить их?

 import matplotlib.pyplot as plt
import numpy as np

t = np.arange(263, 383, 0.001) 
r=np.arange(0.1,0.9,0.1)
T, R = np.meshgrid(t, r)
k1=np.exp(17.34-(48900./(8.314*T)))
k2=np.exp(42.02-(124200./(8.314*T))) 
XA=(k1-R)/(k1 k2)
plt.contour(T,XA,R)
plt.axis([263,383,0,1])
plt.show()
 

контурные кривые

Ответ №1:

  • Извлеките индекс, idx , максимального значения из каждой строки массива XA
  • Используйте idx T и XA для извлечения значений по осям x и y.
    • Индексирование массива происходит немного быстрее, чем при использовании y = XA.max(axis=1) для получения max XA значений.
  • Форма XA есть (8, 120000) , поэтому существует 8 максимумов. Я не уверен, почему отображаются только 7 контурных линий.
    • Используйте x[:-1] и y[:-1] не стройте последнюю точку.
 # get index of max value for each row
idx = np.argmax(XA, axis=1)
# use idx to get the x-axis values from T that correspond to max XA
x = np.take_along_axis(T, np.expand_dims(idx, axis=-1), axis=-1).squeeze(axis=-1)
# use idx to get the max y-axis values from XA
y = np.take_along_axis(XA, np.expand_dims(idx, axis=-1), axis=-1).squeeze(axis=-1)

# plot
plt.contour(T,XA,R)
plt.plot(x, y, marker='o')  # plot the points
plt.axis([263,383,0,1])
plt.show()
 

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