【问题标题】:Octave plotting x axis precision八度绘图 x 轴精度
【发布时间】:2016-07-05 02:08:56
【问题描述】:

我想知道在绘制图形时如何提高 x/y 轴的精度。

我已经初始化了option long 我有一个数据集,例如:

x(1:3) 
ans = 

736330.576631944 
736330.576643519 
736330.576655093 

y(1:3) 
ans = 

-62 
-63 
-62 

当我做plot(x(1:3),y(1,3))时,我只能看到-62和-63之间的一条垂直线,好像x轴没有足够的小数识别变化的地方。

get(gca, 'xticklabel') 
ans = 
{ 
[1,1] = -2e+006 
[1,2] = -1.5e+006 
[1,3] = -1e+006 
[1,4] = -500000 
[1,5] = 0 
[1,6] = 500000 
[1,7] = 1e+006 
[1,8] = 1.5e+006 
}

这是我从 get gca() 函数中得到的。有没有办法提高 x 轴的精度,以便我可以看到数据点在移动?

非常感谢您的帮助

【问题讨论】:

  • 尝试手动设置您的xlim 以达到您所需的规模。否则,请考虑将您的整个 x 数据集移动 736330,这无论如何都有助于理解小的变化。
  • 非常感谢,移位工作,但问题是 x 值是从 datenum() 获得的,后来我需要使用 datetick('x', 13);这在轮班后将不起作用.....在 736330 和 736331 之间设置 xlim 不起作用,它只是将所有内容四舍五入到 736331
  • 嗯,你应该在转换之前把它移回来。要么您尝试绘制为“736331”,您可以将其转换,或者您尝试绘制为“12/03/2016”,在这种情况下您不需要转换。我是不是误会了?
  • 嗨,安德拉斯,谢谢。所以基本上我有一个像 143715 这样的数字数组,我使用 datestr() 将它们转换为时间 14:37:15 的单元格。这是我的时间单元,我有超过 2000 个条目。然后我使用 datenum(time,13) 将其转换为数字,以便我可以将它们绘制在 x 轴上。我拥有的 736330.xxxxx 列表位于该 datenum() 函数之后。然后我使用 datetick() 将 x 轴转换回 HH:MM:SS 格式。问题是 Octave 绘图要么将这些数字四舍五入为 736331,要么将它们四舍五入为 736330,最后我有 2 个垂直条。
  • 问题排序,需要切换到graphics_toolkit("gnuplot"),然后读取小数位

标签: matlab octave


【解决方案1】:

OpenGL 使用单个类来表示数字。所以任何使用 OpenGL(qt 和 fltk)的 graphics_toolkit 都存在单精度问题。

因此,要么将 graphics_toolkit 切换到使用双精度的 gnuplot,要么在使用 datenum 创建刻度标签后删除 x=x-x(1) 中的常量部分,以便单精度足以区分值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2018-04-08
    相关资源
    最近更新 更多