Kiviat 图:如何自动在每个球附近添加数值

Kiviat 图:如何自动在每个球附近添加数值

平均能量损失

\documentclass[border=10pt]{standalone}

\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tkz-kiviat,numprint,fullpage}
\usetikzlibrary{arrows}
\thispagestyle{empty}

\begin{document} 

\begin{tikzpicture}
\tkzKiviatDiagram[
radial  = 5,
gap     = 1,  
lattice = 5]{CO1,CO2,CO3,CO4,CO5}

\tkzKiviatLine[
ultra thick, 
color=blue, 
mark=ball,
mark size=4pt,
fill=blue!20,opacity=.5
](3,3.5,3,4,3.8)

\tkzKiviatGrad[prefix=,unity=1](5) 

\end{tikzpicture}
\end{document} 

结果

在此处输入图片描述


如何在相应点附近添加值 3、3.5、3、4 和 3.8......

答案1

以下示例使用一些内部函数来定义一个坐标系,其中rang包含轴数和的选项value。然后将标签放置在适当的位置。该示例还涉及\tkzKiviatLine记住第二个示例中所需的值列表。

\documentclass[border=10pt]{standalone}

\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tkz-kiviat,numprint,fullpage}
\usetikzlibrary{arrows}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\thispagestyle{empty}

\makeatletter
\let\org@tkz@KiviatLine\tkz@KiviatLine
\def\tkz@KiviatLine[#1](#2,#3){%
  \def\KiviatValues{#2,#3}%
  \org@tkz@KiviatLine[{#1}]({#2},{#3})%
}

\newcommand*{\KiviatRadial}{\tkz@kiv@radial}

\define@key{kiviatkeys}{rang}{\pgfmathsetmacro\kiviat@rang{#1}}
\define@key{kiviatkeys}{value}{\pgfmathsetmacro\kiviat@value{#1}}
\tikzdeclarecoordinatesystem{kiviat}{%
  \setkeys{kiviatkeys}{#1}%
  \pgfpointpolarxy{%
    360/\tkz@kiv@radial*\kiviat@rang
  }{%
    \kiviat@value*\tkz@kiv@gap*\tkz@kiv@step
  }%
}
\makeatother

\begin{document} 

\begin{tikzpicture}
\tkzKiviatDiagram[
  radial  = 5,
  gap     = 1,
  lattice = 5,
]{CO1,CO2,CO3,CO4,CO5}

\tkzKiviatLine[
  ultra thick, 
  color=blue, 
  mark=ball,
  mark size=4pt,
  fill=blue!20,opacity=.5,
](3,3.5,3,4,3.8)

\tkzKiviatGrad[prefix=,unity=1](5) 

\def\x(#1,#2)[#3]{%
  (kiviat cs:rang=#1, value=#2) node[#3] {#2}%
}
\path
  \x(0, 3)[above right]
  \x(1, 3.5)[above left]
  \x(2, 3)[below left=-.2em and .2em]
  \x(3, 4)[below=.3em]
  \x(4, 3.8)[below right=-.1em and .1em]
;

\end{tikzpicture}
\end{document} 

结果

寻找标签最佳放置位置的算法要麻烦得多。必须考虑轴角、值、标签大小、与相邻点的连接线。因此,以下示例只是第一步,只需将标签放置在轴外侧点附近即可。

\path
  \foreach \v [count=\rang from 0] in \KiviatValues {
    ($(kiviat cs:rang=\rang, value=\v)!-.55em!(0, 0)$)
    node[
      anchor=360/\KiviatRadial*\rang-180,
      circle,
      inner sep=.1em,
      fill=white,
    ] {\v}
  }
;

结果

与正常的白色背景相同:

结果

答案2

标记命令\tkzKiviatLabeling{<axis>}{<distance/pos>}{<label>} 因此,您可以使用在轴(第二轴)上\tkzKiviatLabeling{2}{3.5}{3.5}设置标签。您可以使用旋转标签位置,默认为度。轴上的距离是加上的值(在点和点之间添加额外的空间3.5CO2\tkzKiviatAxisAngAdd43.5\tkzKiviatAxisDistAdd

靠近每个球的参数:减少重叠问题

  • \tkzKiviatAxisDistAdd:点和标签之间的径向距离
  • \tkzKiviatAxisAngAdd:轴和标签之间的角度

可以用数组预先定义这些值\def\Values{{3,3.5,3,4,3.8}}(稍后在标记循环中使用),但它不起作用,\tkzKiviatLine[所以您必须像问题中那样添加这些值。

标签循环:

  \foreach[count=\i from 1] \x in {1,...,\tkzKiviatAxisCount}{ 
    \pgfmathparse{\Values[\i-1]}\edef\saveresult{\pgfmathresult}
    \tkzKiviatLabeling{\i}{\saveresult}{\saveresult}
    }

结果:

在此处输入图片描述

梅威瑟:

\documentclass[border=10pt]{standalone}
\usepackage{tkz-kiviat}
\usetikzlibrary{arrows}
\newcommand{\tkzKiviatAxisCount}{5}
\newcommand{\tkzKiviatAxisDistAdd}{\tkzKiviatAxisCount/10}%or value like 5...
\newcommand{\tkzKiviatAxisAngAdd}{4}%degree
\newcommand{\tkzKiviatLabeling}[3]{
\pgfmathsetmacro{\kivaxisangle}{360/\tkzKiviatAxisCount}
\pgfmathtruncatemacro{\direction}{#1-1}             
    \node at (\kivaxisangle*\direction+\tkzKiviatAxisAngAdd:#2+\tkzKiviatAxisDistAdd) {#3};
}
\def\Values{{3,3.5,3,4,3.8}}
\begin{document} 
\begin{tikzpicture}
\tkzKiviatDiagram[radial=\tkzKiviatAxisCount,gap=1,lattice = \tkzKiviatAxisCount]{CO1,CO2,CO3,CO4,CO5}
\tkzKiviatLine[ultra thick,color=blue,mark=ball,mark size=4pt,fill=blue!20,opacity=.5](3,3.5,3,4,3.8)        
\tkzKiviatGrad[prefix=,unity=1](\tkzKiviatAxisCount) 
%auto:
\foreach[count=\i from 1] \x in {1,...,\tkzKiviatAxisCount}{ 
\pgfmathparse{\Values[\i-1]}\edef\saveresult{\pgfmathresult}
\tkzKiviatLabeling{\i}{\saveresult}{\saveresult}
}
% manu:
%    \tkzKiviatLabeling{1}{3}{3}
%    \tkzKiviatLabeling{2}{3.5}{3.5}
%    \tkzKiviatLabeling{3}{3}{3}
%    \tkzKiviatLabeling{4}{4}{4}
%    \tkzKiviatLabeling{5}{3.8}{3.8}
\end{tikzpicture}
\end{document} 

相关内容