Python 如何在绘图的X轴上对数据点进行排序

Python 如何在绘图的X轴上对数据点进行排序,python,sorting,matplotlib,Python,Sorting,Matplotlib,我正试图从字典中绘出数据。每个字典值将在绘图中产生一行(值是列表的列表) 这些线的点数不同,因此X ayis点未正确排序 例如,在上图中,点“3802814”位于点3848766和3872755之后的直线上,并绘制到右侧(未按照我的要求正确排序)。 我理解,为了克服这一点,词典不能按此分类 代码是: #字典:计时([clk_name]={“clk1”:[[Xlabel1,N1,M1,L1],[Xlabel2,N2,M2,L2]…] 对于clk_名称,.items()的计时中的clk_数据: #在

我正试图从字典中绘出数据。每个字典值将在绘图中产生一行(值是列表的列表)

这些线的点数不同,因此X ayis点未正确排序

例如,在上图中,点“3802814”位于点3848766和3872755之后的直线上,并绘制到右侧(未按照我的要求正确排序)。 我理解,为了克服这一点,词典不能按此分类

代码是:

#字典:计时([clk_name]={“clk1”:[[Xlabel1,N1,M1,L1],[Xlabel2,N2,M2,L2]…]
对于clk_名称,.items()的计时中的clk_数据:
#在Y轴上用N值打印XLabel
plt.plot([col[0]表示clk_数据中的col],[col[1]表示clk_数据中的col],label=clk_name)
plt.gca().legend(loc='中间偏左',bbox_to_锚=(1,0.8),prop={'size':7})
plt.show()
我怎样才能: 1.在显示绘图之前,对X轴进行排序 2.或者,在绘制数据之前对数据进行排序?

您可以使用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) 

正如@ImportanceOfBeingErnest所指出的:

这与字典排序无关。因为我的分数是字符串而不是数字


使用int()将其转换为整数的简单方法解决了此问题。

请共享实际输入数据。x轴未被排序的一个可能原因是x值是字符串而不是数字(但如果没有数据就无法判断)。这与字典排序无关。这是因为你的点是字符串而不是数字。我编辑了解决方案,但没有测试它,我希望这有帮助。这是np.searchsorted的类型错误,“无法将数组数据从dtype float64强制转换为dtype我不知道您正在使用的数据的结构,但我认为如果您将数据强制转换为一种可以工作的特定类型,
X_all=np.array([],dtype=np.float),Y_all=np.array([],dtype=np.float)
,然后在创建X和Y时您可以执行
X=np.array([col[0]astype(np.foat)
ans与YThanks的try相同,但这只给出了一条绘制线,并且忽略了“clk_name”信息。我可能会尝试将数据结构更改为首先可以排序的数据结构。