\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}