Matplotlib - 以正确的刻度以等距方式显示非等距数据点

时间:2021-05-29 16:11:05

标签: python matplotlib plot graph axes

当通过 plot(x, y) 绘图时,x 值有 2 种用途:

  • 它们用于描述数据对 (x0, y0), (x1, y1) 等
  • 他们确定数据点显示在哪个 x 坐标

我正在寻找一种如何摆脱第二次使用的方法,即我希望以等距方式显示非等距 x 位置。

示例:当给出数据点 (0,0)、(1,1)、(4,4)、(9,9) 时,绘制 plot(x, y) 给出一条直线。但我更希望它们显示为抛物线,就像我绘制 (0,0)、(1,1)、(2,4)、(3,9) 一样,但是原始的刻度线和网格线正确x 数据 0, 1, 4, 9. 即x 轴应该被扭曲以进行显示,并且 x 值应该仅用于具有正确刻度标签的网格和刻度位置。刻度/网格位置仍应为数字,即应该可以将它们设置为独立于 x 数据值,或使用巧妙的自动行为来确定最佳位置。

很明显,由于没有明确给出扭曲函数,因此无法直接确定网格/刻度位置,但它可以从 x 值进行插值。显式设置warping函数也可以。

实际上,翘曲函数并不是完全随意的,而是单调的。但它不是像 log 那样简单的内置扭曲。

通过使用 'xscale' 选项,它与仅显示的扭曲 x 轴有某种关系。不同之处在于,我会在 x 数据本身以及显示器中进行扭曲,以获得更好的分辨率。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以通过将 x 值转换为字符串来使它们分类。下面是一个例子:

import matplotlib.pyplot as plt
import numpy as np

points = [(0, 0), (1, 1), (4, 4), (9, 9)]
x = [str(xi) for xi, yi in points]
y = [yi for xi, yi in points]
fig, ax = plt.subplots()
ax.plot(x, y)
ax.grid(True)
plt.show()

x-values made categorical