如何修正截断三元相图LaTeX绘制中的轴标签范围问题?
解决TikZ三元相图截断后轴标签范围错误的问题
我尝试使用TikZ包绘制下部截断的三元相图,要求x范围为75-100、y和z范围为0-25。使用xmin、ymax、zmax参数后,点能正确绘制,但轴标签仍显示0-100范围,请问如何解决?示例代码如下:
\documentclass{article} \usepackage{inputenc} \usepackage{authblk} \usepackage{caption} \usepackage{subcaption} \usepackage{float} \usepackage{pgfplots} \usepackage{tikz} \usepgfplotslibrary{ternary} % LaTeX and plain TeX \usepgfplotslibrary[ternary] % ConTeXt \usetikzlibrary{pgfplots.ternary} % LaTeX and plain TeX \usetikzlibrary[pgfplots.ternary] % ConTeXt \title{} \author{} \date{} \begin{document} \maketitle \begin{tikzpicture} \begin{ternaryaxis}[xlabel=A, ylabel=B, zlabel=C, xmin=0.75, ymax=0.25, zmax=0.25] \addplot3 coordinates { (0.87, 0.03, 0.1) (0.85, 0.05, 0.1) (0.83, 0.07, 0.1) (0.81, 0.09, 0.1) }; \end{ternaryaxis} \end{tikzpicture} \end{document}
问题出在ternaryaxis默认会生成完整的0-1范围刻度,仅设置xmin/ymax等参数只会裁剪显示区域,但不会自动调整刻度标签。要解决这个问题,需要手动指定刻度值并强制限定轴显示范围:
- 强制限定轴显示范围:使用
axis limits*参数明确指定所有轴的上下限,确保只显示截断后的区域; - 手动设置刻度值:为每个轴指定符合需求的刻度点;
- 调整刻度标签格式:如果需要将小数转换为百分比(对应75-100、0-25的需求),可以通过刻度样式设置自动乘以100并取整。
修改后的完整代码如下:
\documentclass{article} \usepackage{inputenc} \usepackage{authblk} \usepackage{caption} \usepackage{subcaption} \usepackage{float} \usepackage{pgfplots} \usepackage{tikz} \usepgfplotslibrary{ternary} \usetikzlibrary{pgfplots.ternary} \title{} \author{} \date{} \begin{document} \maketitle \begin{tikzpicture} \begin{ternaryaxis}[ xlabel=A, ylabel=B, zlabel=C, % 强制限定轴显示范围 axis limits*={xmin=0.75,xmax=1,ymin=0,ymax=0.25,zmin=0,zmax=0.25}, % 手动指定各轴刻度 xtick={0.75,0.8,0.85,0.9,0.95,1}, ytick={0,0.05,0.1,0.15,0.2,0.25}, ztick={0,0.05,0.1,0.15,0.2,0.25}, % 将刻度小数转换为百分比显示 tick label style={ /pgf/number format/fixed, /pgf/number format/precision=0, /pgf/number format/multiply by=100 } ] \addplot3 coordinates { (0.87, 0.03, 0.1) (0.85, 0.05, 0.1) (0.83, 0.07, 0.1) (0.81, 0.09, 0.1) }; \end{ternaryaxis} \end{tikzpicture} \end{document}
关键参数说明:
axis limits*:和普通axis limits不同,它会严格按照指定范围显示,不会自动扩展刻度;xtick/ytick/ztick:手动定义刻度点,确保只显示你需要的数值;tick label style里的multiply by=100:将0-1的小数刻度转换为0-100的百分比,匹配你75-100、0-25的需求。
内容的提问来源于stack exchange,提问作者Caleb Ogden
相关产品推荐
相关产品推荐

