goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Direktlinks:
Zuletzt aktive Beiträge
Unbeantwortete Beiträge
[Erweitert]

Forenstatistik:
Beiträge: 101697
Top-Poster: Johannes_B (5072)

Wir begrüßen unseren neuesten Benutzer DoDo1896.

Links:


Mit Unterstützung von DANTE e.V.: Deutschsprachige Anwendervereinigung TeX. Danke den Mitgliedern!





Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Tortendiagramm Legende statt

 

PPanny
Forum-Newbie
Forum-Newbie

Beiträge: 5
Anmeldedatum: 14.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2020, 00:56     Titel: Tortendiagramm Legende statt
  Antworten mit Zitat      
Ich habe über http://www.texample.net/ ein Template für ein Tortendiagramm gefunden und schon weitestgehend nach meinen Wünschen angepasst:

Code
\documentclass[tikz,border=10pt]{standalone}
%%%<
\usepackage{verbatim}
%%%>
\begin{document}
\def\angle{0}
\def\radius{3}
\def\cyclelist{{"orange","blue","red","green","cyan"}}
\newcount\cyclecount \cyclecount=-1
\newcount\ind \ind=-1
\begin{tikzpicture}[nodes = {font=\sffamily}]
  \foreach \percent/\name in {
      20/a,
      15/b,
      25/c,
      20/d,
      20/e
   
} {
      \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
        \ifnum4<\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}


Nun möchte ich statt den Pins (Striche mit "a", "b",..."e") eine Legende.
Also ein kleines farbiges Quadrat seitlich vom Diagramm mit der jeweiligen Beschriftung.
Wenn ich Zeile 32 auskommentiere verschwinden schonmal die Pins. Nur weiß ich jetzt nicht wie ich stattdessen eine Legende erstelle.
Code
%\node[pin=\angle+0.5*\percent*3.6:\name]


Optional würde ich mich auch noch über eine schwarze Kontur des Diagramms freuen.

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen

Bartman
Forum-Meister
Forum-Meister


Beiträge: 2082
Anmeldedatum: 16.07.09
Wohnort: Hessische Provinz
Version: ---
     Beitrag Verfasst am: 18.02.2020, 02:36     Titel:
  Antworten mit Zitat      
Code
\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{matrix}

\begin{document}
\def\angle{0}
\def\radius{3}
\def\cyclelist{{"orange","blue","red","green","cyan"}}
\newcount\cyclecount \cyclecount=-1
\newcount\ind \ind=-1
\begin{tikzpicture}[
    nodes = {font=\sffamily},
    legend image/.style={fill=#1!50,draw=#1}
]
  \foreach \percent in {
      20,
      15,
      25,
      20,
      20
   
} {
      \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
        \ifnum4<\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
    };
    \matrix [
        matrix of nodes,
        draw,
        column 2/.style={nodes={anchor=west}}
   
] at (\radius+1,0) {
        |[legend image=orange]| & a\\
        |[legend image=blue]|   & b\\
        |[legend image=red]|    & c\\
        |[legend image=green]|  & d\\
        |[legend image=cyan]|   & e\\
   
};
\end{tikzpicture}
\end{document}


Wahrscheinlich kann man die Farben noch irgendwie aus der \cyclelist auslesen, damit sie nicht erneut eingegeben werden müssen.

Der Autor des Beispiels zeigt eine andere Art, eine Legende einzufügen.
Private Nachricht senden Benutzer-Profile anzeigen

PPanny
Forum-Newbie
Forum-Newbie

Beiträge: 5
Anmeldedatum: 14.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2020, 21:30     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Lösung!
Dein Verweis hat mich zusätzlich noch auf eine andere gebracht:

Code

\documentclass[tikz]{standalone}

\def\angle{0}
\def\radius{3}
\def\cyclelist{{"orange","yellow","red","green","cyan"}}

\newcommand\square[1]{%
  \tikz\filldraw[color=#1] (0,0) rectangle (1.5ex,1.5ex);%
}
\newcount\ind \ind=-1
\begin{document}
\begin{tikzpicture}[nodes = {font=\sffamily}]
  \foreach \percent/\name/\color in {
    20/a/orange,
    5/b/yellow,
    10/c/red,
    15/d/cyan,
    50/e/green%
  } {
    \ifx\percent\empty\else                 % If \percent is empty, do nothing
    \global\advance\ind by 1              % Advance list index
    % Draw angle and set labels
    \draw[fill={\color!100},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) {\textbf{\percent\,\%}};
    \node[anchor=base west] at (\radius+0.5,0.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{tikzpicture}
\end{document}
 


Werde mir das beste aus beidem zusammenbasteln Smile
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de


  Datenschutzerklärung | Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2020 goLaTeX.de