Leyenda y título del gráfico de araña

Leyenda y título del gráfico de araña

Me gustaría agregar: leyenda (rojo, azul y verde) y título de figura (con leyenda) para mi diagrama de Keviat. El código de mi keviat se enumera a continuación. Gracias

\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[upright]{fourier}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tkz-kiviat,numprint,fullpage}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}[label distance=.15cm,rotate=30,scale=0.75]

\tkzKiviatDiagram[radial=3,lattice=7,gap=1,step=1,label space=2]%
    {Cover,
    Droppings,
    Other,
    }
\tkzKiviatLine[thick,color=red,fill=red,label=SiteA](0.78,5.59,2.02);label{p4}
    \tkzKiviatLine[thick,color=blue,fill=blue](5.92,1.57,3.06);label{p5}
    \tkzKiviatLine[thick,color=green,fill=green](2.9,4.6,3.6);label{p6}
    \tkzKiviatGrad[suffix=\%,unity=10](0)
\end{tikzpicture}


\end{document}   

Respuesta1

He aquí una posibilidad. Si desea que su objeto sea tratado como un objeto flotante, puede usar el figureentorno y luego el comando estándar \captionpara proporcionar el título (como lo hice en mi primer código de ejemplo). Si no desea que su diagrama flote, puede usar un minipageentorno y el \captionofcomando integrado en las clases de KOMA-Script para proporcionar el título (como lo hice en mi segundo código de ejemplo).

Para diseñar la leyenda, puedes usar a \nodey a tabular, en la posición deseada; Por supuesto, puedes cambiar la configuración según tus necesidades.

Primero, tratando el diagrama como un figureobjeto flotante:

\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[upright]{fourier}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tkz-kiviat,numprint,fullpage}
\usepackage{pgfplots}
\usetikzlibrary{arrows}

\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}

\newcommand\ColorBox[1]{\textcolor{#1}{\rule{2ex}{2ex}}}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}[label distance=.15cm,rotate=30,scale=0.75]

\tkzKiviatDiagram[radial=3,lattice=7,gap=1,step=1,label space=2]%
    {Cover,
    Droppings,
    Other,
    }
\tkzKiviatLine[thick,color=red,fill=red,label=SiteA](0.78,5.59,2.02);label{p4}
    \tkzKiviatLine[thick,color=blue,fill=blue](5.92,1.57,3.06);label{p5}
    \tkzKiviatLine[thick,color=green,fill=green](2.9,4.6,3.6);label{p6}
    \tkzKiviatGrad[suffix=\%,unity=10](0)
\node[anchor=south west,xshift=-60pt,yshift=40pt] at (current bounding box.south east) 
{
\begin{tabular}{@{}lp{3cm}@{}}
\ColorBox{red!50} & red description \\
\ColorBox{green!50} & green description \\
\ColorBox{blue!50} & blue description \\
\end{tabular}
};
\end{tikzpicture}
\caption{A caption for the diagram}
\label{fig:test}
\end{figure}

\end{document} 

ingrese la descripción de la imagen aquí

Y sin flotación:

\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[upright]{fourier}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tkz-kiviat,numprint,fullpage}
\usepackage{capt-of}
\usepackage{pgfplots}
\usetikzlibrary{arrows}

\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}

\newcommand\ColorBox[1]{\textcolor{#1}{\rule{2ex}{2ex}}}

\begin{document}

\noindent\begin{minipage}{\linewidth}
\centering
\begin{tikzpicture}[label distance=.15cm,rotate=30,scale=0.75]

\tkzKiviatDiagram[radial=3,lattice=7,gap=1,step=1,label space=2]%
    {Cover,
    Droppings,
    Other,
    }
\tkzKiviatLine[thick,color=red,fill=red,label=SiteA](0.78,5.59,2.02);label{p4}
    \tkzKiviatLine[thick,color=blue,fill=blue](5.92,1.57,3.06);label{p5}
    \tkzKiviatLine[thick,color=green,fill=green](2.9,4.6,3.6);label{p6}
    \tkzKiviatGrad[suffix=\%,unity=10](0)
\node at (current bounding box.east) 
{
\begin{tabular}{@{}ll@{}}
\ColorBox{red} & red description \\
\ColorBox{green} & green description \\
\ColorBox{blue} & blue description \\
\end{tabular}
};
\end{tikzpicture}
\captionof{figure}{A caption for the diagram}
\label{fig:test}
\end{minipage}

\end{document}

En las clases estándar book, report, se puede acceder articleal \captionofcomando a través de uno de los paquetescapt-ofocaption.

Respuesta2

Con PSTricks.

ingrese la descripción de la imagen aquí

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
\usepackage{multido}

\makeatletter
\def\LoadVerbs{\pstVerb{/pt2cm {\strip@pt\psunit\space div} bind def}}
\makeatother

\psset{opacity=0.5,fillstyle=solid}     

\def\Atom#1%
{
    \multido{\i=1+1}{#1}{\psline[linecolor=gray](\i,0)(0,\i)}
    \psline{->}(!#1 12 pt2cm add 0)
}

\def\Molecule#1%
{
    \multido{\i=0+90}{4}{\rput{\i}(0,0){\Atom{#1}}}
    \multido{\ix=1+1,\i=10+10}{#1}{\rput*{*0}(!\ix\space 6 pt2cm sub -10 pt2cm){\i\%}}
    \foreach \a/\t in {0/Right,90/Top,180/Left,270/Bottom}{\pnode(!#1 42 pt2cm add \a\space PtoC){\t}}
}

\def\Label(#1,#2)#3%
{
    \psframe[linecolor=#3,fillcolor=#3](#1,#2)(!#1 12 pt2cm add #2 12 pt2cm add)
    \rput[l](!#1 18 pt2cm add #2 6 pt2cm add){#3 description}
}

\addtopsstyle{gridstyle}{griddots=0}
\begin{document}
\begin{pspicture}[showgrid=false](-8,-8)(9,8)
\LoadVerbs
\rput{30}(0,0)
{
    \Molecule{7}
    \pspolygon[linecolor=red,fillcolor=red](0.75,0)(0,6.75)(-2,0)
    \pspolygon[linecolor=green,fillcolor=green](3,0)(0,4.75)(-3.75,0)
    \pspolygon[linecolor=blue,fillcolor=blue](6,0)(0,1.75)(-3,0)
    \foreach \n/\t in {Right/Cover,Top/Droppings,Left/Other}{\rput{*0}(\n){\t}}%! removing white space
}
\foreach \y/\c in {-3/red,-4/green,-5/blue}{\Label(5,\y){\c}}
\end{pspicture}
\end{document}

¿Cómo se hace?

ingrese la descripción de la imagen aquí

\documentclass{beamer}
\usepackage{pst-node}
\usepackage{multido}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{pspicture}
\PreviewBorder=12pt

\makeatletter
\def\LoadVerbs{\pstVerb{/pt2cm {\strip@pt\psunit\space div} bind def}}
\makeatother

\psset{opacity=0.5,fillstyle=solid}     

\def\Atom#1%
{
    \multido{\i=1+1}{#1}{\psline[linecolor=gray](\i,0)(0,\i)}
    \psline{->}(!#1 12 pt2cm add 0)
}

\def\Molecule#1%
{
    \multido{\i=0+90}{4}{\only<+->{\rput{\i}(0,0){\Atom{#1}}}}
    \only<+->{\multido{\ix=1+1,\i=10+10}{#1}{\rput*{*0}(!\ix\space 6 pt2cm sub -10 pt2cm){\i}}}%!
    \foreach \a/\t in {0/Right,90/Top,180/Left,270/Bottom}{\pnode(!#1 42 pt2cm add \a\space PtoC){\t}}%!
}

\def\Label(#1,#2)#3%
{
    \psframe[linecolor=#3,fillcolor=#3](#1,#2)(!#1 12 pt2cm add #2 12 pt2cm add)
    \rput[l](!#1 18 pt2cm add #2 6 pt2cm add){#3 description}
}

\addtopsstyle{gridstyle}{griddots=0}
\begin{document}
\begin{frame}
\begin{pspicture}[showgrid=false](-8,-8)(9,8)
\LoadVerbs
\rput{30}(0,0)
{
    \Molecule{7}%!
    \only<+->{\pspolygon[linecolor=red,fillcolor=red](0.75,0)(0,6.75)(-2,0)}%!
    \only<+->{\pspolygon[linecolor=green,fillcolor=green](3,0)(0,4.75)(-3.75,0)}%!
    \only<+->{\pspolygon[linecolor=blue,fillcolor=blue](6,0)(0,1.75)(-3,0)}%!
    \foreach \n/\t in {Right/Cover,Top/Droppings,Left/Other}{\only<+->{\rput{*0}(\n){\t}}}%! removing white space
}
\foreach \y/\c in {-3/red,-4/green,-5/blue}{\only<+->{\Label(5,\y){\c}}}
\end{pspicture}
\end{frame}
\end{document}

Respuesta3

El método más sencillo con tikz:

Primero definí un punto (LegendBox_anchor), es un ancla para el cuadro de la leyenda. Luego usé una línea para mostrar el color usado para una línea tkzKiviatDiagram. Las diferentes líneas se colocan con (LegendBox_anchor). La descripción es un simple agregado de nodo al final de la línea. anchor=westSe utiliza para alinear correctamente las descripciones.

\coordinate[xshift=-2cm] (LegendBox_anchor) at (current bounding box.south east) ;
\draw[line width=3mm,color=red] (LegendBox_anchor) -- ++(.5,0) node[anchor=west] {red description};
\draw[line width=3mm,color=blue] ([yshift=8mm]LegendBox_anchor) -- ++(.5,0) node[anchor=west] {blue description};
\draw[line width=3mm,color=green] ([yshift=16mm]LegendBox_anchor) -- ++(.5,0) node[anchor=west] {green description};

Es posible en lugar de líneas utilizar rectángulos o nodos. Los nodos tienen varias ventajas para obtener algunas mejoras, pero intenté crear algo fácil de usar.

Otra posibilidad es definir un cuadro alrededor de la descripción diferente. Puedo si agregas esta posibilidad más adelante.

Ahora quizás sea interesante agregar una macro al paquete para obtener leyendas. Aquí agregué una macro simple (primero intente extender el paquete)

\newcommand{\LegendBox}[3][]{%
\coordinate[#1] (LegendBox_anchor) at (#2) ;
    \foreach \col/\item [count=\hi from 0] in {#3} {
    \draw[line width=3mm,color=\col] ([yshift=\hi*8mm]LegendBox_anchor) -- ++(.5,0) 
                                    node[anchor=west] {\item}
                                    ;}
}

Se basa en las primeras líneas. El argumento n.º 1 se utiliza para obtener una mejor posición del cuadro de leyenda si es necesario.

\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[upright]{fourier}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tkz-kiviat,numprint,fullpage}
\usepackage{pgfplots}
\usetikzlibrary{arrows}

\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}

\newcommand{\LegendBox}[3][]{%
\coordinate[#1] (LegendBox_anchor) at (#2) ;
    \foreach \col/\item [count=\hi from 0] in {#3} {
    \draw[line width=3mm,color=\col] ([yshift=\hi*8mm]LegendBox_anchor) -- ++(.5,0) 
                                    node[anchor=west] {\item}
                                    ;}
}

\begin{document}

\begin{tikzpicture}[label distance=.15cm,scale=0.75]
\begin{scope}[rotate=30]
    \tkzKiviatDiagram[radial=3,lattice=7,gap=1,step=1,label space=2]%
        {Cover,
        Droppings,
        Other,}
        \tkzKiviatLine[thick,color=red,fill=red,label=SiteA](0.78,5.59,2.02)
        \tkzKiviatLine[thick,color=blue,fill=blue](5.92,1.57,3.06)
        \tkzKiviatLine[thick,color=green,fill=green](2.9,4.6,3.6)
        \tkzKiviatGrad[suffix=\%,unity=10](0)
\end{scope}
\LegendBox[xshift=-2cm]{current bounding box.south east}%
          {red/red decription,
           blue/blue description,
           green/green }
\end{tikzpicture}
\end{document} 

ingrese la descripción de la imagen aquí

Observación: no es necesario agregar ;al final de\tkzKiviatLine

Actualizar :

Agregué un cuadro alrededor de las leyendas, eliminé algunas. ;Usé nodos en lugar de líneas.

\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[upright]{fourier}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tkz-kiviat,numprint,fullpage}
\usepackage{pgfplots}
\usetikzlibrary{arrows,fit}

\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}

\newcommand{\LegendBox}[3][]{%
\xdef\fitbox{}%
\coordinate[#1] (LegendBox_anchor) at (#2) ;
    \foreach \col/\item [count=\hi from 0] in {#3} {
       \node[color = \col,draw,
             fill  = \col!50,
             minimum width  = 4 ex,
             minimum height = 2 ex,
             label={[anchor = left,name=b\hi]right:\item}] at ([yshift=\hi*4 ex]LegendBox_anchor) {};
             \xdef\fitbox{\fitbox(b\hi)}
   }%
 \node [draw,fit=\fitbox(LegendBox_anchor)] {};
}

\begin{document}
\begin{tikzpicture}[label distance=.15cm,scale=0.75]
\begin{scope}[rotate=30]
    \tkzKiviatDiagram[radial=3,lattice=7,gap=1,step=1,label space=2]%
        {Cover,
        Droppings,
        Other}
        \tkzKiviatLine[thick,color=red,fill=red,label=SiteA](0.78,5.59,2.02)
        \tkzKiviatLine[thick,color=blue,fill=blue](5.92,1.57,3.06)
        \tkzKiviatLine[thick,color=green,fill=green](2.9,4.6,3.6)
        \tkzKiviatGrad[suffix=\%,unity=10](0)
\end{scope}
\LegendBox[shift={(-3cm,3cm)}]{current bounding box.south east}%
          {red/red decription,
           blue/blue description,
           green/green description }
\end{tikzpicture}
\end{document} 

ingrese la descripción de la imagen aquí

información relacionada