pgfplots 线直方图

pgfplots 线直方图

我有一个直方图。它是根据 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样式正是用于此类事情。是为了避免在末尾获取额外的数据点(参见手册中的示例),最后 是将曲线移动到条形的中点。histintervals=falsex 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}

相关内容