正如标题所述,我想知道我是否可以使用 pgfplots 绘制“空间”。我想我必须解释一下我的意思(我找不到一个好的英文表达):
在 pgfplots 3d 图中,轴标签仅朝一个方向旋转。示例(取自 sourceforge.net 上的 pgfplots 项目页面):
相比之下,我希望看到的是这个用 Origin 完成的例子(取自OriginLab 网站):
所以问题是,我也可以使用 pgfplot 实现这一点吗?
答案1
sloped
Pgfplots 具有使用(或) 键的内置旋转轴描述slope like x axis
。
自定义变换可能可以添加“空间”标签。我正在考虑应用 x/y 倾斜变换后内置旋转。
当然,这种转换取决于实际的视线方向(即 的选择view={<h>}{<v}
)。
对于标准视图方向,以下内容可能是一个有用的起点 - 或者实际上只是手动微调的起点。
\documentclass{standalone}
\usepackage{pgfplots}
\tikzset{
% styles which are used in more than one place below:
trafo x/.style={
sloped like x axis,
xslant=1,
},
trafo y/.style={
sloped like y axis,
xslant=-1,
anchor=north,
},
trafo z/.style={
%sloped like z axis,
yslant=1,
anchor=east,
},
}
\pgfplotsset{
spatial/.style={
xlabel style={trafo x},
xticklabel style={trafo x},
ylabel style={trafo y},
yticklabel style={trafo y},
% z was more tricky. This is my current guess:
every axis z label/.style={%
at={(ticklabel cs:0.5)},rotate=-90,
xslant=-1,
anchor=north,
},
zticklabel style={trafo z},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
min=0,
max=1,
xlabel=xlabel,
ylabel=ylabel,
zlabel=zlabel,
spatial,
]
\end{axis}
\end{tikzpicture}
\end{document}
显然,标签的位置可能需要一些修正,并且倾斜值只是猜测。
如果你想详细说明应该如何真的完成后,您可以自动计算给定两个轴的合适变换矩阵。例如,pgfplots 宏pgfplotstransformtoaxisdirection{<axis>}
安装了一个 PGF 基本级别变换矩阵,该矩阵实现了该sloped
功能(<axis>
是x
、y
或之一z
)。我相信可以实现类似的方法来支持看起来“足够好”的空间图。如果您想出一个通用的实现以及针对许多视图方向的测试,我可以将结果添加到 pgfplots。