解决方案 1:

解决方案 1:

我有两个表,它们保存相同 x 值的不同值。为了比较它们,我想将它们绘制在同一张图中,但使用不同的 xlabel。

表格应该保持不变,即我不想更改表格中的 x 值,因为它们也用于其他图。

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
            ybar, 
            xtick=data]
        \addplot table {
            1 1
        };
        \addplot table {
            1 2
        };
    \end{axis}
\end{tikzpicture}
\end{document}

此代码生成以下图像:当前状态

然而我想要的是这样的:在此处输入图片描述

我以为可能会有一个简单的选择addplot[x label=A],但到目前为止我还没有找到任何东西。我尝试过的方法:

  • xticklabels={A, B}- 由于 x 值相同,因此只打印第一个标签。我们显然需要一些东西来告诉 pgfplots x 值不一样。
  • xticklabel={\pgfmathparse{\labelnames[Mod(\tick,2)]}\pgfmathresult}其中\def\labelnames{{"A", "B"}}- 同样的问题,刻度没有改变。
  • symbolic x coords={A, B}- 不起作用,因为 x 值未命名为 A 和 B。

答案1

像这样?

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10,width=7cm}     %% better add this
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
            ybar=-7pt,                  %% adjusted to make the bar be at the center of tick
            bar width=7pt,              %% adjusted to make the bar be at the center of tick
            enlargelimits=0.15,         %% my habit
            ylabel={},                  %% Add yours
            symbolic x coords={A,B},    %% Coordinates
            xtick={A,B},                %% ticks
        ]
    \addplot coordinates {(A,1)};
    \addplot coordinates {(B,2)};
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

如何x使用 向值添加一些内容x expr?这样,数据将保持不变,但条形图会偏移,并且可以有自己的刻度标签。

解决方案 1:

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    ybar,
    ybar=-7pt, %% Harish's answer.
    bar width=7pt, %% Harish's answer.
    xtick={1,2,3},
  ]

    \addplot table[x expr=\thisrowno{0}+0] {% Add 0 to x.
      1 1
    };
    \addplot table[x expr=\thisrowno{0}+1] {% Add 1 to x.
      1 2
    };
    \addplot table[x expr=\thisrowno{0}+2] {% Add 2 to x.
      1 1
    };

  \end{axis}
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

您可以立即看到 的使用存在某种模式\addplot。也许您可以使用类似以下方法概括多列数据:

解决方案 2:

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    ybar,
    xtick={1,...,6},
    ybar=-7pt, %% Harish's answer.
    bar width=7pt, %% Harish's answer.
  ]

    \pgfplotsinvokeforeach{1,...,6}{%
      \addplot table[row sep=crcr,x expr=\thisrowno{0}-1+#1, y index=#1] {
        1 1 2 3 3 2 1\\
      };
    }

  \end{axis}
\end{tikzpicture}
\end{document}

输出:

在此处输入图片描述

答案3

为了完整地回答这个问题,我结合了须藤老师哈里什·库马尔

\documentclass{standalone}
\usepackage[english]{babel}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    ybar=-7pt, %% Harish's answer
    bar width=7pt, %% Harish's answer
    xtick={1, 2}, %% sudosensei's answer
    xticklabels={A, B}, %% sudosensei's comment
  ]
    \addplot table[x expr=\thisrowno{0}+0] {% Add 0 to x.
      1 1
    };
    \addplot table[x expr=\thisrowno{0}+1] {% Add 1 to x.
      1 2
    };
  \end{axis}
\end{tikzpicture}
\end{document}

这将得到期望的结果: 结果

相关内容