如何将双Y轴PGF绘图转换为带三组相邻柱的离散柱状图?
搞定TikZ柱状图的两个需求:显示Y轴刻度+分组相邻柱形
嘿,我来帮你解决这两个TikZ绘图的问题!咱们拆解开来一步步处理:
一、修复Y轴刻度不显示的问题
Y轴刻度没出现,大概率是你没在axis环境里正确配置刻度相关选项。常见的解决方法有两种:
- 明确指定Y轴刻度范围:比如用
ytick={0,1,2}直接列出对应“低/中/高”的刻度值 - 让TikZ自动根据数据生成刻度:用
ytick=data,它会自动识别你的数据中的Y值生成对应刻度 - 另外要确保没设置
ytick=\empty这类禁用刻度的选项,同时ylabel(Y轴标签)和yticklabels(自定义刻度文本)也要正确配置哦。
二、实现每组三个相邻柱的离散柱状图
要做出每组三个相邻柱子的效果,核心是给每组内的柱子设置微小的X坐标偏移,再调整柱子宽度避免重叠。具体思路和代码示例如下:
完整代码示例
\documentclass{standalone} \usepackage{pgfplots} \pgfplotsset{compat=1.17} % 用较新版本的兼容性配置,避免奇怪问题 \begin{document} \begin{tikzpicture} \begin{axis}[ width=10cm, height=6cm, ylabel={水平等级}, % Y轴标签 ytick={0,1,2}, % 明确Y轴刻度,对应低、中、高 yticklabels={低,中,高}, % 自定义Y轴刻度文本 xtick={1,2,3}, % X轴刻度对应每个数据分组的基准位置 xticklabels={样本1,样本2,样本3}, % 分组名称 xlabel={样本分组}, bar width=0.18, % 柱子宽度,要小于偏移量的两倍防止重叠 legend pos=north west, % 图例位置 ymin=-0.5, ymax=2.5, % 给Y轴留一点上下空间,避免柱子顶到边界 ] % 第一组(样本1)的三个柱子,分别偏移-0.2、0、+0.2 \addplot+[bar] coordinates {(1-0.2, 2)}; % 理论1:高 \addplot+[bar] coordinates {(1, 0)}; % 理论2:低 \addplot+[bar] coordinates {(1+0.2, 1)}; % 理论3:中 % 第二组(样本2) \addplot+[bar] coordinates {(2-0.2, 0)}; % 理论1:低 \addplot+[bar] coordinates {(2, 2)}; % 理论2:高 \addplot+[bar] coordinates {(2+0.2, 2)}; % 理论3:高 % 第三组(样本3) \addplot+[bar] coordinates {(3-0.2, 1)}; % 理论1:中 \addplot+[bar] coordinates {(3, 0)}; % 理论2:低 \addplot+[bar] coordinates {(3+0.2, 2)}; % 理论3:高 % 添加图例,对应三个理论 \legend{理论A, 理论B, 理论C} \end{axis} \end{tikzpicture} \end{document}
关键细节说明
- 分组偏移:每个分组的基准X坐标是1、2、3,组内三个柱子分别用
基准坐标±0.2来实现相邻排列,这样同一组的柱子会紧紧挨在一起,不同组之间有明显间隔。 - 柱子宽度:设置
bar width=0.18,这个值要小于偏移量的两倍(这里偏移0.2,两倍是0.4),确保同一组的柱子不会互相重叠。 - Y轴配置:我这里设置了
ytick={0,1,2}和yticklabels={低,中,高},完美匹配你需要的离散水平展示需求,刻度也会正常显示出来。
内容的提问来源于stack exchange,提问作者spar31415
相关产品推荐
相关产品推荐

