Как отсортировать данные точек в X ayis сюжета - PullRequest
0 голосов
/ 07 июня 2019

enter image description here Я пытаюсь построить данные из словаря. Каждое значение словаря будет отображать одну строку на графике (значения представляют собой списки списков)

Эти линии имеют разное количество точек, и по этой причине точки X ayis не сортируются должным образом.

Например, на изображении выше, точка "3802814" найдена для линии после точек 3848766 и 3872755 и нанесена на правую сторону (неправильно отсортирована, как я хочу). Я понимаю, что словари не могут быть отсортированы как таковые, чтобы преодолеть это.

Код:

# Dictionary: timing_of[clk_name]= {"clk1": [[Xlabel1, N1, M1, L1], [Xlabel2, N2, M2, L2]...]}
for clk_name, clk_data in timing_of.items(): 
   # Plot Xlabels with N-values in Y axis
   plt.plot([col[0] for col in clk_data] , [col[1] for col in clk_data], label=clk_name) 

plt.gca().legend(loc='center left', bbox_to_anchor=(1 , 0.8), prop={'size': 7}) 
plt.show() 

Как я могу либо: 1. рассортируйте X ayis перед показом сюжета 2. в качестве альтернативы, сортировать данные, прежде чем я их нанесу?

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Вы можете использовать numpy

import numpy as np
# Dictionary: timing_of[clk_name]= {"clk1": [[Xlabel1, N1, M1, L1], [Xlabel2, N2, M2, L2]...]}
# Dictionary: timing_of[clk_name]= {"clk1": [[Xlabel1, N1, M1, L1], [Xlabel2, N2, M2, L2]...]}
X_all = np.array([])
Y_all = np.array([])
for clk_name, clk_data in timing_of.items(): 
   X = np.array([col[0] for col in clk_data])
   Y = np.array([col[1] for col in clk_data])
   argsort = np.argsort(X)
   X = X[argsort]
   Y = Y[argsort]
   # search the indexes to append in the right place
   appendIndex  = np.searchsorted(X_all, X)
   X_all = np.insert(X_all , appendIndex, X)
   Y_all = np.insert(Y_all , appendIndex, Y)

plt.plot(X_all , Y_all) 
0 голосов
/ 07 июня 2019

Как указано @ImportanceOfBeingErnest:

Это не имеет ничего общего с сортировкой словаря.Это потому, что мои точки были строками, а не числами.

Простое приведение к целому числу с помощью int () решило эту проблему.

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