如何解决Matplotlib - 以正确的刻度以等距方式显示非等距数据点
当通过 plot(x,y) 绘图时,x 值有 2 种用途:
- 它们用于描述数据对 (x0,y0),(x1,y1) 等
- 他们确定数据点显示在哪个 x 坐标
我正在寻找一种如何摆脱第二次使用的方法,即我希望以等距方式显示非等距 x 位置。
示例:当给出数据点 (0,0)、(1,1)、(4,4)、(9,9) 时,绘制 plot(x,y) 给出一条直线。但我更希望它们显示为抛物线,就像我绘制 (0,1)、(2,4)、(3,9) 一样,但是原始的刻度线和网格线正确x 数据 0,1,4,9. 即x 轴应该被扭曲以进行显示,并且 x 值应该仅用于具有正确刻度标签的网格和刻度位置。刻度/网格位置仍应为数字,即应该可以将它们设置为独立于 x 数据值,或使用巧妙的自动行为来确定最佳位置。
很明显,由于没有明确给出扭曲函数,因此无法直接确定网格/刻度位置,但它可以从 x 值进行插值。显式设置warping函数也可以。
实际上,翘曲函数并不是完全随意的,而是单调的。但它不是像 log 那样简单的内置扭曲。
通过使用 'xscale' 选项,它与仅显示的扭曲 x 轴有某种关系。不同之处在于,我会在 x 数据本身以及显示器中进行扭曲,以获得更好的分辨率。
有没有办法做到这一点?
解决方法
您可以通过将 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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。