matplotloib: как отобразить значения в порядке возрастания, сохранив их индекс?

Есть 2 списка x и y. x идет в порядке возрастания, y- хаотичный. Как отобразить ось y в порядке возрастания, но что бы значения (x,y) не поменялись?


import numpy as np
import matplotlib.pyplot as plt
x=[]
with open('D:\Programming\Contest\stepperf.txt','r') as a:
    for line in a:
        x.append(line.strip())
x =np.array(x)
y=[]
with open('D:\Programming\Contest\Hall.txt','r') as b:
    for line in b:
        y.append(line.strip())
y  = np.array(y)


fig, ax = plt.subplots(figsize=(8, 6))
plt.grid()     
plt.plot(x,y) 

plt.show()


Ответы (2 шт):

Автор решения: lev

Тут нужно использовать библиотеку numpy, и библиотеку pandas В библиотеке пандас есть возможность создать data array с индексом для каждой вещи.

Data = numpy.array(['a','b','s'])
S = pandas.Series(Data, index=[101,102,103])
→ Ссылка
Автор решения: CrazyElf

Можно воспользоваться функцией numpy.argsort():

import numpy as np
import matplotlib.pyplot as plt

# x тут по порядку, а y случайные числа
n = 10
x = np.arange(n)
y = np.random.rand(n)

# сортируем индексы (x,y) по значениям y
ind = y.argsort()

fig, ax = plt.subplots(figsize=(8, 6))
plt.grid()     
# рисуем в отсортированном порядке
plt.plot(x[ind],y[ind]) 

plt.show()

sort_y

→ Ссылка