我正在尝试创建一个有两个 y 轴的条形图。我的数据包含在文件中并与 一起使用pgfplotstable
。我查看了具有两个 y 轴的 PGF 条形图
我有几个似乎无法解决的问题:
- 次要 y 轴标签位于主要 y 轴标签之上
- x 刻度是重复的。
- 数据
Time
没有显示。是不是没有从表中正确读取数据? - 为什么我需要同时拥有
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
- 添加
\pgfplotsset{compat=1.3}
到序言中。 - 我认为您想要
xticklabels={}
删除第二轴的刻度标签。 - 显示了时间数据,但位于内存条后面。当轴上只有一个条形图时,不会进行移位,请参阅在 pgfplot 中绘制带有 2 组 y 轴的分组条形图进行修复。
- 为什么你不需要它?轴之间没有联系,第二个轴不知道第一个轴做了什么。(也就是说,因为你只使用第一个轴作为标签,所以你可以使用数字,但我认为对两个轴使用相同的设置更有意义。)
\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}