在 pgfgantt 图中使用 csvsimple?

在 pgfgantt 图中使用 csvsimple?

是否有可能使用 csv 文件中包含的一些数据在 pgfgantt 图表中创建里程碑或条形图?如果可以,该怎么做?使用 csvsimple 可以实现吗?能否举一个小例子?

谢谢

好的,按照帖子252308(谢谢蝉),这给出了类似这样的结果:

\usepackage{pgfgantt}
\usepackage{xcolor}
\usepackage[utf8]{inputenc}
\usepackage{pgfplotstable}

\pgfplotstableset{col sep=comma}
\begin{filecontents}{data.csv}
column1,column2
1,5
2,4
3,7
\end{filecontents}
\definecolor{barblue}{RGB}{153,204,254}
\definecolor{groupblue}{RGB}{51,102,254}
\definecolor{linkred}{RGB}{165,0,33} 

\begin{document}


\pgfplotstableread{data.csv}\data
\pgfplotstablegetelem{1}{column2}\of{\data}
\begin{ganttchart}{1}{12}

\gantttitle{2011}{12} \\
\gantttitlelist{1,...,12}{1} \\
\ganttgroup{Group 1}{1}{7} \\
\ganttbar{Task 1}{1}{2} \\
\ganttlinkedbar{Task 2}{3}{7}
 \ganttnewline
 \ganttmilestone{Milestone}{7}
 \ganttnewline
\ganttbar{Final Task}{8}{12}
\ganttlink{elem2}{elem3}
\ganttlink{elem3}{elem4}\\

 \ganttmilestone{Milestone}{\pgfplotsretval}
 
\end{ganttchart}

\end{document}

对于一个单点来说这是没问题的...但是如何自动添加所有数据?

假设 csv 文件对应于以下内容:

\begin{filecontents}{data.csv}
task, date
task1,01-08-2022
task2,05-08-2022
task3,20-08-2022
\end{filecontents}

如何自动加载所有数据以获得与此等效的内容:

\ganttmilestone{task1}{01-08-2022}
\ganttmilestone{task2}{05-08-2022}
\ganttmilestone{task3}{20-08-2022}

答案1

使用 expl3 的 IO 和映射功能将里程碑文件数据添加到 pgfgantt 图表的示例。

甘特图和文件数据必须排列在同一时间段内才能有意义地显示(在月、周或日级别上使用 2022 年数据的 2011 年图表并不实用)。

里程碑

平均能量损失

\begin{filecontents*}{mdata.csv}
task, date

task1,01-08-2022
task2,05-08-2022
task3,20-08-2022
\end{filecontents*}


\documentclass{article}
\usepackage{pgfgantt}
\usepackage{xcolor}
\definecolor{barblue}{RGB}{153,204,254}
\definecolor{groupblue}{RGB}{51,102,254}
\definecolor{linkred}{RGB}{165,0,33} 


\ExplSyntaxOn


\tl_new:N \g_gc_milestonename_tl
\tl_new:N \g_gc_milestonedate_tl
\seq_new:N \g_gc_milestonelist_seq



%++++++++++++++++++++++++++


        \cs_generate_variant:Nn 
            \seq_gset_split:Nnn 
            { Nno }
        \cs_generate_variant:Nn 
            \seq_set_split:Nnn 
            { Nno }


%****************************************************
%*
%****************************************************
%------------------
    \cs_set:Npn \ic_funcmilestone:n #1 { 
    % 1=data line :: task1,01-08-2022

    \seq_set_split:Nno 
            \l_tmpa_seq  
            { , } 
            { #1 }
            
    %milestone name
    \tl_gset:Nx 
            \g_gc_milestonename_tl
            {
                \seq_item:Nn
                        \l_tmpa_seq
                        { 1 }
            }

    %milestone date
    \tl_gset:Nx 
            \g_gc_milestonedate_tl
            {
                \seq_item:Nn
                        \l_tmpa_seq
                        { 2 }
            }

        %add to chart
         \ganttmilestone
                    { \g_gc_milestonename_tl }
                    { \g_gc_milestonedate_tl }
             \ganttnewline

}




%****************************************************
%*
%****************************************************
%------------------
    \cs_set:Npn \ic_funcgline:n #1 { 
    % 1=line from file
    
    %add it to the list
    \tl_set:Nx \l_tmpa_tl { #1 }
    \seq_gput_right:NV
            \g_gc_milestonelist_seq
             \l_tmpa_tl 

    }
    
    
%io stream name 
\ior_new:N \g_gc_getfile_ior


\NewDocumentCommand { \getfilemilestones } { m }
 {% #1 = file name
        
    \seq_gclear:N \g_gc_milestonelist_seq
  
  %read the milestone data      
  \ior_open:Nn \g_gc_getfile_ior { #1 }
        \ior_map_inline:Nn
                \g_gc_getfile_ior
                { 
                        \ic_funcgline:n { ##1 }
                }
  \ior_close:N \g_gc_getfile_ior
                
%  \seq_show:N \g_gc_milestonelist_seq              

        %remove header
        \seq_gset_eq:NN
                \g_tmpa_seq
                \g_gc_milestonelist_seq
        \seq_pop_left:NN
                \g_tmpa_seq
                \l_tmpb_tl
        %add milestones to chart
        \seq_map_function:NN
                \g_tmpa_seq
                \ic_funcmilestone:n

}



\ExplSyntaxOff



\begin{document}


\begin{ganttchart}[
x unit=4mm,
time slot format=little-endian,
]{01-08-2022}{31-08-2022}
\gantttitlecalendar{year, month, day} \\
\getfilemilestones{mdata.csv}
\ganttnewline
\end{ganttchart}



\end{document}

相关内容