今天我有一个关于散点图的问题:
是否可以插入散点图?
在我的工作中,我经常使用“强度图”(我们是这样称呼它们的)。在这些图中,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
让我尝试总结一下我从您的问题和评论中收集到的信息:
您有一些 3D 可视化需要大量时间。
“大量”是指 1000 多个数据点。这相当于约 30x30 的分辨率
您想知道如何提高速度;散点图似乎是一个解决方案。
首先,关于(3.):如果你需要散点图,我想没有太多选择。但是如果你真的有选择,你应该坚持使用surf, shader=interp
。这个表面图处理程序可以通过 pgfplots 有效地处理;它比散点图快得多,并且会产生较小的 pdf。并且:如果你有一个相对平滑的函数,它只需要很少的数据点。
关于需要改进编译时间:我认为有三种选择:
选择 1:图书馆external
。写
\usetikzlibrary{external}
\tikzexternalize
放入你的序言中;然后用 进行编译pdflatex -shell-escape
。这允许将单个图片自动导出为 pdf,并使用复杂的逻辑来保留缩放、对齐、边界框、标签等。你可以在手册或本网站上找到很多说明。
选择 2:也可以使用独立包。详细信息请参阅手册或此网站。
选择3:如果这些外部pdf的编译时间太长,可以考虑降低采样分辨率。也许这是可行的。
如果质量下降但您知道表面是光滑的,您甚至可以求助于patchplots
pgfplots 的库并使用一些高阶着色器(patch type=bilinear
或patch type=biquadratic
或patch type
=bicubic combined with
shader=interp ). Except for
patch type=bilinear , these patches require changes to your sampling routine (i.e. the expected input changes). See also
patch type samples` 在 pgfplots 1.7 中。
选择 4:您可以求助\addplot graphics
。\addplot graphics
但是,切换应被视为最后的希望,因为它涉及比预期更多的手动工作(调整轴限制)并且涉及第三方工具(更多开销)。