如何在TikZ/pgf-pie饼图中隐藏数值为0的类别标签?
解决pgf-pie饼图中0值类别显示多余标签的问题
针对pgf-pie绘制饼图时,数值为0的类别在图例中显示多余“0”标签的问题,提供三种实用解决方式:
方式一:手动移除0值类别(简单直接)
直接从饼图数据中删除所有数值为0的条目,并同步调整颜色列表(确保颜色数量与有效条目匹配)。修改后的代码如下:
\documentclass[conference]{IEEEtran} \usepackage{xcolor} \usepackage{tikz} \usepackage{pgf-pie} \definecolor{ELMpos}{RGB}{178, 255, 102} % Light lime green \definecolor{ROUNDneg}{RGB}{150, 54, 86} % Burgundy \definecolor{ELMneg}{RGB}{229, 102, 102} % Soft red \definecolor{ANON}{RGB}{102, 204, 178} % Mint green \definecolor{CONCISE}{RGB}{224, 255, 255} % Pale cyan \begin{document} \begin{figure} \centering \begin{tikzpicture} \pie[ text=legend, radius=2, color={ELMneg, ELMpos, CONCISE}, % 仅保留有效条目对应的颜色 sum=auto ]{ 2/Disagree, 7/Agree, 10/Strongly agree } \end{tikzpicture} \caption{} \end{figure} \end{document}
方式二:自动过滤所有0值类别(适合动态数据)
如果数据是动态生成的,可借助etoolbox包的循环功能自动过滤数值为0的条目,无需手动修改数据。代码如下:
\documentclass[conference]{IEEEtran} \usepackage{xcolor} \usepackage{tikz} \usepackage{pgf-pie} \usepackage{etoolbox} % 用于循环处理数据 \definecolor{ELMpos}{RGB}{178, 255, 102} % Light lime green \definecolor{ROUNDneg}{RGB}{150, 54, 86} % Burgundy \definecolor{ELMneg}{RGB}{229, 102, 102} % Soft red \definecolor{ANON}{RGB}{102, 204, 178} % Mint green \definecolor{CONCISE}{RGB}{224, 255, 255} % Pale cyan % 定义过滤0值条目的宏 \def\filterpieentries#1{% \def\processedentries{}% \forcsvlist{\processpieentry}{#1}% } \def\processpieentry#1/#2{% \ifnum#1>0 \ifdefempty{\processedentries}{% \edef\processedentries{#1/#2}% }{% \edef\processedentries{\processedentries, #1/#2}% }% \fi } \begin{document} \begin{figure} \centering \begin{tikzpicture} % 先过滤数据 \filterpieentries{0/Strongly disagree,2/Disagree,0/Neither agree nor disagree,7/Agree,10/Strongly agree} \pie[ text=legend, radius=2, color={ROUNDneg, ELMneg, ANON, ELMpos, CONCISE}, sum=auto ]{\processedentries} % 使用过滤后的条目 \end{tikzpicture} \caption{} \end{figure} \end{document}
方式三:单独隐藏特定0值类别
若仅需隐藏“Neither agree nor disagree”这一类别,直接从数据列表中删除或注释该条目即可:
\pie[ text=legend, radius=2, color={ROUNDneg, ELMneg, ANON, ELMpos, CONCISE}, sum=auto ]{ 0/Strongly disagree, 2/Disagree, % 0/Neither agree nor disagree, % 注释或删除该行 7/Agree, 10/Strongly agree }
内容的提问来源于stack exchange,提问作者Chris Schankula
相关产品推荐
相关产品推荐

