![pgfplotstable:从表中读取并定义颜色](https://linux22.com/image/418326/pgfplotstable%EF%BC%9A%E4%BB%8E%E8%A1%A8%E4%B8%AD%E8%AF%BB%E5%8F%96%E5%B9%B6%E5%AE%9A%E4%B9%89%E9%A2%9C%E8%89%B2.png)
在表格中,第三列表示颜色。
\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}