我试图使用OpenGL在图表上绘制大量数据。我想使用这个渲染器,因为它是唯一支持透明度的渲染器。数据正在精确绘制,但是一旦放大连接数据点的线条就不能正确排列,如下所示: 我已经测试过使用Painters和Zbuffer绘制数据,并且当放大相同数量时,这些线正确连接数据。这是Zbuffer生成的(Painters看起来完全相同,但网格线较重):
您可以使用以下代码重新创建问题。请注意,这并未创建与所示完全相同的绘图,但仍清楚地说明了问题。
t = [735480.784722222 735480.826388889 735480.868055556 735480.909722222 735480.951388889 735481 735481.034722222 735481.076388889 735481.118055556 735481.159722222 735481.201388889 735481.243055556 735481.284722222 735481.326388889 735481.368055556 735481.409722222 735481.451388889 735481.493055556 735481.5 735481.534722222 735481.576388889];
d = [10.0799999237061 10.0799999237061 10.0799999237061 10.0699996948242 10.0699996948242 10.0799999237061 10.0699996948242 10.0699996948242 10.0699996948242 10.0699996948242 10.0699996948242 10.0600004196167 10.0600004196167 10.0600004196167 10.0699996948242 10.0699996948242 10.0600004196167 10.0600004196167 10.0600004196167 10.0600004196167 10.0500001907349];
figure;
plot(t, d, '.-');
set(gcf, 'renderer', 'opengl');
答案 0 :(得分:1)
我在 MathWorks支持团队响应的 MATLAB Answers 上找到了similar question:
OpenGL渲染器仅使用单精度。结果,和 正在绘制的数字无法使用 OpenGL的。 Painters和ZBuffer渲染器使用双精度[...]
您提供的数据精度高于单精度浮点数所表示的精度。因此它无法正常显示。
解决方法可能是真正只绘制数据的最低有效数字(例如通过减去前导数字)并使用XTick
/ YTick
和XTickLabel
/ { {1}}绘图的属性以获取正确的轴刻度标签。在你的情况下,这样的事情就足够了:
YTickLabel