我有一个直方图。它是根据 CSV 文件中的数据创建的。
我想用一条平滑的线连接每个条上的中点。
我的目的是绘制多个系列并仅显示线条。
重要的是,箱子保持位于中点的中心位置。
梅威瑟:
\begin{filecontents*}{data.csv}
A
2
3
4
2
3
4
5
6
9
9
1
\end{filecontents*}
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{filecontents}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\centering
\begin{axis}[
ybar interval,
/pgf/number format/.cd,
use comma,
1000 sep={},
title={Title},
xlabel={X Label},
ylabel={Y Label},
x label style={at={(axis description cs:0.5,-0.1)},anchor=north},
y label style={at={(axis description cs:0.05,0.5)},anchor=south},
xticklabel style={rotate=90, anchor=near xticklabel},
ytick distance=2,
width=\textwidth, %10.5cm
height=6cm,
ymin=0
]
%%%
\addplot +[
black,
fill=lightgray,
hist={bins=5,
data min=0,
data max=10,
}
] table[y=A, col sep=comma] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
你可以这样做
\addplot +[
hist={bins=5,
data min=0,
data max=10,
handler/.style={sharp plot},
intervals=false
},
x filter/.expression={x+1} % shift curve to center point
] table[y=A, col sep=comma] {data.csv};
手册中有关直方图部分末尾描述的handler
样式正是用于此类事情。是为了避免在末尾获取额外的数据点(参见手册中的示例),最后 是将曲线移动到条形的中点。hist
intervals=false
x filter
完整代码(包括正常直方图)如下。注意我添加了\pgfplotsset{compat=1.3}
。该设置至少会改善轴标签的默认定位,因此可能不需要自定义定位。
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.3}
\usepackage{filecontents}
\begin{filecontents*}{data.csv}
A
2
3
4
2
3
4
5
6
9
9
1
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\centering
\begin{axis}[
/pgf/number format/.cd,
use comma,
1000 sep={},
title={Title},
xlabel={X Label},
ylabel={Y Label},
xticklabel style={rotate=90, anchor=near xticklabel},
ytick distance=2,
width=\textwidth, %10.5cm
height=6cm,
ymin=0
]
\addplot [
ybar interval,
fill=blue!10,
hist={bins=5,
data min=0,
data max=10,
}
] table[y=A, col sep=comma] {data.csv};
%%%
\addplot +[
hist={bins=5,
data min=0,
data max=10,
handler/.style={sharp plot},
intervals=false
},
x filter/.expression={x+1} % shift curve to center point
] table[y=A, col sep=comma] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}