这个问题导致了一个新的方案的出现:
tkz-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}
另一种解决方案是使用包含数据的外部文件
\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
答案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}