Ich möchte - mit pgfplots - ein Ringdiagramm erstellen: Wie muss ich die Der entscheidende Teil ist: % Fill \noexpand\addplot[\Color] fill between [of=li and lo]; \noexpand\addplot[\Color] fill between [of=li and ui];% \noexpand\addplot[\Color] fill between [of=lo and uo]; \noexpand\addplot[\Color] fill between [of=ui and uo]; % , on layer= main % , on layer=axis background Hinweis: Ich suche hier nach einer pgfplots-Lösung, Plain-TikZ-Lösungen stehen hier https://tex.stackexchange.com/a/59544 \documentclass[border=5pt, tikz]{standalone} \usepackage{amsmath, amssymb} \usepackage{pgfplots} \pgfplotsset{compat=newest} \usepgfplotslibrary{fillbetween} \usetikzlibrary{calc} % Input \pgfmathsetmacro\r{5} \pgfmathsetmacro\R{\r+3} \pgfmathsetmacro\h{2} \pgfmathsetmacro\Start{0} \pgfmathsetmacro\End{0*-10} % \pgfplotstableread{ Percent Color Text 21 red 1 27 cyan 2 6 green!80!black 3 46 brown 4 }\tabledata \pgfplotstablegetrowsof{\tabledata} \pgfmathsetmacro\RowNoMax{\pgfplotsretval-1} \begin{document} \begin{tikzpicture}[every path/.style={thick},] \begin{axis}[title=Actual, clip=false, axis lines=middle, axis equal, hide axis, y dir=reverse, samples y=0, ] \pgfplotsinvokeforeach{0,...,\RowNoMax}{% \pgfplotstablegetelem{#1}{Percent}\of{\tabledata} \pgfmathsetmacro\Percent{\pgfplotsretval} \pgfplotstablegetelem{#1}{Color}\of{\tabledata} \pgfmathsetmacro\Color{"\pgfplotsretval"} \pgfplotstablegetelem{#1}{Text}\of{\tabledata} \pgfmathsetmacro\Text{"\pgfplotsretval"} % \pgfmathsetmacro\Start{\End} \pgfmathsetmacro\End{\Start+\Percent*3.6} \edef\temp{% %% Draw \noexpand\addplot3[name path=li, domain=\Start:\End]({\r*sin(x)}, {\r*cos(x)}, {0}) coordinate[pos=0](liStart) coordinate[](liEnd); \noexpand\addplot3[name path=lo, domain=\Start:\End, fill=none]({\R*sin(x)}, {\R*cos(x)}, {0}) coordinate[pos=0](loStart) coordinate[](loEnd); % \noexpand\addplot3[name path=ui, domain=\Start:\End]({\r*sin(x)}, {\r*cos(x)}, {\h}) coordinate[pos=0](uiStart) coordinate[](uiEnd) coordinate[pos=0.5](uiMid); \noexpand\addplot3[name path=uo, domain=\Start:\End]({\R*sin(x)}, {\R*cos(x)}, {\h}) coordinate[pos=0](uoStart) coordinate[](uoEnd) coordinate[pos=0.5](uoMid); % \noexpand\draw[fill=none, on layer= axis foreground] (liStart) -- (loStart) -- (uoStart) -- (uiStart) --cycle; \noexpand\draw[fill=none] (liEnd) -- (loEnd) -- (uoEnd) -- (uiEnd) --cycle; % Fill \noexpand\addplot[\Color] fill between [of=li and lo]; \noexpand\addplot[\Color] fill between [of=li and ui];% \noexpand\addplot[\Color] fill between [of=lo and uo]; \noexpand\addplot[\Color] fill between [of=ui and uo]; % , on layer= main % , on layer=axis background }\temp}% \end{axis} \end{tikzpicture} \end{document} gefragt 31 Jan '20, 16:48 cis |
Mein Rat: Gar nicht, Projektionen dreidimensionaler Torten- oder Ringdiagramme führen zu einer Verzerrung der Daten und nicht zu deren guter Erfassbarkeit. Im
pgfmanual
gibt es hierzu einen sehr aufschlussreichen Absatz ab Seite 99.@Skillmon Mich interessiert das allein aus theoretischen Gründen, wie man das richtig füllt. Scheinbar ist es trivial nicht möglich, aber ich kenne fillbetween auch nicht so gut.
Ansonsten wollte ich zu den verlinkten Plain-TikZ-Umsetzungen eine einfache Tabellenlösung erstellen; davon habe ich alles bewältigt, bis auf die Füllungen. :(