diff options
author | Karl Berry <karl@freefriends.org> | 2011-06-07 23:53:32 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-06-07 23:53:32 +0000 |
commit | ec4ce05182cd69af8ab30b1da0cc46061a45efca (patch) | |
tree | bd46819899767aaca21d0b47106cb013b11af5c7 /Master/texmf-dist/tex/latex/tkz-kiviat | |
parent | b8dfbc9c6b54d6976e2d0ae38049c23c618afeed (diff) |
new graphics package tkz-kiviat (7jun11)
git-svn-id: svn://tug.org/texlive/trunk@22857 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/tkz-kiviat')
-rw-r--r-- | Master/texmf-dist/tex/latex/tkz-kiviat/tkz-kiviat.sty | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tkz-kiviat/tkz-kiviat.sty b/Master/texmf-dist/tex/latex/tkz-kiviat/tkz-kiviat.sty new file mode 100644 index 00000000000..d27d8e157b1 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-kiviat/tkz-kiviat.sty @@ -0,0 +1,244 @@ +% Copyright 2011 by Alain Matthes +% +% This file may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU Public License. +% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % % + % tkz-kiviat.sty encodage : utf8 % + % % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % % + % Créé par Alain Matthes le 07-02-2011 % + % % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Objet : kiviat chart or diagram + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tkz-kiviat}[2011/06/07 v0.1] +\RequirePackage{etex} +\RequirePackage{tikz} +\usetikzlibrary{backgrounds} +%<---------------------------------------------------------------------------> +\makeatletter +\def\tkzutil@empty{} +\newif\iftkz@kiv@table +\pgfkeys{% +/kiviat/.cd, +space/.code = {\def\tkz@kiv@sp{#1}}, +gap/.code = {\def\tkz@kiv@gap{#1}}, +lattice/.code = {\def\tkz@kiv@lattice{#1}}, +step/.code = {\def\tkz@kiv@step{#1}}, +radial style/.style = {->,>=latex'}, +lattice style/.style = {thin,lightgray}, +label style/.style = {text width=2 cm,align=center}, +label space/.code = {\def\tkz@kiv@space{#1}}, +/kiviat/.unknown/.code = {\let\searchname=\pgfkeyscurrentname + \pgfkeysalso{\searchname/.try=#1, + /tikz/\searchname/.retry=#1}} + } +\def\tkzKiviatDiagram{\pgfutil@ifnextchar[{\tkz@KiviatDiagram}{% + \tkz@KiviatDiagram[]}} +\def\tkz@KiviatDiagram[#1]#2{% + +\pgfkeys{/kiviat/.cd, +gap = .5, +lattice = 10, +space = .5, +step = 1, +label space = 1.5 +} +\pgfqkeys{/kiviat}{#1}% +\begingroup +\foreach \x [count=\rang from 1] in {#2}{% +\global\let\tkz@kiv@radial\rang}% +\foreach \x [count=\rang from 0] in {#2}{% + \draw[/kiviat/radial style] + (0,0)--(360/\tkz@kiv@radial*\rang:\tkz@kiv@lattice*\tkz@kiv@gap+\tkz@kiv@sp); + \path +(0,0)--(360/\tkz@kiv@radial*\rang:\tkz@kiv@lattice*\tkz@kiv@gap+\tkz@kiv@space) node[/kiviat/label style] {\x}; + +\foreach \y in {0,1,...,\tkz@kiv@lattice}{ + \draw[/kiviat/lattice style]% + (360/\tkz@kiv@radial*\rang:\y*\tkz@kiv@gap)--% + (360/\tkz@kiv@radial*\rang+360/\tkz@kiv@radial:\y*\tkz@kiv@gap); + } +} +\endgroup +} +%<---------------------------------------------------------------------------> +%<---------------------------------------------------------------------------> +\pgfkeys{/kiviatline/.cd, +fill/.code = {\global\def\tkz@kivl@fill{#1}}, +opacity/.code = {\global\def\tkz@kivl@opacity{#1}}, +/kiviatline/.unknown/.code ={\let\searchname=\pgfkeyscurrentname + \pgfkeysalso{\searchname/.try=#1, + /tikz/\searchname/.retry=#1}} +} +%<---------------------------------------------------------------------------> +\def\tkzKiviatLine{\pgfutil@ifnextchar[{\tkz@KiviatLine}{% + \tkz@KiviatLine[]}} +\def\tkz@KiviatLine[#1](#2,#3){% +\begingroup +\pgfkeys{/kiviatline/.cd, +fill= {}, +opacity=.5 +} +\pgfqkeys{/kiviatline}{#1}% opacity ?????? +\ifx\tkzutil@empty\tkz@kivl@fill \else +\begin{scope}[on background layer] + \path[fill=\tkz@kivl@fill,opacity=\tkz@kivl@opacity] (360/\tkz@kiv@radial*0:#2*\tkz@kiv@gap*\tkz@kiv@step) +\foreach \v [count=\rang from 1] in {#3}{% + -- (360/\tkz@kiv@radial*\rang:\v*\tkz@kiv@gap*\tkz@kiv@step) } -- (360/\tkz@kiv@radial*0:#2*\tkz@kiv@gap*\tkz@kiv@step); + \end{scope} + \fi +\draw[#1,opacity=1] (0:#2*\tkz@kiv@gap) plot coordinates {(360/\tkz@kiv@radial*0:#2*\tkz@kiv@gap*\tkz@kiv@step)} +\foreach \v [count=\rang from 1] in {#3}{% + -- (360/\tkz@kiv@radial*\rang:\v*\tkz@kiv@gap*\tkz@kiv@step) plot coordinates {(360/\tkz@kiv@radial*\rang:\v*\tkz@kiv@gap*\tkz@kiv@step)}} -- (360/\tkz@kiv@radial*0:#2*\tkz@kiv@gap*\tkz@kiv@step); +\endgroup +}% +%<---------------------------------------------------------------------------> +%<---------------------------------------------------------------------------> +\pgfkeys{/kiviatgrad/.cd, +graduation distance/.code = \def\tkz@kiv@grad{#1}, +prefix/.code = \def\tkz@kiv@prefix{#1}, +suffix/.code = \def\tkz@kiv@suffix{#1}, +unity/.code = \def\tkz@kiv@unity{#1}, +/kiviatgrad/.unknown/.code ={\let\searchname=\pgfkeyscurrentname + \pgfkeysalso{\searchname/.try=#1, + /tikz/\searchname/.retry=#1}} +} +%<---------------------------------------------------------------------------> +\def\tkzKiviatGrad{\pgfutil@ifnextchar[{\tkz@KiviatGrad}{\tkz@KiviatGrad[]}} +\def\tkz@KiviatGrad[#1](#2){% +\begingroup +\pgfkeys{/kiviatgrad/.cd, +graduation distance= 0 pt, +prefix ={}, +suffix={}, +unity=1 + } + \pgfqkeys{/kiviatgrad}{#1}% +\let\tikz@label@distance@tmp\tikz@label@distance +\global\let\tikz@label@distance\tkz@kiv@grad + \foreach \nv in {1,...,\tkz@kiv@lattice}{ + \pgfmathparse{\tkz@kiv@unity*\nv} + \pgfmathtruncatemacro{\result}{\pgfmathresult} + \protected@edef\tkz@kiv@gd{\tkz@kiv@prefix$\result$\tkz@kiv@suffix} + \path[/kiviatgrad/.cd,#1] (0:0)--(360/\tkz@kiv@radial*#2:\nv*\tkz@kiv@gap) + node[label=(360/\tkz@kiv@radial*#2)-90:\tkz@kiv@gd] {}; + } + \let\tikz@label@distance\tikz@label@distance@tmp +\endgroup +}% +%<---------------------------------------------------------------------------> +%<---------------------------------------------------------------------------> +\pgfkeys{% +/kiviatfile/.cd, +space/.code = {\def\tkz@kiv@sp{#1}}, +gap/.code = {\def\tkz@kiv@gap{#1}}, +lattice/.code = {\def\tkz@kiv@lattice{#1}}, +step/.code = {\def\tkz@kiv@step{#1}}, +radial style/.style = {->,>=latex'}, +lattice style/.style = {thin,lightgray}, +label style/.style = {text width=2 cm,align=center}, +label space/.code = {\def\tkz@kiv@space{#1}}, +/kiviatfile/.unknown/.code = {\let\searchname=\pgfkeyscurrentname + \pgfkeysalso{\searchname/.try=#1, + /tikz/\searchname/.retry=#1}} +} +%<---------------------------------------------------------------------------> +%<---------------------------------------------------------------------------> +\def\tkzKiviatDiagramFromFile{\pgfutil@ifnextchar[{\tkz@KiviatFile}{% + \tkz@KiviatFile[]}} +\def\tkz@KiviatFile[#1]#2{% +\pgfkeys{/kiviatfile/.cd, +gap = .5, +lattice = 10, +space = .5, +step = 1, +label space = 1.5, +table = false +} +\pgfqkeys{/kiviatfile}{#1}% +\begingroup +\pgfplotstablevertcat{\tkz@kivdata}{#2} +\pgfplotstablegetrowsof{\tkz@kivdata} +\pgfmathsetmacro{\nbrows}{\pgfplotsretval} +\pgfmathsetmacro{\rows}{\pgfplotsretval-1} +\pgfplotstablegetcolsof{\tkz@kivdata} +\pgfmathsetmacro{\cols}{\pgfplotsretval-1} +\pgfplotstablevertcat{\tkz@kivdata}{\tkz@kivdata} +\pgfplotstablegetelem{0}{[index] 0}\of{\tkz@kivdata} +\edef\tkz@kiv@radial{\nbrows} +\foreach \x [count=\rang from 0] in {0,...,\rows}{% + \pgfplotstablegetelem{\x}{[index] 0}\of{\tkz@kivdata} + \draw[/kiviatfile/radial style] + (0,0)--(360/\tkz@kiv@radial*\rang:\tkz@kiv@lattice*\tkz@kiv@gap+\tkz@kiv@sp); + \path +(0,0)--(360/\tkz@kiv@radial*\rang:\tkz@kiv@lattice*\tkz@kiv@gap+\tkz@kiv@space) node[/kiviatfile/label style] {\pgfplotsretval}; + +\foreach \y in {0,1,...,\tkz@kiv@lattice}{ + \draw[/kiviat/lattice style]% + (360/\tkz@kiv@radial*\rang:\y*\tkz@kiv@gap)--% + (360/\tkz@kiv@radial*\rang+360/\tkz@kiv@radial:\y*\tkz@kiv@gap); + } +} +\endgroup +} +%<---------------------------------------------------------------------------> +%<---------------------------------------------------------------------------> +\pgfkeys{/kiviatlinefile/.cd, +fill/.code = {\global\def\tkz@kivl@fill{#1}}, +opacity/.code = {\global\def\tkz@kivl@opacity{#1}}, +/kiviatlinefile/.unknown/.code ={\let\searchname=\pgfkeyscurrentname + \pgfkeysalso{\searchname/.try=#1, + /tikz/\searchname/.retry=#1}} +} +%<---------------------------------------------------------------------------> +\def\tkzKiviatLineFromFile{\pgfutil@ifnextchar[{\tkz@KiviatLineFile}{% + \tkz@KiviatLineFile[]}} +\def\tkz@KiviatLineFile[#1]#2#3{% +\begingroup +\pgfkeys{/kiviatlinefile/.cd, +fill= {}, +opacity=0.5 +} +\pgfqkeys{/kiviatlinefile}{#1}% +\pgfplotstablevertcat{\tkz@kivdata}{#2} +\pgfplotstablegetrowsof{\tkz@kivdata} +\pgfmathsetmacro{\nbrows}{\pgfplotsretval} +\pgfmathsetmacro{\rows}{\pgfplotsretval-1} +\pgfplotstablegetcolsof{\tkz@kivdata} +\pgfmathsetmacro{\cols}{\pgfplotsretval-1} +\pgfplotstablevertcat{\tkz@kivdata}{\tkz@kivdata} +\pgfplotstablegetelem{0}{[index] 0}\of{\tkz@kivdata} +\edef\tkz@kiv@radial{\nbrows} +\ifx\tkzutil@empty\tkz@kivl@fill \else +\begin{scope}[on background layer] + \pgfplotstablegetelem{0}{[index] #3}\of{\tkz@kivdata} + \let\actualval\pgfplotsretval +\path[fill=\tkz@kivl@fill,opacity=\tkz@kivl@opacity] + (0:\actualval*\tkz@kiv@gap*\tkz@kiv@step) + \foreach \v [count=\rang from 1] in {1,...,\nbrows}{% + \pgfextra{\pgfplotstablegetelem{\v}{[index] #3}\of{\tkz@kivdata}} + -- (360/\tkz@kiv@radial*\v:\pgfplotsretval*\tkz@kiv@gap*\tkz@kiv@step) + }; + \end{scope} + \fi + \foreach \v [count=\rang from 1] in {0,...,\nbrows}{% + \pgfplotstablegetelem{\v}{[index] #3}\of{\tkz@kivdata} + \let\actualval\pgfplotsretval + \pgfplotstablegetelem{\rang}{[index] #3}\of{\tkz@kivdata} + \let\nextval\pgfplotsretval + \draw[#1,opacity=1] (360/\tkz@kiv@radial*\v:\actualval*\tkz@kiv@gap) + -- (360/\tkz@kiv@radial*\rang:\nextval*\tkz@kiv@gap*\tkz@kiv@step) + plot coordinates {(360/\tkz@kiv@radial*\rang:\nextval*\tkz@kiv@gap*\tkz@kiv@step)}; + } +\endgroup +}% + +%<--------------------------- the end ---------------------------------------> +\endinput |