我已经使用 tikzpicture 通过以下代码创建了规范化直方图
\begin{tikzpicture}
\begin{axis}[
width=\figurewidth,
height=\figureheight,
scale only axis,
xmode=log,
ymode=log,
ybar interval,
x tick label as interval=false,
xlabel = {$\boldsymbol{\nabla}\cdot{\bf u}_{int}$},
xtick={},
xtickten={-18,-16,...,4},
yticklabels={$0.0001\%$, $0.001\%$, $0.01\%$, $0.1\%$, $1\%$, $10\%$, $100\%$},
xmin=1e-17, xmax=1e+4,
ymin=1e-5,ymax=1,
grid=none,
ymajorgrids,
]
\addplot [fill=gray!90] table [x=Lower, y=Count] {
Lower Upper Count
9.9e-15 1e-14 0.1231
1e-14 1e-13 1e-15
1e-13 1e-12 0.0000
1e-12 1e-11 0.0000
1e-11 1e-10 0.0000
1e-10 1e-9 0.0000
1e-9 1e-8 0.0000
1e-8 1e-7 0.0001
1e-7 1e-6 0.0001
1e-6 1e-5 0.0004
1e-5 1e-4 0.0010
1e-4 1e-3 0.0048
1e-3 1e-2 0.0313
1e-2 1e-1 0.1562
1e-1 1e+0 0.3464
1e+0 1e+1 0.2684
1e+1 1e+2 0.0645
1e+2 1e+3 0.0036
1e+3 1e+4 1e-15
};
\end{axis}
\end{tikzpicture}
这将创建如下图所示的图形:
我尝试通过添加以下代码将另一个直方图叠加到图中。
\addplot [fill=gray!50] table [x=Lower, y=Count] {
Lower Upper Count
1e-16 1e-15 1
};
不幸的是,添加上述代码后,我最终得到下图所示的图像。
我只想将第二个数据集叠加到现有直方图上,而不在条形图之间引入任何间隙。类似下图的图,其中红色条形图代表第二个数据集(此图是我自己在 Photoshop 中制作的,不是用 TikZ 制作的):
有人能帮我解决这个问题吗?
答案1
如果您想要ybar interval
在同一轴上有多个 s,则需要ybar interval
向各个\addplot
命令提供关键字,否则 PGFPlots 将在条形图之间引入偏移以确保两个图均可见。
还请注意,ybar interval
样式不会使用您在列中提供的值Upper
来确定条形的宽度,而是使用两个连续的Lower
值。这意味着您始终需要在表格末尾提供一个额外的数据行来确定最后一个条形的宽度:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
scale only axis,
xmode=log,
ymode=log,
x tick label as interval=false,
xtick={},
xtickten={-18,-16,...,4},
yticklabels={$0.0001\%$, $0.001\%$, $0.01\%$, $0.1\%$, $1\%$, $10\%$, $100\%$},
xmin=1e-17, xmax=1e+4,
ymin=1e-5,ymax=1,
grid=none,
ymajorgrids,
log origin=infty,
bar shift=0pt
]
\addplot [fill=gray!90,
ybar interval] table [x=Lower, y=Count] {
Lower Upper Count
9.9e-15 1e-14 0.1231
1e-14 1e-13 1e-15
1e-13 1e-12 0.0000
1e-12 1e-11 0.0000
1e-11 1e-10 0.0000
1e-10 1e-9 0.0000
1e-9 1e-8 0.0000
1e-8 1e-7 0.0001
1e-7 1e-6 0.0001
1e-6 1e-5 0.0004
1e-5 1e-4 0.0010
1e-4 1e-3 0.0048
1e-3 1e-2 0.0313
1e-2 1e-1 0.1562
1e-1 1e+0 0.3464
1e+0 1e+1 0.2684
1e+1 1e+2 0.0645
1e+2 1e+3 0.0036
1e+3 1e+4 1e-15
};
\addplot [fill=red!50, ybar interval] table [x=Lower, y=Count] {
Lower Count
1e-16 1
1e-15 1
};
\end{axis}
\end{tikzpicture}
\end{document}