我正在尝试实现与讨论的内容非常相似的事情 这里。
我有以下图像,并且我知道盒子的大小。从西到东(366,534),从南到北(0.00565,10.6),最后一个方向(页面法线)是(0,19.9)。
平均能量损失
\documentclass[]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[3d
box,xmin=0,xmax=10,ymin=366,ymax=534,
%grid=both,
minor z tick num=1]
\addplot3 graphics[points={%
( 0,366,0.00565) => (0, 227)
(19.9,534,0.00565) => (3804,0)
( 0,534,0.00565) => (3951,227)
( 0,366,-10.6) => (47,432)
}] {mwe.png};
\end{axis}
\end{tikzpicture}
\end{document}
我的代码正在生成,
在链接的讨论中有一个 matlab 脚本可以正确获取坐标,而我想这就是我搞砸事情的部分,因为我尝试使用 gimp 获取像素。
除了 Matlab 脚本之外,还有其他可靠的方法来获取像素吗?
或者是我的观点无法通过pgfplots
?
我也承认我不太确定我是否使用了好的点组将坐标映射到像素中。
答案1
正如 @marsupilam 提到的[它也在文档中(我的错)pgfplots
]:pgfplots 不支持透视投影 (版本 1.15)。
幸运的是,人们可以启用 Paraview 中的所谓功能parallel projection
来导出类似于以下的图像,我相信这符合的要求pgfplots
。
两个图像的框尺寸为:从西到东(366, 534),从南到北(0.00565, 10.6),最后一个方向(页面法线)为(0, 19.9)。
笔记:我重复一下文档再次。如果您使用 GIMP 获取坐标,请注意 GIMP 将左上角视为 (0,0),但 PGFPLOTS 将左下角视为。
平均能量损失
\documentclass[]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[3d box,
ymin=0,ymax=19.9,
zmin=0.00565,zmax=10.6,
%minor z tick num=1]
\addplot3 graphics[points={%
(366, 0, 0.00565) => (156, 0)
(366, 19.9,0.00565) => (0, 478-166)
(534, 0, 0.00565) => (3399,0)
(366, 0, 10.6) => (239,478-313)
}]{mwe_parallel.png};
\addplot3+ [only marks] coordinates {
(366, 0, 0.00565)
(366, 19.9,0.00565)
(534, 0, 0.00565)
(366, 0, 10.6)
};
\end{axis}
\end{tikzpicture}
\end{document}
蚂蚁结果;
更新:使用width
axis 中的或类似选项来缩放 png。它处理了 @marsupilam 评论中的问题。查看更多有关体重秤的信息。
缩放结果将会像这样(也带有更新的颜色);
答案2
这里,进行一些有趣的彩色调试,
输出
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{backgrounds}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[
name=myPlot,
ymin=0,ymax=19.9,
zmin=0.00565,zmax=10.6,
minor z tick num=1,
xtick distance=20,
ultra thick,
axis on top,
3d box=complete,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
xscale=.4, % I think this setting is what you need %%
yscale=.9, % %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
]
\addplot3
[opacity=.8,]
graphics
[
points=
{%
(366, 0, 0.00565) => (156, 0)
(366, 19.9,0.00565) => (0, 478-166)
(534, 0, 0.00565) => (3399,0)
(366, 0, 10.6) => (239,478-313)
},
]
{mweParallel.jpg};
\addplot3+ [only marks] coordinates
{
(366, 0, 0.00565)
(366, 19.9,0.00565)
(534, 0, 0.00565)
(366, 0, 10.6)
};
\pgfplotsextra
{
\foreach \x in {0,1}
{
\foreach \y in {0,1}
{
\foreach \z in {0,1}
{
\coordinate (a-\x-\y-\z) at (rel axis cs:\x,\y,\z);
}
}
}
}
\end{axis}
\foreach \i in {0,1}
{
\foreach \j in {0,1}
{
\draw [orange, line width=1mm] (a-\i-\j-0) -- (a-\i-\j-1);
\draw [yellow, line width=1mm] (a-\i-0-\j) -- (a-\i-1-\j);
\draw [green!80!black, line width=1mm] (a-0-\i-\j) -- (a-1-\i-\j);
}
\fill [opacity=.3,green!80!black,] (a-\i-0-0) -- (a-\i-1-0) -- (a-\i-1-1) -- (a-\i-0-1) ;
\fill [opacity=.3,yellow,] (a-0-\i-0) -- (a-1-\i-0) -- (a-1-\i-1) -- (a-0-\i-1) ;
%\fill [opacity=.3,orange,] (a-0-0-\i) -- (a-1-0-\i) -- (a-1-1-\i) -- (a-0-1-\i) ;
}
\end{tikzpicture}
\end{document}