Como ajustar o tamanho do texto em um gráfico de rodas e aplicar uma filtragem adequada usando o datatool?

Como ajustar o tamanho do texto em um gráfico de rodas e aplicar uma filtragem adequada usando o datatool?

Estou muito feliz com o pacote wheelchartem combinação com o datatool, mas estou preocupado com três questões:

  1. Gostaria de aumentar o tamanho da fonte do texto no anel externo ( Plan, Productionetc.). Deve ser facilmente legível quando se olha para ele.

insira a descrição da imagem aqui

  1. Gostaria de filtrar determinadas atividades (coluna category). Isso funciona bem, mas também quero ter uma versão comSem filtro. Este é o primeiro gráfico de rodas à esquerda. Funciona, mas o código contém um erro - porque (até onde eu consigo entender) datatooldeseja ter algum valor []para filtrar o banco de dados. Funciona bem ao filtrar um valor da coluna category.

insira a descrição da imagem aqui

  1. Gostaria de me livrar do espaço vazio das atividades filtradas. Ou seja, o gráfico de rodas deve ser diminuído e não ter espaços em branco (como no primeiro gráfico de rodas quando não há filtro).

Isso significa que o gráfico de roda para "Data Stewards" seria bem pequeno, já que possui apenas quatro anéis: insira a descrição da imagem aqui

Aqui está meu 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}

Responder1

O pacotecarrinho de rodas(que escrevi) carrega o pacote tikze \usepackage{tikz}foi removido.

O tamanho da fonte do texto no anel externo pode ser alterado com |\huge|a tecla arc data. Os ~arredores \WCvarCsão desnecessários neste MWE.

Para o verdadeiro ramo de \IfBooleanTF, \boolean{true}foi adicionado.

Em vez de usar \dtlrownum, o contador rpdmStagesRadiusé definido 0no início do comando \RDMactivityCircle. Este contador é aumentado antes do comando \wheelchartdentro do quarto argumento de \DTLforeach. Então a chave for loop endnão é mais usada.

Para este MWE, \usetikzlibrary{decorations.markings}são \usepackage{etoolbox}desnecessários e são removidos.

O comando \rdmStagesestá incorporado no comando \RDMstages. Aqui, stagesnão precisa ser repetido todas as vezes usando slices style=stages. Além disso, os múltiplos 20são desnecessários, pois value=1são usados. Então \WCvarCé substituído por \WCvarA.

A chave yshift=2emé substituída por above.

insira a descrição da imagem aqui

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

informação relacionada