我有以下代码
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\begin{filecontents}{testdata.dat}
-3.316988309367815e-07 0.07000000000000001
-1.948815911147526e-08 0.13
7.15864175355987e-08 0
1.799432483450127e-07 0
0.0002850606647384129 0
0.0009429559686380238 0.08999999999999997
0.00157188462064142 0
0.005259918700865051 0
0.01739392641273605 0.18
0.06208364670743995 0.55
68.69485148165926 6.970000000000001
31.217611224923 79.12
0 12.89
\end{filecontents}
\pgfplotsset{compat=newest}
\pgfplotstableread{testdata.dat}\datatable
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar interval,
width=10cm,
height=5cm,
enlargelimits=false,
xtick=data,
ymin=0, ymax=100,
xticklabels={0 -- 0.063,0.063 -- 0.125,0.125 -- 0.25,0.25 -- 0.5,0.5 -- 1,
1 -- 2,2 -- 4,4 -- 5.6,5.6 -- 8,
8 -- 11.2,11.2 -- 16,16 -- 22.4,22.4 -- 31.5},
x tick label style={rotate=60,anchor=east}
]
\addplot table[x expr=\coordindex,y=0]{\datatable};
\addplot table[x expr=\coordindex,y=1]{\datatable};
\end{axis}
\end{tikzpicture}
\end{document}
输出如下:
但该命令ybar interval
确实跳过了最后一个值。它应该看起来像:
我希望最后一个值显示在间隔内22.4 -- 31.5
。如何在不向表中插入一行零的情况下实现此目的?
答案1
因为您想结合图表的不同方面,我想这里可以接受一点手工劳动。Jake 在上面的评论中提到了不使用 ybar 间隔的主要原因。最后一个数据点被丢弃,因为它后面没有任何内容,因此没有间隔。但是使用 ybar,您想实现与刻度标签定位相同的视觉效果,这是可能的。
但是,ybar
会自动移动条形,使每个条形组都以刻度为中心。要覆盖它,您可以手动调整bar width
和bar shift
。然后可以通过shift={(<coord>)}
另外,您使用xtick= data
和enlargelimits=false
,这会使最后一个数据集消失,因为它会剪辑到最后一个刻度。相反,您可以设置轴限制。
\documentclass[border=4mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}
\pgfplotstableread{
-3.316988309367815e-07 0.07000000000000001
-1.948815911147526e-08 0.13
7.15864175355987e-08 0
1.799432483450127e-07 0
0.0002850606647384129 0
0.0009429559686380238 0.08999999999999997
0.00157188462064142 0
0.005259918700865051 0
0.01739392641273605 0.18
0.06208364670743995 0.55
68.69485148165926 6.970000000000001
31.217611224923 79.12
0 12.89
}\datatable
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
width=10cm,
height=5cm,
ymin=0, ymax=100,
xmin=0, xmax=13,
xticklabels={0 -- 0.063,0.063 -- 0.125,0.125 -- 0.25,0.25 -- 0.5,0.5 -- 1,
1 -- 2,2 -- 4,4 -- 5.6,5.6 -- 8,
8 -- 11.2,11.2 -- 16,16 -- 22.4,22.4 -- 31.5},
x tick label style={shift={(axis cs:0.5,0)},anchor=east,rotate=60,},
bar width=0.5,
xtick={0,...,12},enlargelimits=false
]
\addplot+[bar shift=0.25] table[x expr=\coordindex,y index=0]{\datatable};
\addplot+[bar shift=0.75] table[x expr=\coordindex,y index=1]{\datatable};
\end{axis}
\end{tikzpicture}
\end{document}
小问题
pgfplotstable
加载pgfplots
TikZ。所以一个就够了- 使用
pgfplots
您拥有的compat
密钥版本,而不是newest
- 考虑对数图,因为大部分数据实际上是不可见的。