当前位置: 首页 > 面试题库 >

与未排序数据相交的matplotlib图

淳于煌
2023-03-14
问题内容

当绘制一些点matplotlib时,在创建图形时遇到一些奇怪的行为。这是产生该图的代码。

import matplotlib.pyplot as plt
desc_x =[4000,3000,2000,2500,2750,2250,2300,2400,2450,2350]
rmse_desc = [.31703 , .31701, .31707, .31700, .31713, .31698, .31697, .31688, .31697, .31699]

fig = plt.figure()
ax = plt.subplot(111)

fig.suptitle('title')
plt.xlabel('x')
plt.ylabel('y')

ax.plot(desc_x, rmse_desc, 'b', label='desc' )
ax.legend()
plt.show()

这是它创建的图形

带线图

如您所见,此图具有相交的线,有些在线图中看不到。当我隔离点并且不画线时,我得到以下结果:

无线图

如您所知,有一种无需交叉线即可连接这些点的方法。

matplotlib为什么要这样做?我想我可以通过不对我的xcolumn不排序来解决它,但是如果我对它进行排序,我将失去从x1到y1的映射。


问题答案:

您可以使用numpy的argsort功能维护订单。

Argsort“ …沿着给定的轴按排序顺序返回形状与该索引数据相同形状的索引数组。”,因此我们可以使用它来将x和y坐标重新排序在一起。这是完成的过程:

import matplotlib.pyplot as plt
import numpy as np

desc_x =[4000,3000,2000,2500,2750,2250,2300,2400,2450,2350]
rmse_desc = [.31703 , .31701, .31707, .31700, .31713, .31698, .31697, .31688, .31697, .31699]

order = np.argsort(desc_x)
xs = np.array(desc_x)[order]
ys = np.array(rmse_desc)[order]

fig = plt.figure()
ax = plt.subplot(111)

fig.suptitle('title')
plt.xlabel('x')
plt.ylabel('y')

ax.plot(xs, ys, 'b', label='desc' )
ax.legend()
plt.show()

在此处输入图片说明



 类似资料:
  • 问题内容: 我想通过JPA从数据库(MySQL)获取数据,我希望它按某些列值进行排序。 因此,最佳做法是: 从数据库中检索数据作为对象列表(JPA),然后使用一些Java API以编程方式对其进行排序。 要么 让数据库通过使用排序选择查询对其进行排序。 提前致谢 问题答案: 如果要检索所有数据库数据的子集,例如在屏幕上显示1000中的20行,则最好对数据库进行排序。这将更快,更轻松,并且允许您一次

  • 我发现了这个流行的9岁左右的问题,并决定重新检查它的结果。 所以,我有AMD Ryzen 9 595 0x、Clang++10和Linux,我从问题中复制粘贴了代码,下面是我得到的: 分类-0.549702秒: 未排序-0.546554s: 我很确定的事实是,未经排序的版本被证明是快了3ms,只是噪音,但它似乎不再慢了。 那么,CPU的架构发生了什么变化(以至于不再慢一个数量级)? 以下是多次运行

  • 排序算法的评价 稳定性 稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的串行中R出现在S之前,在排序过的串行中R也将会是在S之前。 计算复杂度(最差、平均、和最好表现) 依据串行(list)的大小(n),一般而言,好的表现是O(nlogn),且坏的行为是O(n2)。对于一个排序理想的表现是O(n)。仅使用一个

  • 事情是这样的。我在做leetcode 164最大间隙。最佳解决方案是桶排序。 这让我对排序问题有了更多的思考。假设我们有如下列表: 2、5、19、444、-14、89、16、77 我认为,我们可以用两个不同的范围来排列这些数字,(min, mid)(mid, max)和mid-应该是min(max-min)/2; 因此我们得到了(-14215)(216444) 我们将min设置为最左侧,max设置

  • 问题内容: 从这个,我们知道要解决两个排序的数组的交叉方法。那么如何获得多个排序数组的交集呢? 基于两个排序数组的答案,我们可以将其应用于多个数组。这是代码 有更好的解决方法吗? 更新1 从这两个主题1和2看来,这是一种更有效的方法。 更新2 为了提高性能,也许可以使用代替我上面的代码。变量保存所有向量的当前最大值。因此,只需将根值与进行比较,如果它们相同,则可以将此元素放入交集列表。 问题答案:

  • 问题内容: 希望有人知道此Java认证问题的答案: 哪两个结果可能?(选择两个。) A)7 0 B)7 1 C)7 3 D)-1 0 E)-1 1 F)-1 3 唯一的正确答案是E)-1 1,因为如果您执行二进制搜索算法,这是唯一可能的输出。但是他们要我选择两个…所以第二个必须是B)7 1然后,因为排序数组中的第二个binarySearch总是会返回。 所以我的问题是,为什么B)7 1是可能的结果