스파이더 그래프 범례 및 캡션

스파이더 그래프 범례 및 캡션

내 Keviat 플롯에 대한 범례(빨간색, 파란색 및 녹색) 및 그림 캡션(범례 포함)을 추가하고 싶습니다. 내 keviat의 코드는 다음과 같습니다. 감사합니다

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

답변1

여기에 한 가지 가능성이 있습니다. 개체를 부동 개체로 처리하려면 환경을 사용한 figure다음 표준 \caption명령을 사용하여 캡션을 제공할 수 있습니다(첫 번째 예제 코드에서 했던 것처럼). 다이어그램이 떠다니는 것을 원하지 않으면 KOMA 스크립트 클래스에 통합된 minipage환경과 명령을 사용하여 캡션을 제공할 수 있습니다(두 번째 예제 코드에서 했던 것처럼).\captionof

범례를 디자인하려면 원하는 위치에서 a \node및 a를 사용할 수 있습니다 . tabular물론 필요에 따라 설정을 변경할 수 있습니다.

먼저 다이어그램을 부동 figure개체로 처리합니다.

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

여기에 이미지 설명을 입력하세요

그리고 부양 없이:

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

표준 클래스에서 book명령 은 패키지 중 하나를 통해 액세스할 수 있습니다 report.article\captionofcapt-of또는caption.

답변2

PSTricks와 함께.

여기에 이미지 설명을 입력하세요

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

어떻게 만들어지나요?

여기에 이미지 설명을 입력하세요

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

답변3

tikz를 사용하는 가장 간단한 방법은 다음과 같습니다.

먼저 범례 상자의 앵커인 점(LegendBox_anchor)을 정의했습니다. 그런 다음 선을 사용하여 tkzKiviatDiagram 선에 사용되는 색상을 표시했습니다. 다른 줄은 (LegendBox_anchor)를 사용하여 배치됩니다. 설명은 줄 끝에 간단한 노드를 추가하는 것입니다. anchor=west설명을 올바르게 정렬하는 데 사용됩니다.

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

선 대신 직사각형이나 노드를 사용하는 것이 가능합니다. 노드는 몇 가지 개선을 통해 여러 가지 장점이 있지만 사용하기 쉬운 것을 만들려고 노력했습니다.

또 다른 가능성은 다른 설명 주위에 상자를 정의하는 것입니다. 나중에 이 가능성을 추가하면 그렇게 할 수 있습니다.

이제 범례를 얻기 위해 패키지에 매크로를 추가하는 것이 흥미로울 것입니다. 여기에 간단한 매크로를 추가했습니다(먼저 패키지 확장을 시도합니다).

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

첫 번째 줄을 기준으로 작성되었습니다. 인수 #1은 필요한 경우 범례 상자의 더 나은 위치를 얻는 데 사용됩니다.

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

여기에 이미지 설명을 입력하세요

;비고: 끝에 추가할 필요는 없습니다 .\tkzKiviatLine

업데이트 :

범례 주위에 상자를 추가하고 ;선 대신 노드를 사용한 일부를 제거했습니다.

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

여기에 이미지 설명을 입력하세요

관련 정보