2

Could someone, whenever it's possible, post a minimal tikZ example to draw this? I also would like to put an "R" inside the upper box. This is mi code so far (I know, it's a mess):

\documentclass[tikz]{standalone}
\begin{document}
\tikzstyle{vspecies}=[rectangle, minimum size=0.5cm,draw=black,fill=blue]
\begin{tikzpicture}

\node [vspecies] (I) {I} ;
\node [vspecies, above left of = I] (N) {M} ;
\node [vspecies, below left of = I] (K) {K} ;
\draw [->,thick] (S.south east) --  node {\small{$N$}}  (M) ; ;
\draw [->,thick] (C) --  node [below right]    {\small{$M$}} (M) ;

\end{tikzpicture}
\end{document}

enter image description here

New contributor
naveganteX is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
  • 1
    You can use local bounding box. Btw, your code is not even compilable – JouleV Apr 16 at 5:13
3

Just for fun.

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\tikzset{vspecies/.style={rectangle, minimum size=0.5cm,draw=blue}}
\begin{tikzpicture}[>=latex]
 \node[draw,minimum width=1cm,minimum height=2cm,
 label=left:$M$,label=above:$N$] (R){$R$};
 \node [vspecies,below left=1cm and 0.2cm of R,minimum height=1.2cm,
 label=left:$M$,label=above:$K$] (R1) {} ;
 \node [vspecies,below right=1cm and 0.2cm of R,minimum width=1.2cm,
 label=left:$K$,label=above:$N$] (R2) {} ;
 \draw [->,thick,shorten >=1mm,shorten <=1mm] (R.south west) -- (R1.north east);
 \draw [->,thick,shorten >=1mm,shorten <=1mm] (R.south east) -- (R2.north west);
\end{tikzpicture}
\end{document}

enter image description here

3

Something like this?

\documentclass[tikz,margin=1mm]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\begin{scope}[local bounding box=a]
    \node[minimum width=2cm,minimum height=3cm,draw] (main-a) {};
    \path (main-a.west) node[left] {$N$} (main-a.north) node[above] {$M$};
\end{scope}
\begin{scope}[local bounding box=b2]
    \node[minimum width=2cm,minimum height=1cm,draw,below right=of main-a] (main-b2) {};
    \path (main-b2.east) node[right] {$K$} (main-b2.north) node[above] {$M$};
\end{scope}
\begin{scope}[local bounding box=b1]
    \node[minimum width=1cm,minimum height=3cm,draw,below left=of main-a] (main-b1) {};
    \path (main-b1.west) node[left] {$N$} (main-b1.north) node[above] {$K$};
\end{scope}
\draw[-stealth] (main-a.south) -- (b1.north east);
\draw[-stealth] (main-a.south) -- (b2.north west);
\end{tikzpicture}
\end{document}

enter image description here

  • Are you a kind of wizard with TeX? I must admit that I'm impressed. I read up on tikZ but it is still hard for me. So, thank you for giving me a hand with this rather tough Tex world! – naveganteX Apr 16 at 5:25
  • 1
    @naveganteX I'm not yet a "wizard" with either TikZ or LaTeX. I'm a complete novice in TeX :D There are so many TeXperts out there, but I am not one of them, of course. I don't even know anything about TikZ 3D yet (it is in my ever to-do list) – JouleV Apr 16 at 5:27
  • I happen to think that you're pretty good at both, tikz and Tex. Regarding tikZ 3d, I have been wanting to plot those 3D histograms/bar chart for so long. But at the moment, it is just an illusion! – naveganteX Apr 16 at 5:29
3

Here is an overkill solution that defines a new pics "shape" (see section 18.2 of the 3.1.1 tikz manual),together with some custom pgfkeys for styling it. The end result is that you can produce:

enter image description here

using code:

\documentclass[tikz, border=5mm]{standalone}
\usetikzlibrary{positioning}

\begin{document}
\pgfkeys{/vspecies/.is family, /vspecies,
  colour/.initial  = black, % rectangle colour
  fill/.initial    = white, % default fill
  top label/.initial = M,   % label on right
  right label/.initial= N,  % label on left
  bottom label/.initial=,   % label on left
  left label/.initial=,     % label on left
  X/.initial       = 5mm,   % default width
  Y/.initial       = 5mm,   % default height
  shape/.initial   = rectangle % default shape
}

\tikzset{
pics/vspecies/.style args={#1,#2}{% node name, pgfkeys key-value pairs
     code = {
      \pgfkeys{/vspecies, #2}
      \node[\pgfkeysvalueof{/vspecies/shape},
            minimum size=\pgfkeysvalueof{/vspecies/X},
            minimum height=\pgfkeysvalueof{/vspecies/Y},
            draw=\pgfkeysvalueof{/vspecies/colour},
            fill=\pgfkeysvalueof{/vspecies/fill},
            label=east:\pgfkeysvalueof{/vspecies/left label},
            label=north:\pgfkeysvalueof{/vspecies/top label},
            label=south:\pgfkeysvalueof{/vspecies/bottom label},
            label=west:\pgfkeysvalueof{/vspecies/right label},
      ](#1) at (0,0){};
     }
  }
}

\begin{tikzpicture}
  \pic at (0,0) {vspecies={A,colour=red,Y=10mm}};
  \pic[below left=10mm of A] {vspecies={B,top label=K,colour=blue,Y=20mm}};
  \pic[below right=10mm of A] {vspecies={C,fill=blue!10,X=10mm,shape=circle,left label=N,right label=}};
  \draw[->](A.south west)--(B.north east);
  \draw[->](A.south east)--(C.north west);
\end{tikzpicture}

\end{document}

The vspecies pic command take two arguments: the first is the name of a (normal) tikz node label and the second argunment is a comma separated list of key-value pairs tha specify:

  • the colour of the rectangle (default black)
  • the fill colour (default white)
  • the top label (default M)
  • the left label (default "")
  • the bottom label (default "")
  • the left label (default N)
  • the minimum X width
  • the minimum Y height
  • the shape (default rectangle)

As I said, this is overkill (and I was bored:)

0

Final version:

\documentclass[tikz,margin=1mm]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\sffamily
\begin{tikzpicture}
\begin{scope}[local bounding box=a]
\node[minimum width=2cm,line width=0.199mm,minimum   height=3cm,draw=black] (main-a) {R};
\path (main-a.west) node[left] {N} (main-a.north) node[above] {M};
\end{scope}
\begin{scope}[local bounding box=b2]
\node[minimum width=2cm,line width=0.199mm,minimum height=1cm,draw=blue,below right=of main-a] (main-b2) {};
\path (main-b2.east) node[right] {K} (main-b2.north) node[above] {M};
\end{scope}
\begin{scope}[local bounding box=b1]
\node[minimum width=1cm,line width=0.199mm,minimum height=3cm,draw=blue,below left=of main-a] (main-b1) {};
\path (main-b1.west) node[left] {N} (main-b1.north) node[above] {K};
\end{scope}
\draw[-stealth] (main-a.south) -- (b1.north east);
\draw[-stealth] (main-a.south) -- (b2.north west);
\end{tikzpicture}
\end{document}
New contributor
naveganteX is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.

Your Answer

naveganteX is a new contributor. Be nice, and check out our Code of Conduct.

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.