Ich versuche mich gerade an einem Kreisdiagramm, um Wahlergebnisse darzustellen. (Wie ordne ich in einem Kreisdiagramm einzelnen Abschnitten feste Farben zu?). Die Wahlergebnisse möchte ich auch als Balkendiagramm ausgeben. Ist es möglich mit einem Datensatz zwei verschiedene Ausgaben (Kreis- und Balkendiagramme) erreichen oder funktioniert das grds. nicht?

gefragt 10 Jan '16, 15:15

Tischa's gravatar image

Tischa
1.4k27102128
Akzeptiert-Rate: 15%

bearbeitet 10 Jan '16, 15:16


Ich speichere den Datensatz einfach im Makro \data, dann muss ich ihn nicht in jeder \foreach Schleife wiederholen. Das ganze würde prinzipiell auch in einer einzelnen Schleife gehen, ist meines Erachtens nach aber nicht praktikabel.

Open in Online-Editor
\documentclass[tikz]{standalone}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\definecolor{deep brown}{RGB}{125,91,49}
\definecolor{dark blue}{RGB}{0,0,181}
\definecolor{dark green}{RGB}{72,142,65}
\definecolor{crimson red}{RGB}{198,18,24}
\definecolor{light red}{RGB}{255,51,0}
\def\angle{0}
\def\radius{3}
\newcommand\square[1]{%
  \tikz\filldraw[color=#1] (0,0) rectangle (1.5ex,1.5ex);%
}
\newcount\ind
\begin{document}

\newcommand\data{
  14.8/Framsóknarflokkur/deep brown,
  23.7/Sjálfstæðisflokkur/dark blue,
  7.2/Borgarahreyfingin/blue,
  0.6/Lýðræðishreyfingin/light red,
  29.8/Samfylkingin/crimson red,
  21.7/Vinstrihreyfingin--grænt framboð/dark green,
  2.2/Sonstige/gray%
}

\begin{tikzpicture}
  \begin{scope}
    \global\ind=-1
    \foreach \percent/\name/\color in \data {
      \ifx\percent\empty\else                 % If \percent is empty, do nothing
      \global\advance\ind by 1              % Advance list index
      % Draw angle and set labels
      \filldraw[color=\color] (0,0) -- (\angle:\radius) arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
      \node[anchor=base west] at (\radius+2,1.5-.5*\ind) {\square{\color} \name};
      \node[pin=\angle+0.5*\percent*3.6:\percent\%] at (\angle+0.5*\percent*3.6:\radius) {};
      \pgfmathparse{\angle+\percent*3.6}    % Advance angle
      \xdef\angle{\pgfmathresult}           %   and store in \angle
      \fi
    };    
  \end{scope}

  \pgfmathsetmacro\barmaxheight{5}
  \begin{scope}[shift={(-2,-4-\barmaxheight)}]
    \draw[<->] (0,\barmaxheight+0.5) |- (8,0);
    \draw (2pt,\barmaxheight) -- (-2pt,\barmaxheight) node[left] {100\%};
    \draw (2pt,.5*\barmaxheight) -- (-2pt,.5*\barmaxheight) node[left] {50\%};
    \global\ind=-1
    \foreach \percent/\name/\color in \data {
      \ifx\percent\empty\else                 % If \percent is empty, do nothing
      \global\advance\ind by 1              % Advance list index
      % Draw angle and set labels
      \filldraw[color=\color] (\ind+.7,0) rectangle (\ind+1.2,\barmaxheight/100*\percent);
      \node[above] at (\ind+1,\barmaxheight/100*\percent) {\percent\%};
      \node[rotate=45,anchor=base east,yshift=-1ex] at (\ind+1,0) {\name};
      \fi
    };    
  \end{scope}
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 10 Jan '16, 16:03

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 10 Jan '16, 16:42

Genial. Vielen Dank.:-D

(10 Jan '16, 17:12) Tischa

Moin, ich hab in meiner Hauptdatei mehrere Wahlergebnisse, die ich mit Wahlergebnis2009.tex, Wahlergebnis2013.tex einbinden möchte. Leider erhalte ich dann immer die Fehlermeldung:

! LaTeX Error: Command data already defined. Or name end... illegal, see p.192 of the manual.

...

l.37 }

? ! Emergency stop. ...

l.37 }

(12 Dez '17, 19:48) Tischa

@Tischa: Die Fehlermeldung sagt doch alles: Du versuchst \data mit \newcommand neu zu definieren, obwohl es bereits definiert ist. Entweder definierst Du zwei unterschiedliche Befehle, beispielsweise \dataA und \dataB oder Du verwendest beim zweiten Mal \renewcommand. Letzteres geht natürlich nur, wenn Du danach das ursprüngliche \data nicht mehr benötigst. Und zukünftig stellst Du bitte eine neue Frage mit passendem vollständigem Minimalbeispiel. Das gilt auch, wenn dieser Kommentar als Antwortersatz Dir nicht genügt.

(12 Dez '17, 20:17) saputello
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×11
×7

gestellte Frage: 10 Jan '16, 15:15

Frage wurde gesehen: 5,376 Mal

zuletzt geändert: 12 Dez '17, 20:17