
wheelchart
と組み合わせたパッケージには非常に満足していますdatatool
が、次の 3 つの問題に悩まされています。
Plan
外側のリング(など)のテキストのフォントサイズを大きくしたいと思いますProduction
。見た時に読みやすいサイズにする必要があります。
- 特定のアクティビティ(列)をフィルタリングしたいのです
category
が、これでうまくいきますが、フィルターなしこれは左側の最初のホイールチャートです。 動作しますが、コードにエラーがあります。これは (私が理解している限りでは)、データベースをフィルタリングするために にdatatool
何らかの値が必要なためです[]
。 列 の値をフィルタリングする場合は正常に動作しますcategory
。
- フィルターで除外されたアクティビティの空きスペースを取り除きたいです。言い換えると、ホイールチャートを縮小し、空白スペースをなくす必要があります (フィルターがない場合の最初のホイールチャートのように)。
つまり、「データ スチュワード」のホイール チャートは、リングが 4 つしかないため、非常に小さくなります。
これが私の 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}
答え1
その包みホイールチャート(私が書いた) はパッケージをロードするtikz
ので\usepackage{tikz}
削除されました。
外側のリング内のテキストのフォントサイズは、|\huge|
キーの内側で変更できますarc data
。この MWE では、~
周りは\WCvarC
不要です。
の真のブランチに\IfBooleanTF
、\boolean{true}
が追加されました。
を使用する代わりに、コマンド の開始時に\dtlrownum
カウンタrpdmStagesRadius
が に設定されます。このカウンタは、コマンドの前にの 4 番目の引数内で増加されます。その後、キーは使用されなくなります。0
\RDMactivityCircle
\wheelchart
\DTLforeach
for loop end
この MWE では、\usetikzlibrary{decorations.markings}
および\usepackage{etoolbox}
は不要であるため、これらは削除されます。
コマンドは\rdmStages
、コマンド に組み込まれます\RDMstages
。ここで、stages
を使用して を毎回繰り返す必要はありませんslices style=stages
。また、 が使用されているため、複数20
は不要ですvalue=1
。次に、\WCvarC
が に置き換えられます\WCvarA
。
キーはyshift=2em
に置き換えられますabove
。
\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}