带有 pgfplotstable 和辅助 y 轴的 PGF 条形图看起来不太好

带有 pgfplotstable 和辅助 y 轴的 PGF 条形图看起来不太好

我正在尝试创建一个有两个 y 轴的条形图。我的数据包含在文件中并与 一起使用pgfplotstable。我查看了具有两个 y 轴的 PGF 条形图

我有几个似乎无法解决的问题:

  1. 次要 y 轴标签位于主要 y 轴标签之上
  2. x 刻度是重复的。
  3. 数据Time没有显示。是不是没有从表中正确读取数据?
  4. 为什么我需要同时拥有symbolic x coords={llvm, gcc}两个轴?

我对 pgfplots/tikz 还很陌生,所以请原谅我的无知。我还能做其他什么事来解决这个问题吗?

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{siunitx}

\begin{document}

\pgfplotstableread{
Compiler    Time      Memory
llvm        100       2.61
gcc         110       2.90
}{\CompilerComparison}

\begin{figure}[h]
  \begin{tikzpicture}
    \begin{axis}[
        ybar,
        axis y line*=left,
        symbolic x coords={llvm, gcc},
        ylabel={Compile Time (s)},
        xtick=data,
      ]
      \addplot[color=red,fill=red] 
        table[x=Compiler,y=Time]{\CompilerComparison}; \label{Time}
    \end{axis}

    \begin{axis}[
        ybar,
        axis x line=none,
        axis y line*=right,
        ylabel={Memory Consumption (GB)},
        ymin=0,
        symbolic x coords={llvm, gcc},
        xtick=data,
        legend style={
          at={(0.5,0.9)},
          anchor=north
        }
      ]
      \addlegendimage{/pgfplots/refstyle=Time}\addlegendentry{Time}

      \addplot[color=blue,fill=blue]
        table[x=Compiler,y=Memory]{\CompilerComparison}; \label{Memory}
      \legend{Time, Memory}
    \end{axis}

  \end{tikzpicture}
\end{figure}

\end{document}

平均能量损失

答案1

  1. 添加\pgfplotsset{compat=1.3}到序言中。
  2. 我认为您想要xticklabels={}删除第二轴的刻度标签。
  3. 显示了时间数据,但位于内存条后面。当轴上只有一个条形图时,不会进行移位,请参阅在 pgfplot 中绘制带有 2 组 y 轴的分组条形图进行修复。
  4. 为什么你不需要它?轴之间没有联系,第二个轴不知道第一个轴做了什么。(也就是说,因为你只使用第一个轴作为标签,所以你可以使用数字,但我认为对两个轴使用相同的设置更有意义。)

\documentclass[tikz]{standalone}
\usepackage{pgfplotstable}
\usepackage{siunitx}
\pgfplotsset{compat=1.3}
\begin{document}

\pgfplotstableread{
Compiler    Time      Memory
llvm        100       2.61
gcc         110       2.90
}{\CompilerComparison}

  \begin{tikzpicture}[
   declare function={
    barW=8pt; % width of bars
    barShift=barW/2; % bar shift
  }
]
    \begin{axis}[
        ybar,
        bar width=barW,
        bar shift=-barShift,
        axis y line*=left,
        symbolic x coords={llvm, gcc},
        ylabel={Compile Time (s)},
        xtick=data,
      ]
      \addplot[color=red,fill=red] 
        table[x=Compiler,y=Time]{\CompilerComparison}; \label{Time}
    \end{axis}

    \begin{axis}[
        ybar,
        bar width=barW,
        bar shift=barShift,
        axis x line=none,
        axis y line*=right,
        ylabel={Memory Consumption (GB)},
        ymin=0,
        symbolic x coords={llvm, gcc},
        xticklabels={},
        xtick=data,
        legend style={
          at={(0.5,0.9)},
          anchor=north
        }
      ]
      \addlegendimage{/pgfplots/refstyle=Time}\addlegendentry{Time}

      \addplot[color=blue,fill=blue]
        table[x=Compiler,y=Memory]{\CompilerComparison}; \label{Memory}
      \legend{Time, Memory}
    \end{axis}

  \end{tikzpicture}


\end{document}

相关内容