You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将双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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:13:40