¿Cómo ajustar el tamaño del texto en un gráfico de ruedas y aplicar un filtrado adecuado utilizando la herramienta de datos?

¿Cómo ajustar el tamaño del texto en un gráfico de ruedas y aplicar un filtrado adecuado utilizando la herramienta de datos?

Estoy muy contento con el paquete wheelcharten combinación con datatool, pero tengo tres problemas:

  1. Me gustaría aumentar el tamaño de fuente del texto en el anillo exterior ( Plan, Productionetc.). Debe ser fácilmente legible al mirarlo.

ingrese la descripción de la imagen aquí

  1. Me gustaría filtrar por determinadas actividades (columna category). Esto funciona bien, pero también quiero tener una versión consin filtro. Este es el primer diagrama de ruedas de la izquierda. Funciona, pero el código tiene un error, porque (hasta donde puedo entender) datatoolquiere tener algún valor []para filtrar la base de datos. Funciona bien al filtrar por un valor de la columna category.

ingrese la descripción de la imagen aquí

  1. Me gustaría deshacerme del espacio vacío de las actividades filtradas. En otras palabras, el diagrama de ruedas debe reducirse y no tener espacios en blanco (como en el primer diagrama de ruedas cuando no hay filtro).

Esto significa que el diagrama de ruedas para "Data Stewards" sería bastante pequeño, ya que solo tiene cuatro anillos: ingrese la descripción de la imagen aquí

Aquí está mi 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}

Respuesta1

El paquetediagrama de ruedas(que escribí) carga el paquete, tikzpor lo que \usepackage{tikz}se eliminó.

El tamaño de fuente del texto en el anillo exterior se puede cambiar con |\huge|la tecla arc data. Los ~alrededores \WCvarCson innecesarios en este MWE.

Para la verdadera rama de \IfBooleanTF, \boolean{true}se agregó.

En lugar de usar \dtlrownum, el contador rpdmStagesRadiusse establece 0al inicio del comando \RDMactivityCircle. Este contador aumenta antes del comando \wheelchartdentro del cuarto argumento de \DTLforeach. Entonces la clave for loop endya no se usa.

Para este MWE, \usetikzlibrary{decorations.markings}y \usepackage{etoolbox}son innecesarios y se eliminan.

El comando \rdmStagesestá incorporado en el comando \RDMstages. Aquí, stagesno es necesario repetirlo cada vez usando slices style=stages. Además los múltiples 20son innecesarios desde que value=1se utilizan. Luego \WCvarCse reemplaza por \WCvarA.

La clave yshift=2emse reemplaza por above.

ingrese la descripción de la imagen aquí

\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}

información relacionada