pgfplotstable:从表中读取并定义颜色

pgfplotstable:从表中读取并定义颜色

在表格中,第三列表示颜色。

\pgfplotstableread[col sep=comma, header=false]{
a, 1, blue
b, 2, cyan
c, 3,  
d, 3, 
e, 5, red
f, 6,
g, 7,
h, 8,
i, 9,
j, 10,
k, 11, yellow
}\mydata

只要没有定义新的颜色,我怎样才能保留以前的颜色?

我不想到处都写颜色。只写一次,例如红色,然后应该保留红色,直到黄色出现。

在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.17}
\begin{document}
\pgfplotstableread[col sep=comma, header=false]{
a, 1, blue
b, 2, cyan
c, 3,  
d, 3, 
e, 5, red
f, 6,
g, 7,
h, 8,
i, 9,
j, 10,
k, 11, yellow
}\mydata

\pgfplotstablegetrowsof{\mydata}
\pgfmathtruncatemacro{\RowsNo}{\pgfplotsretval-1}

Actual: 
\pgfplotsinvokeforeach{0,...,\RowsNo}{%%
\pgfplotstablegetelem{#1}{[index] 2}\of{\mydata}
\pgfplotsretval,  
%\colorlet{barcolor#1}{\pgfplotsretval}
}%%

Target: 
blue, cyan, cyan, cyan, red, red, red, red, red, red, red,
\end{document}

答案1

我得到它:

\documentclass[a4paper]{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.17}
\begin{document}
\pgfplotstableread[col sep=comma, header=false]{
a, 1, blue
b, 2, cyan
c, 3,  
d, 3, 
e, 5, red
f, 6,
g, 7,
h, 8,
i, 9,
j, 10, yellow
k, 11, 
}\mydata

\pgfplotstablegetrowsof{\mydata}
\pgfmathtruncatemacro{\RowsNo}{\pgfplotsretval-1}


\xdef\tempcolor{black}% 
\pgfplotsinvokeforeach{0,...,\RowsNo}{%%
\pgfplotstablegetelem{#1}{[index] 2}\of{\mydata}
\xdef\tempcolor{\ifx \pgfplotsretval\empty \tempcolor \else \pgfplotsretval \fi}
\colorlet{barcolor#1}{\tempcolor}% define
\colorbox{\tempcolor}{\tempcolor}, % show
}%%
\end{document}

相关内容