1
1

Hallo an alle Forenmitglieder, ich habe folgendes Problem mit meinem Kreisdiagramm. Ich würde gerne die einzelnen Sektoren im Kreisdiagramm farblich voneinander unterscheiden. Momentan wird der ganze Kreis in rot ausgefühlt, da in der foreach-schleife alle Felder so formatiert werden. Besteht die Möglichkeit trotz Schleife das separat anzupassen? Des Weiteren finde ich die Prozentangaben im kleinsten Feld nicht optimal gelöst. Schöner fände ich es, wenn dort die Linien unterbrochen sind. Vielen Dank schon einmal vor ab...

Open in writeLaTeX
\documentclass[11pt]{scrreprt}
\usepackage[top=2cm,left=3cm,right=3cm,bottom=4cm]{geometry}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{paralist}           
\usepackage{tikz}
\usetikzlibrary{mindmap,trees}
\usetikzlibrary{matrix}
\usetikzlibrary{decorations.pathreplacing}
\usetikzlibrary{positioning,shadings}

\begin{document}
\begin{center}
\begin{tikzpicture}
    \foreach \start/\end/\middle/\percent/\anchor/\name in {
      0/263/131/72.9/above/Dienstleistungsbereich inkl. Baugewerbe/72.9,
      263/357/310/26.2/below/Produzierendes Gewerbe/26.2,
      357/360/358/0.9/right/Land- und Forstwirtschaft/0.9}
  {
    \draw[fill=red] (0,0) -- (\end:3cm) arc (\end:\start:3cm)
      node at (\middle:1.8cm) {\percent \%};
    \draw (\middle:3cm) -- (\middle:3.9cm) node[\anchor] {\name};
  };
\end{tikzpicture}
\end{center}
\end{document}

gefragt 07 Mai '14, 15:47

sascha's gravatar image

sascha
17171017
Akzeptiert-Rate: 50%

bearbeitet 07 Mai '14, 16:12

esdd's gravatar image

esdd
17.8k284257


Du kannst zum Beispiel die angegebenen Prozentzahlen nutzen, um Farben zu mischen. Die Linien zwischen den Kreissegmenten würde ich ganz weglassen. Den mittleren Winkel kann man in jeder Schleife berechnen lassen:

Open in writeLaTeX
\documentclass[tikz,margin=5mm]{standalone}

\begin{document}
\begin{tikzpicture}
  \def\radius{3}% Kreisradius festlegen
  \foreach \start/\end/\percent/\anchor/\name in {
      0/263/72.9/above/Dienstleistungsbereich inkl. Baugewerbe,
      263/357/26.2/below/Produzierendes Gewerbe,
      357/360/0.9/right/Land- und Forstwirtschaft
    }
    {\pgfmathsetmacro\middle{0.5*(\start+\end)}
     \path[fill=red!\percent!yellow] (0,0) -- (\end:\radius) arc (\end:\start:\radius)
                        node at (\middle:{0.55*\radius}) {\percent \%};
     \draw (\middle:\radius) -- (\middle:{1.3*\radius}) node[\anchor] {\name};
    };
  \draw[thin]circle[radius=\radius];% Kreis zeichnen
\end{tikzpicture}
\end{document}

alt text

Alternativ kann man natürlich auch für jedes Segment eine Farbe in die Schleife einbeziehen und die Prozentangaben mit einem transparenten weißen Hintergrund versehen:

Open in writeLaTeX
\documentclass[tikz,margin=5mm]{standalone}

\begin{document}
\begin{tikzpicture}
  \def\radius{3}% Kreisradius festlegen
  \foreach \start/\end/\farbe/\percent/\anchor/\name in {
      0/263/red/72.9/above/Dienstleistungsbereich inkl. Baugewerbe,
      263/357/green/26.2/below/Produzierendes Gewerbe,
      357/360/blue/0.9/right/Land- und Forstwirtschaft
    }
    {\pgfmathsetmacro\middle{0.5*(\start+\end)}
     \draw[fill=\farbe] (0,0) -- (\end:\radius) arc (\end:\start:\radius)
        node[fill=white, opacity=0.7, text opacity=1,inner sep=1pt]% leicht transparent
          at (\middle:{0.55*\radius}) {\percent \%};
     \draw (\middle:\radius) -- (\middle:{1.3*\radius}) node[\anchor] {\name};
    };
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 07 Mai '14, 16:27

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 18 Sep '14, 23:58

Vielen lieben Dank für die schnell Antwort esdd! Das gefällt mir so schon ganz gut. Prima ;-)

(07 Mai '14, 17:03) sascha

In meiner Lösung muss man weder Farbe noch irgendwelche Anker angeben. Ein Zähler läuft selbstständig durch eine sog. "cycle list" und wählt einfach immer die nächste Farbe aus. Dann fängt er wieder von vorne an. Weiter unten ist ein Beispiel, das dieses Verhalten zeigt.

Open in writeLaTeX
\documentclass[tikz]{standalone}
\begin{document}
\def\angle{0}
\def\radius{3}
\def\cyclelist{{"orange","blue","red","green"}}
\newcount\cyclecount \cyclecount=-1
\newcount\ind \ind=-1
\begin{tikzpicture}
  \foreach \percent/\name in {
      72.9/Dienstleistungsbereich inkl. Baugewerbe,
      26.2/Produzierendes Gewerbe,
      0.9/Land- und Forstwirtschaft,
    } {
      \ifx\percent\empty\else                 % If \percent is empty, do nothing
        \global\advance\cyclecount by 1       % Advance cyclecount
        \global\advance\ind by 1              % Advance list index
        \ifnum3<\cyclecount                   % If cyclecount is larger than list
          \global\cyclecount=0                %   reset cyclecount and
          \global\ind=0                       %   reset list index
        \fi
        \pgfmathparse{\cyclelist[\the\ind]}   % Get color from cycle list
        \edef\color{\pgfmathresult}           %   and store as \color
        % Draw angle and set labels
        \draw[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius) arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
        \node at (\angle+0.5*\percent*3.6:0.7*\radius) {\percent\%};
        \node[pin=\angle+0.5*\percent*3.6:\parbox{3cm}{\raggedright\name}] at (\angle+0.5*\percent*3.6:\radius) {};
        \pgfmathparse{\angle+\percent*3.6}    % Advance angle
        \xdef\angle{\pgfmathresult}           %   and store in \angle
      \fi
    };
\end{tikzpicture}
\end{document}

alt text

Beispiel für die cycle list

Open in writeLaTeX
\documentclass[tikz]{standalone}
\begin{document}
\def\angle{0}
\def\radius{3}
\def\cyclelist{{"orange","blue","red","green"}}
\newcount\cyclecount \cyclecount=-1
\newcount\ind \ind=-1
\begin{tikzpicture}
  \foreach \percent/\name in {
      46.6/Chrome,
      24.6/Internet Explorer,
      20.4/Firefox,
      5.1/Safari,
      1.3/Opera,
      2.0/Other
    } {
      \ifx\percent\empty\else                 % If \percent is empty, do nothing
        \global\advance\cyclecount by 1       % Advance cyclecount
        \global\advance\ind by 1              % Advance list index
        \ifnum3<\cyclecount                   % If cyclecount is larger than list
          \global\cyclecount=0                %   reset cyclecount and
          \global\ind=0                       %   reset list index
        \fi
        \pgfmathparse{\cyclelist[\the\ind]}   % Get color from cycle list
        \edef\color{\pgfmathresult}           %   and store as \color
        % Draw angle and set labels
        \draw[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius) arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
        \node at (\angle+0.5*\percent*3.6:0.7*\radius) {\percent\%};
        \node[pin=\angle+0.5*\percent*3.6:\name] at (\angle+0.5*\percent*3.6:\radius) {};
        \pgfmathparse{\angle+\percent*3.6}    % Advance angle
        \xdef\angle{\pgfmathresult}           %   and store in \angle
      \fi
    };
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 08 Mai '14, 14:02

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

Hallo Henri, tolles Kreisdagramm. Aber warum kann man nicht mehr als 4 Farben in die cycle list setzen? Wenn man 5 Farben definiert werden trotzdem nur 4 gezeichnet. Ich habe 5 Elemente für mein Tortendiagramm und nun werden 1 und 5 mit derselben Farbe gezeichnet. Wie kann man den Tex/Tkiz Code erweitern?

(17 Sep '14, 18:04) lukasO
1

@lukas Ich habe deine Antwort in ein Kommentar zu Henris Frage umgewandelt. Hier auf TeXwelt.de sollten Antworten immer richtige Antworten zum Ursprungsproblem sein. Die Lösungen/Antworten werden nach Stimmen sortiert, so ist die bestbewertete Antwort ganz oben. Ach übriges, Willkommen ;-)

(17 Sep '14, 18:09) Johannes
1

@lukasO Ergänze in

\def\cyclelist{{"orange","blue","red","green"}}

eine fünfte Farbe und ersetze die 3 in

\ifnum3<\cyclecount

durch eine 4.

(17 Sep '14, 18:14) esdd

Vielen Dank für die schnelle Antwort, es klappt!

Nun habe ich aber das Problem, dass ich das Diagramm ausgelagert habe in eine eigene Tex Datei, diese dann über input{subsubdoc1} in eine andere Text Datei eingebettet habe, die andere Tex Datei wiederum in meine Hauptdatei (Bachelorarbeit). Jetzt bekomme ich 35 Errors obwohl sich das Diagramm als standalone kompilieren lässt. (Package standalone habe ich in meiner Hauptdatei eingebettet)

(17 Sep '14, 18:41) lukasO

Kannst du das irgendwie auf ein Minimum runterbrechen? Zumindest für mich liegt keine Ursache auf der hand. Vielleicht beißt sich was mit einem anderen Paket. Mein Tipp, erstelle ein Minimalbeispiel (<- Link zur Anleitung) und poste das dann als neue Frage. Könnte ja auch interessant für andere sein.

(17 Sep '14, 21:49) Johannes

Also beispielsweise habe ich 3 Dateien: hauptdatei.tex, ausgelagert.tex, diagramm.tex.

Inhalt hauptdatei.tex:

(17 Sep '14, 22:23) lukasO
\documentclass[]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}

\usepackage{lmodern}

\begin{document}

\input{ausgelagert}

\end{document}

(17 Sep '14, 22:23) lukasO

Inhalt ausgelagert.tex:


part[Erster Streich]{wenige Erläuterungen}

section[Überschriften]{Überschrift und das Inhaltsverzeichnis} Nur irgendein Text.............

input{diagramm}

(17 Sep '14, 22:24) lukasO


Inhalt Diagramm.tex: (siehe Tortendiagramm von oben mit standalone Package)

(17 Sep '14, 22:24) lukasO

In der Hauptdatei musst Du noch standalone und tikz laden. Außerdem gibt es einen Konflikt zwischen tikz und babel mit deutscher Spracheinstellung wegen der Anführungszeichen in der cyclelist. Der lässt sich auch nicht durch Laden der tikzlibrary babel beheben. Verwende deshalb den Vorschlag von @Herbert hier:

{\shorthandoff{"}\input{diagramm}}

(19 Sep '14, 00:06) esdd

@Henri. Wie kann ich Dein Beispiel so anpassen, dass ich für jedes "Kuchenstück" eine feste Farbe zuordnen kann? Die Benennung des Feldes würde ich gerne so gestalten: http://www.freiburgxtra.de/typo3temp/pics/36d94a5fc8.jpg. Lässt sich denn ein Kuchenstück auch mehrfarbig gestalten? Bsp. Neues FDP-Logo (wenn die FDP natürlich sonst gelb im Tortenstück aufgeführt wird http://polpix.sueddeutsche.com/bild/1.2294196.1420648582/860x860/schriftgestaltung.jpg)

(08 Jan '16, 22:12) Tischa

@Tischa Den Stücken feste Farben zuzuordnen ist kein Problem, siehe hier. Die Benennung kann ich leider nicht nachvollziehen (Link offline, Fehler 404). Ein Stück mehrfarbig zu gestalten geht auch mit top color und bottom color oder radial Shading, etc. Ich mach das aber lieber nicht, weil es der Übersicht nicht gerade zuträglich ist.

(08 Jan '16, 23:02) Henri

@Henri. Vielen Dank! Sorry, für den defekten Link. Ich dachte in etwa so. Wäre auch eine Darstellung von Balken- und Kreisdiagramm ,,in einem Wisch" denkbar, so dass man die Zahlen nur einmal definieren/angeben muss und die Ausgabe steuern, d.h. nach Bedarf entweder ein Balken oder Kreisdiagramm ausgeben kann? http://www.guntramsdorf.at/ONLWYSIWYG/IMG/wahlen_08_nr.jpg

Wäre es besser, wenn ich einen eigenen Thread aufmache?

Edit: Leider war ich mit meinem eigenen Beispiel nicht erfolgreich.

https://gist.github.com/anonymous/ce23d9710867aff91d30

(08 Jan '16, 23:38) Tischa
Ergebnis 5 von 13 show 8 more comments
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:

×730
×48
×7

gestellte Frage: 07 Mai '14, 15:47

Frage wurde gesehen: 20,375 Mal

zuletzt geändert: 08 Jan '16, 23:52