pgfplots:带插值的散点图

pgfplots:带插值的散点图

今天我有一个关于散点图的问题:
是否可以插入散点图?
在我的工作中,我经常使用“强度图”(我们是这样称呼它们的)。在这些图中,x 和 y 是位置,而点的颜色由强度决定。可以使用 3D 表面图和设置来创建这种图view={0}{90}。结果可以在右图中看到。左图显示相应的散点图。
由于 3D 图需要很长时间才能创建(引用 pgfplots 手册:“pgfplots 的三维例程很慢”),尤其是对于较大的数据集,而且由于我实际上不想要 3D 图,我想知道是否有办法让左侧的散点图看起来像右侧的 3D 图。

以下是我的示例代码:

\documentclass[crop,10pt]{standalone}
\usepackage[english]{babel}
\usepackage{pgfplots}
\usepgfplotslibrary{units}

\begin{document}%
    \setlength{\textwidth}{246pt}%
    \setlength{\linewidth}{246pt}%

\begin{tikzpicture}
\begin{axis}
\addplot+[scatter,scatter src=explicit,mark=square*,only marks]
coordinates {
(0,0) [0]
(0,1) [1]
(0,2) [2]
(0,3) [3]
(1,0) [4]
(1,1) [5]
(1,2) [6]
(1,3) [7]
(2,0) [8]
(2,1) [9]
(2,2) [10]
(2,3) [11]
};
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[view={0}{90}]
\addplot3[surf,shader=interp] 
coordinates {
(0,0,0) (1,0,4) (2,0,8)

(0,1,1) (1,1,5) (2,1,9)

(0,2,2) (1,2,6) (2,2,10)

(0,3,3) (1,3,7) (2,3,11)
};
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

谢谢你的帮助,
约翰

答案1

让我尝试总结一下我从您的问题和评论中收集到的信息:

  1. 您有一些 3D 可视化需要大量时间。

  2. “大量”是指 1000 多个数据点。这相当于约 30x30 的分辨率

  3. 您想知道如何提高速度;散点图似乎是一个解决方案。

首先,关于(3.):如果你需要散点图,我想没有太多选择。但是如果你真的有选择,你应该坚持使用surf, shader=interp。这个表面图处理程序可以通过 pgfplots 有效地处理;它比散点图快得多,并且会产生较小的 pdf。并且:如果你有一个相对平滑的函数,它只需要很少的数据点。

关于需要改进编译时间:我认为有三种选择:

选择 1:图书馆external。写

 \usetikzlibrary{external}
 \tikzexternalize

放入你的序言中;然后用 进行编译pdflatex -shell-escape。这允许将单个图片自动导出为 pdf,并使用复杂的逻辑来保留缩放、对齐、边界框、标签等。你可以在手册或本网站上找到很多说明。

选择 2:也可以使用独立包。详细信息请参阅手册或此网站。

选择3:如果这些外部pdf的编译时间太长,可以考虑降低采样分辨率。也许这是可行的。

如果质量下降但您知道表面是光滑的,您甚至可以求助于patchplotspgfplots 的库并使用一些高阶着色器(patch type=bilinearpatch type=biquadraticpatch type=bicubic combined withshader=interp ). Except forpatch type=bilinear , these patches require changes to your sampling routine (i.e. the expected input changes). See alsopatch type samples` 在 pgfplots 1.7 中。

选择 4:您可以求助\addplot graphics\addplot graphics但是,切换应被视为最后的希望,因为它涉及比预期更多的手动工作(调整轴限制)并且涉及第三方工具(更多开销)。

相关内容