relation-space.tex (59 lines)
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\tikzset{
canvas/.style={draw,left color=blue!35!black,right color=white},
sign/.style={align=center,fill=white,fill opacity=0.2,text opacity=1,text=white},
axis label/.style={midway,below,sloped}
}
\def\datapoint(#1,#2,#3)(#4) {
\filldraw (#1,#2,#3) -- (#1,#2,0) circle (0.2ex) (#1,#2,#3) -- (0,#2,#3) circle (0.2ex) (#1,#2,#3) -- (#1,0,#3) circle (0.2ex);
\shade[ball color=blue!40] (#1,#2,#3) circle (1ex) node[sign,right=1ex] {#4};}
\begin{document}
\begin{tikzpicture}[font=\sffamily,thick,rotate around y=-17,rotate around z=-8,rotate around x=10]
\shade[canvas,shading angle=45]
(0,0,0) -- (8,0,0)
node[below right,rotate=-20,xslant=0.6] {single}
-- (8,0,8)
node[right,rotate=-20,xslant=0.6,yshift=1ex] {multiple}
node[left,rotate=38,xslant=-0.8,yshift=1ex] {dissimilar}
node[sign,shift={(-3ex,6ex)}] {low functional\\redundancy}
node[axis label,xslant=-0.5] {functional role}
-- (0,0,8)
node[axis label,xslant=0.5] {functional response}
node[below left,rotate=38,xslant=-0.8] {similar}
-- cycle;
\shade[canvas,shading angle=225]
(0,0,0) -- (0,0,8)
node[above left,rotate=40,xslant=0.9] {low}
-- (0,8,8)
node[axis label,above] {size diversity}
node[below left,rotate=40,xslant=0.9] {high}
-- (0,8,0)
-- cycle;
\shade[canvas,shading angle=135]
(0,0,0) -- (8,0,0)
-- (8,8,0)
-- (0,8,0)
node[sign,shift={(3ex,-8ex)}] {high functional\\redundancy}
-- cycle;
\datapoint(4,0.5,6)(DIATOM)
\datapoint(5,1,3)(DIAZO)
\datapoint(3,1.5,2)(PHAEO)
\datapoint(4.5,4,4.5)(COCCO)
\datapoint(5.5,7,3.5)(PICO)
\fill[opacity=0.2] (8,0,8) to[out=35,in=-120] (8,4,0) to[out=150,in=-40] (0,8,0) to[out=-120,in=50] (0,4,8) to[out=-55,in=165] cycle;
\end{tikzpicture}
\end{document}