Wie kann ich die Textgröße in einem Raddiagramm anpassen und mithilfe von Datatool eine entsprechende Filterung anwenden?

Wie kann ich die Textgröße in einem Raddiagramm anpassen und mithilfe von Datatool eine entsprechende Filterung anwenden?

Ich bin mit dem Paket wheelchartin Kombination mit sehr zufrieden datatool, habe jedoch drei Probleme:

  1. Ich möchte die Schriftgröße des Textes im äußeren Ring ( usw.) vergrößern Plan. ProductionEr sollte beim Betrachten gut lesbar sein.

Bildbeschreibung hier eingeben

  1. Ich möchte nach bestimmten Aktivitäten filtern (Spalte category). Das funktioniert gut, aber ich möchte auch eine Version mitkein Filter. Dies ist das erste Raddiagramm auf der linken Seite. Es funktioniert, aber der Code hat einen Fehler – weil (soweit ich es herausfinden kann) datatoolein Wert zum Filtern der Datenbank erforderlich ist []. Es funktioniert einwandfrei, wenn nach einem Wert aus der Spalte gefiltert wird category.

Bildbeschreibung hier eingeben

  1. Ich möchte den leeren Raum der herausgefilterten Aktivitäten loswerden. Mit anderen Worten, das Raddiagramm sollte verkleinert werden und keinen Leerraum aufweisen (wie im ersten Raddiagramm, wenn kein Filter vorhanden ist).

Dies bedeutet, dass das Raddiagramm für „Data Stewards“ ziemlich klein wäre, da es nur vier Ringe hat: Bildbeschreibung hier eingeben

Hier ist mein MWE:

\documentclass[border=0,dvipsnames]{standalone}
\usepackage{fontspec}
\setmainfont{TeX Gyre Heros}
\usepackage{tikz}
\usetikzlibrary{decorations.text}
\usetikzlibrary{decorations.markings}

\usepackage{datatool}
\usepackage{etoolbox}
\colorlet{stages}{Blue}
\colorlet{service}{Magenta}
\colorlet{datasteward}{Green}
\colorlet{consulting}{Cyan}
\colorlet{project}{Orange}
\colorlet{natInf}{Purple}


% counter for having slightly different colors for the categories
\newcounter{rpdmCategoryService}\setcounter{rpdmCategoryService}{100}
\newcounter{rpdmCategoryDatasteward}\setcounter{rpdmCategoryDatasteward}{100}
\newcounter{rpdmCategoryConsulting}\setcounter{rpdmCategoryConsulting}{100}
\newcounter{rpdmCategoryProject}\setcounter{rpdmCategoryProject}{100}
\newcounter{rpdmCategoryNFDI}\setcounter{rpdmCategoryNFDI}{100}

%counting the amount of items/activitys to adjust radius of the outer stages
\newcounter{rpdmStagesRadius}
\setcounter{rpdmStagesRadius}{0}

\usepackage{xstring}
\DeclareRobustCommand{\rpdmCheckCategory}[1]{%
\IfEqCase{#1}{%
{service}{\addtocounter{rpdmCategoryService}{-5}\def\rpdmSliceColor{service!\therpdmCategoryService}}
{datasteward}{\addtocounter{rpdmCategoryDatasteward}{-5}\def\rpdmSliceColor{datasteward!\therpdmCategoryDatasteward}}
{consulting}{\addtocounter{rpdmCategoryConsulting}{-5}\def\rpdmSliceColor{consulting!\therpdmCategoryConsulting}}
{project}{\addtocounter{rpdmCategoryProject}{-5}\def\rpdmSliceColor{project!\therpdmCategoryProject}}
{natInf}{\addtocounter{rpdmCategoryNFDI}{-5}\def\rpdmSliceColor{natInf!\therpdmCategoryNFDI}}
}[\def\rpdmSliceColor{red}]
}

\usepackage{wheelchart}

\begin{filecontents}[overwrite]{activities.csv}
category,startangle,totalangle,name,begin,end
datasteward,-90,180,project1,2014,2024
service,0,90,project2,2019,
datasteward,-90,180,project3,2019,
natInf,40,280,project4,2020,
natInf,40,280,project5,2020,
natInf,40,280,project6,2020,
service,0,90,project7,2021,
service,0,90,project8,2021,
project,90,270,project9,2021,2024
service,0,90,project10,2023,
service,0,90,project11,2021,
natInf,40,280,project12,2021,
natInf,40,280,project13,2021,
datasteward,-90,180,project14,2019,2023
datasteward,-90,180,project15,2023,
project,90,270,project16,2023,
project,-60,270,project17,2020,2023
project,90,270,project18,2022,
consulting,90,120,project19,2022,
consulting,90,120,project20,2022,
consulting,90,120,project21,2023,
project,0,240,project22,2023,
project,0,240,project23,2023,
\end{filecontents}
\DTLloaddb{activities}{activities.csv}
% RDM stages
\gdef\rdmStages{%
20/stages/Plan,
20/stages/Production,
20/stages/Analysis,
20/stages/Storage,
20/stages/Access,
20/stages/Re-use%
}

% läuft wieder....
\NewDocumentCommand{\RDMstages}{}{%
  \wheelchart[
%explode{1}=1,
value          =1,
gap            =.1,
data           =,
radius         ={2+\therpdmStagesRadius}{4+\therpdmStagesRadius},
arc data       =~\WCvarC~,
arc data dir   ={\WCmidangle<180?1:-1},
arc data pos   =0.5,
arc data style ={text color=white},
slices arrow   ={.5}{0},
]{\rdmStages}}

\NewDocumentCommand{\RDMactivityCircle}{som}{%
\setcounter{rpdmCategoryService}{100}
\setcounter{rpdmCategoryDatasteward}{100}
\setcounter{rpdmCategoryConsulting}{100}
\setcounter{rpdmCategoryProject}{100}
\setcounter{rpdmCategoryNFDI}{100}
\begin{tikzpicture}
  \DTLsort{begin,startangle}{activities}%
  \DTLforeach%
  [%
  %For the starred version there should be no filtering
   \IfBooleanTF{#1}{}{\DTLisinlist{\WCcategory}{#3}}% FIX THIS
  ]%
  {activities}{%
\WCcategory =category,%
\WCstart    =startangle,%
\WCend      =totalangle,%
\WCname     =name,%
\WCsince    =begin,%
\WCtil      =end%
}{%
\wheelchart[
for loop start = {\rpdmCheckCategory{\WCcategory}},
for loop end = {\setcounter{rpdmStagesRadius}{\dtlrownum}},
  data=,
  arc data={\WCname},
  arc data dir={\WCmidangle<180?1:-1},
  arc data pos=0.5,
  arc data style={text color=white},
  gap radius=0.05,
  radius={1+\dtlrownum}{2+\dtlrownum},
  slices style={\rpdmSliceColor},
  slices end arc={1}{0},
  slices start arc={1}{0},
  start angle=\WCstart,
  total angle={\WCend}
]{1}}
\RDMstages
\IfValueT{#2}{%
\node[align=center,font=\bfseries, yshift=2em] (title)
    at (current bounding box.north)
    {\Huge #2};}
\end{tikzpicture}}

\begin{document}
\RDMactivityCircle*{} % FIX THIS
\RDMactivityCircle[Projects]{project}
\RDMactivityCircle[Consulting]{consulting}
\RDMactivityCircle[National Infrastructures]{natInf}
\RDMactivityCircle[Services and Infrastructures]{service}
\RDMactivityCircle[Data Stewards]{datasteward}
\end{document}

Antwort1

Das PaketRaddiagramm(was ich geschrieben habe) lädt das Paket und wurde tikzdaher \usepackage{tikz}entfernt.

Die Schriftgröße des Textes im äußeren Ring kann mit |\huge|der Taste geändert werden arc data. Die ~Ränder \WCvarCsind in diesem MWE nicht notwendig.

Für den wahren Zweig von \IfBooleanTFwurde \boolean{true}hinzugefügt.

Anstatt zu verwenden wird \dtlrownumder Zähler zu Beginn des Befehls rpdmStagesRadiusauf gesetzt . Dieser Zähler wird vor dem Befehl im vierten Argument von erhöht . Anschließend wird der Schlüssel nicht mehr verwendet.0\RDMactivityCircle\wheelchart\DTLforeachfor loop end

Für dieses MWE sind \usetikzlibrary{decorations.markings}und \usepackage{etoolbox}unnötig und diese werden entfernt.

Der Befehl \rdmStageswird in den Befehl eingebaut \RDMstages. Er muss also stagesnicht jedes Mal durch wiederholt werden slices style=stages. Auch die mehrfachen Ausdrücke 20sind unnötig, da value=1verwendet wird. Anschließend \WCvarCwird durch ersetzt \WCvarA.

Der Schlüssel yshift=2emwird durch ersetzt above.

Bildbeschreibung hier eingeben

\documentclass[border=6pt,dvipsnames]{standalone}
\usepackage{fontspec}
\setmainfont{TeX Gyre Heros}
\usepackage{wheelchart}
\usetikzlibrary{decorations.text}
\usepackage{datatool}
\colorlet{stages}{Blue}
\colorlet{service}{Magenta}
\colorlet{datasteward}{Green}
\colorlet{consulting}{Cyan}
\colorlet{project}{Orange}
\colorlet{natInf}{Purple}
%counter for having slightly different colors for the categories
\newcounter{rpdmCategoryService}\setcounter{rpdmCategoryService}{100}
\newcounter{rpdmCategoryDatasteward}\setcounter{rpdmCategoryDatasteward}{100}
\newcounter{rpdmCategoryConsulting}\setcounter{rpdmCategoryConsulting}{100}
\newcounter{rpdmCategoryProject}\setcounter{rpdmCategoryProject}{100}
\newcounter{rpdmCategoryNFDI}\setcounter{rpdmCategoryNFDI}{100}
%counting the amount of items/activities to adjust radius of the outer stages
\newcounter{rpdmStagesRadius}
\setcounter{rpdmStagesRadius}{0}
\usepackage{xstring}
\DeclareRobustCommand{\rpdmCheckCategory}[1]{%
\IfEqCase{#1}{%
{service}{\addtocounter{rpdmCategoryService}{-5}\def\rpdmSliceColor{service!\therpdmCategoryService}}
{datasteward}{\addtocounter{rpdmCategoryDatasteward}{-5}\def\rpdmSliceColor{datasteward!\therpdmCategoryDatasteward}}
{consulting}{\addtocounter{rpdmCategoryConsulting}{-5}\def\rpdmSliceColor{consulting!\therpdmCategoryConsulting}}
{project}{\addtocounter{rpdmCategoryProject}{-5}\def\rpdmSliceColor{project!\therpdmCategoryProject}}
{natInf}{\addtocounter{rpdmCategoryNFDI}{-5}\def\rpdmSliceColor{natInf!\therpdmCategoryNFDI}}
}[\def\rpdmSliceColor{red}]
}
\begin{filecontents}[overwrite]{activities.csv}
category,startangle,totalangle,name,begin,end
datasteward,-90,180,project1,2014,2024
service,0,90,project2,2019,
datasteward,-90,180,project3,2019,
natInf,40,280,project4,2020,
natInf,40,280,project5,2020,
natInf,40,280,project6,2020,
service,0,90,project7,2021,
service,0,90,project8,2021,
project,90,270,project9,2021,2024
service,0,90,project10,2023,
service,0,90,project11,2021,
natInf,40,280,project12,2021,
natInf,40,280,project13,2021,
datasteward,-90,180,project14,2019,2023
datasteward,-90,180,project15,2023,
project,90,270,project16,2023,
project,-60,270,project17,2020,2023
project,90,270,project18,2022,
consulting,90,120,project19,2022,
consulting,90,120,project20,2022,
consulting,90,120,project21,2023,
project,0,240,project22,2023,
project,0,240,project23,2023,
\end{filecontents}
\DTLloaddb{activities}{activities.csv}
%RDM stages
\NewDocumentCommand{\RDMstages}{}{%
  \wheelchart[
    arc data=|\huge|\WCvarA,
    arc data dir={\WCmidangle<180?1:-1},
    arc data pos=0.5,
    arc data style={text color=white},
    data=,
    gap=.1,
    radius={2+\therpdmStagesRadius}{4+\therpdmStagesRadius},
    slices arrow={.5}{0},
    slices style=stages,
    value=1
  ]{Plan,Production,Analysis,Storage,Access,Re-use}%
}
\NewDocumentCommand{\RDMactivityCircle}{som}{%
  \setcounter{rpdmCategoryService}{100}
  \setcounter{rpdmCategoryDatasteward}{100}
  \setcounter{rpdmCategoryConsulting}{100}
  \setcounter{rpdmCategoryProject}{100}
  \setcounter{rpdmCategoryNFDI}{100}
  \setcounter{rpdmStagesRadius}{0}
  \begin{tikzpicture}
  \DTLsort{begin,startangle}{activities}%
  \DTLforeach%
    [%
      %For the starred version there should be no filtering
      \IfBooleanTF{#1}{\boolean{true}}{\DTLisinlist{\WCcategory}{#3}}
    ]%
    {activities}%
    {%
      \WCcategory=category,%
      \WCstart=startangle,%
      \WCend=totalangle,%
      \WCname=name,%
      \WCsince=begin,%
      \WCtil=end%
    }%
    {%
      \addtocounter{rpdmStagesRadius}{1}%
      \wheelchart[
        arc data=\WCname,
        arc data dir={\WCmidangle<180?1:-1},
        arc data pos=0.5,
        arc data style={text color=white},
        before slices=\rpdmCheckCategory{\WCcategory},
        data=,
        gap radius=0.05,
        radius={1+\therpdmStagesRadius}{2+\therpdmStagesRadius},
        slices end arc={1}{0},
        slices start arc={1}{0},
        slices style=\rpdmSliceColor,
        start angle=\WCstart,
        total angle=\WCend
      ]{1}%
    }%
  \RDMstages%
  \IfValueT{#2}{\node[align=center,font=\bfseries,above] at (current bounding box.north) {\Huge #2};}%
  \end{tikzpicture}%
}
\begin{document}
\RDMactivityCircle*{}
\RDMactivityCircle[Projects]{project}
\RDMactivityCircle[Consulting]{consulting}
\RDMactivityCircle[National Infrastructures]{natInf}
\RDMactivityCircle[Services and Infrastructures]{service}
\RDMactivityCircle[Data Stewards]{datasteward}
\end{document}

verwandte Informationen