如何绘制 Kiviat 图

如何绘制 Kiviat 图

这个问题导致了一个新的方案的出现:
tkz-kiviat

有没有办法Kiviat 图容易地?

Kiviat 图表示例

答案1

制作一个使用 TikZ 构建 Kiviat Diagram 的包很有趣。此包现在在 CTAN 上: tkz-kiviat。您可以在我的主页上找到一些示例: kiviat 示例

第一个例子使用了三个带参数的宏。首先,创建一个蜘蛛,然后创建一个 kiviat 多边形,然后创建刻度

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

\begin{document} 
\begin{tikzpicture}
\tkzKiviatDiagram[scale=1.25,label distance=.5cm,
        radial  = 5,
        gap     = 1,  
        lattice = 5]{McCabe,LOC,Live Variables,Halstead N,Variablenspanne}
\tkzKiviatLine[thick,color=blue,mark=none,
               fill=blue!20,opacity=.5](3,3.5,3,3.5,3)
\tkzKiviatLine[thick,color=darkgray,
               fill=green!20,opacity=.5](0.5,1,0.5,0.75,1) 
\tkzKiviatLine[ultra thick,mark=ball,
                 mark size=4pt,color =Maroon](2,3.75,1,1.5,2)    
\tkzKiviatGrad[prefix=,unity=100,suffix=\ \texteuro](1)  
\end{tikzpicture}

\end{document}

kiviat 示例

另一种解决方案是使用包含数据的外部文件

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

\begin{document}

\begin{tikzpicture}
\tkzKiviatDiagramFromFile[
        scale=.5,
        label distance=.5cm,
        gap     = 1,label space=3,  
        lattice = 10]{tableae.dat}
\tkzKiviatLineFromFile[thick,
                       color      = blue,
                       mark       = ball,
                       ball color = blue,
                       mark size  = 4pt,
                       fill       = blue!20]{tableae.dat}{2}
\tkzKiviatLineFromFile[thick,
                       color      = red,
                       mark       = ball,
                       ball color = red,
                       mark size  = 4pt,
                       fill       = red!20]{tableae.dat}{1} 
\end{tikzpicture}

\end{document}

tableae.dat 文件与包 pgfplotstable.sty 一起使用

%tableae.dat
column1                    column2   column3 
Reliability                6           6.5
Usability                  4           9
{Application Architecture} 7           8
{Version Control}          6.5         7
Timeliness                 2           8
Efficiency                 3           4
Effectiveness              5           6.5
Interoperability           1.5         7 

带有外部文件的 kiviat 图

答案2

我会去取tikz包裹。

看一下例子。


我编写了一套粗略的宏,可能对您制作自己的宏有所帮助(调整这些宏,就应该没问题了)。

我自己并不是一个很厉害的程序员,所以也许其他人会想出更精致的东西,但目前这样就够了。我的编程技巧很好,代码很简单,所以你可能很快就能掌握它并根据你的需要进行调整。

有 4 个宏。主宏是\spider,它接受的参数与轴的数量相同(我为 8 个轴编写了代码,如果需要更多或更少,请使用命令\n和代码中的一些调整进行调整)。 的每个参数\spider代表相应轴上的一个值。

\outertolerance其工作方式与 spider 相同,并设置下一个要\spider考虑的外部公差带。同样的方式\innertolerance设置内部公差带的值。

\spider每次使用a 时,\outertolerance\innertolerance值都会重置为零(不绘制公差带)。您也可以手动重置它们,方法是使用\resettolerance

将此添加到序言中:

\usepackage{tikz}

\def\n{8}   %define how much axes you want
\def\N{5}   %define the number of node on each axis

\newcommand{\spider}[\n]{
    \begin{tikzpicture}[scale=0.5]

        \thebigtolerance

        \foreach \x in{0,1,...,\n}{%
            \draw[->] (0,0)--(360/\n*\x:\N+0.5);
            \foreach \y in{0,1,...,\N}{
                \draw[thin,lightgray](360/\n*\x:\y)--(360/\n*\x+360/\n:\y);
                \draw[fill] (360/\n*\x:\y) circle(0.75pt);
                }

        }

        \draw(360/\n:\N+0.5)node[right]{axis1};     %adjust the labels (also add or delete exces axes)
        \draw(2*360/\n:\N+0.5)node[above]{axis2};   %eg. if you have 6 axes, delete the last 2
        \draw(3*360/\n:\N+0.5)node[left]{axis3};        %or if you have 9 axes add one
        \draw(4*360/\n:\N+0.5)node[left]{axis4};
        \draw(5*360/\n:\N+0.5)node[left]{axis5};
        \draw(6*360/\n:\N+0.5)node[below]{axis6};
        \draw(7*360/\n:\N+0.5)node[right]{axis7};
        \draw(8*360/\n:\N+0.5)node[right]{axis8};

        \thesmalltolerance

        \draw[thick,draw=red](360/\n:#1)--(360/\n*2:#2)--(360/\n*3:#3)--(360/\n*4:#4)--(360/\n*5:#5)--(360/\n*6:#6)--(360/\n*7:#7)--(360/\n*8:#8)--cycle;
        %add or remove coordinates if you have more or less than 8 axes


    \end{tikzpicture}
    \resettolerance 
}


\newcommand{\thesmalltolerance}[0]{}
\newcommand{\innertolerance}[\n]{
    \renewcommand{\thesmalltolerance}{\draw[fill=gray,thick,opacity=0.3](360/\n:#1)--(360/\n*2:#2)--(360/\n*3:#3)--(360/\n*4:#4)--(360/\n*5:#5)--(360/\n*6:#6)--(360/\n*7:#7)--(360/\n*8:#8)--cycle;}
    %add or remove coordinates if you have more or less than 8 axes
}

\newcommand{\thebigtolerance}[0]{}
\newcommand{\outertolerance}[\n]{
    \renewcommand{\thebigtolerance}{
        \foreach \x in{1,2,...,\n}{
            \draw[draw=none,fill=gray,opacity=0.3](0,0)--(360/\n*\x:\N)--(360/\n*\x+360/\n:\N);}

        \draw[fill=white,thick,draw=gray](360/\n:#1)--(360/\n*2:#2)--(360/\n*3:#3)--(360/\n*4:#4)--(360/\n*5:#5)--(360/\n*6:#6)--(360/\n*7:#7)--(360/\n*8:#8)--cycle;
        %add or remove coordinates if you have more or less than 8 axes
    }
}

\newcommand{\resettolerance}[0]{%resets the tolerance band to none
    \renewcommand{\thebigtolerance}{}
    \renewcommand{\thesmalltolerance}{}
}

如上所述,您需要调整绘图命令以适应轴数。这意味着(360/\n*9:#9)--如果您想要九个轴,则需要添加。或者(360/\n*8:#8)--如果您想要 7 个轴,则需要删除。您应该在 3 个地方执行此操作(在命令中\spider,以及在\outertolerance和中)\innertolerance。每个命令的调整都应该相同。

您还可以通过调整数字来调整每个轴上的节点数\N。您可能还必须调整,scaling=0.5因为节点越多意味着图表越大。

我还制作了一个如何实际绘制蜘蛛图的示例:

\outertolerance{4}{4}{4}{3}{4}{4}{4.5}{4}%defines the outer toleranceband for next spider
\innertolerance{1}{1}{1}{1}{1}{2}{2}{1}%defines the inner toleranceband for next spider
\spider{2}{2}{2}{2}{3}{4}{4}{3}%draws the spider diagram with coordinates

希望这可以帮助!

例子

答案3

随着当前pstricks-add.tex你可以简化它:

\documentclass{article}
\usepackage{pstricks-add}
\def\Tab#1{\tabular{@{}l@{}}#1\endtabular}
\begin{document}

\psframebox*[fillcolor=yellow!15]{%
\begin{pspicture}(-6,-5)(5,5)
\psset{unit=1.2}
\psKiviat[rotate=0.5,
          yLabels={Marketing,Sales,Administration,\Tab{Information\\Technology},%
           \Tab{Customer\\Support},Developer},
  labelsep=10pt]{6}{3}
\psKiviatTicklines[Dx=0.5,linecolor=black!30]{6}{3}
\psKiviatAxes[linecolor=black!30]{7}{3}
\psKiviatLine[linewidth=2pt,linecolor=blue!60]{1,2,1,1.7,1.3,3}
\psKiviatLine[linewidth=2pt,linecolor=red!60]{2.25,2.5,0.6,1.2,1,1}
\multido{\rA=0.5+0.5,\iA=10+10}{6}{\uput[3](0,\rA){\$\iA}}
\end{pspicture}}

\clearpage
\begin{pspicture}(-5,-5)(5,5)
\psKiviat[fillstyle=solid,fillcolor=red!20,
  yLabels={McCabe,LOC,Live Variables,Halstead N,Variablenspanne},
  labelsep=20pt]{5}{4}
\psKiviatLine[fillstyle=solid,fillcolor=white]{3,3.5,3,3.5,3}
\psKiviatLine[fillstyle=solid,fillcolor=black!10]{0.5,1,0.5,0.75,1}
\psKiviatLine[dotstyle=square*,linewidth=1.5pt,linecolor=red]{2,3.75,1,1.5,2}
\psKiviatTicklines[Dx=0.5,subtickcolor=black!15]{5}{4}
\psKiviatAxes[arrows=->,arrowscale=2]{5}{4.5}
\end{pspicture}

\end{document}

在此处输入图片描述 在此处输入图片描述

相关内容