绘制 X 轴:让 xticklabels 覆盖固定范围的箱体?

绘制 X 轴:让 xticklabels 覆盖固定范围的箱体?

我正在使用 tikzpicture 图。我的图中大约有 50 个箱子。这些箱子属于两组数据集。我想为 x 轴添加 2 个标签。第一个标签应覆盖 1-25 个箱子,第二个标签应覆盖 26 至 50 个箱子。

我能否以某种方式用 xlabel 或 xticklabel 参数定义两个标签并告诉它们位于 bin 范围的中心?

我尝试手动绘制 x 轴标签,但显然无法在绘图的负区域绘制?我尝试这样做:\filldraw[fill=blue] (9.1, -5) rectangle (15.9, -9);

屏幕截图显示了它应该是什么样子。有两个降序数据集组,第一个标记为数据集 A,第二个标记为数据集 B。如果每个组有 20 个 bin,则标签(理想情况下)将位于各自 bin 范围的中间。如果我可以以某种方式将它们硬编码输入,那也很好。在此处输入图片描述

这是我迄今为止得到的最小工作示例:

\documentclass{article}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{relsize}
\usepackage{times}
\usepackage{url}
\usepackage{latexsym}
\usepackage{graphicx}
\usepackage{colortbl}
\usepackage{color}
\usepackage{caption}
\usepackage{pgfplots, pgfplotstable}
\usetikzlibrary{arrows}
\usepackage{amsmath}
\usepackage{multirow}
\usepackage{booktabs}

\usepackage{filecontents}
\definecolor{OgAns}{rgb}{0, 0.8, 0.4} 
\begin{filecontents}{testdata.dat}
3   30
1   44
4   26
2   39
5   90
6   80
7   80
8   50
\end{filecontents}

\begin{document}
\begin{figure}
\begin{tikzpicture}
        \begin{axis}[   
            ybar stacked,
            ymin=0,
            ymax=100,
            bar width=5pt,
            legend style={at={(0.35, -0.4)},anchor=south west},
            legend columns=-1            
          ]
          \addplot[ybar,fill=OgAns]  file {testdata.dat}; 
        \end{axis}
    \end{tikzpicture}
\end{figure}


\end{document}

有什么提示或建议吗?

答案1

我从第 197 页第 4.9.2 节的 pgfplots 手册中找到了此信息轴描述的对齐。基本上,我添加了两个位于 xtick 范围的某个百分比处的节点(其中第一个刻度为 0%,最后一个刻度为 100%)并标记它们。我保留了这些点,以帮助对齐标签。以下是您的调整后的工作示例:

\documentclass{article}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{relsize}
\usepackage{times}
\usepackage{url}
\usepackage{latexsym}
\usepackage{graphicx}
\usepackage{colortbl}
\usepackage{color}
\usepackage{caption}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=1.11}
\usetikzlibrary{arrows}
\usepackage{amsmath}
\usepackage{multirow}
\usepackage{booktabs}

\usepackage{filecontents}
\definecolor{OgAns}{rgb}{0, 0.8, 0.4} 
\begin{filecontents}{testdata.dat}
3   30
1   44
4   26
2   39
5   90
6   80
7   80
8   50
\end{filecontents}

\begin{document}
\begin{figure}
\begin{tikzpicture}
    \begin{axis}[
        clip=false,
            xmin=0,
            xmax=9,  
        ybar stacked,
        ymin=0,
        ymax=100,
        bar width=5pt,
        legend style={at={(0.35, -0.4)},anchor=south west},
        legend columns=-1                       
      ]

    \node[anchor=near xticklabel,font=\large]
        at (xticklabel cs:0.28) {Dataset A};
    \fill (xticklabel cs:0.28) circle(2pt);

    \node[anchor=near xticklabel,font=\large]
        at (xticklabel cs:0.73) {Dataset B};
    \fill (xticklabel cs:0.73) circle(2pt);

    \addplot[ybar,fill=OgAns]  file {testdata.dat};  
    \end{axis}        
\end{tikzpicture}
\end{figure}


\end{document}

pdflatex 输出

相关内容