# Using hobby package to plot bezier curves through a set of data points in a .dat file

I would like to use the hobby package to plot smooth drawn curves through points. pgfs' smooth function is not working properly. My code is a follows,

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{filecontents}
\pgfplotsset{compat=1.9, every tick label/.append style={font=\normalsize}}

\pgfplotscreateplotcyclelist{my black white}{%
solid,smooth, every mark/.append style={solid, fill=white}, mark=triangle*\\%
solid, every mark/.append style={solid, fill=black}, mark=triangle*\\%
densely dashed, every mark/.append style={solid, fill=white},mark=diamond*\\%
densely dashed, every mark/.append style={solid, fill=black}, mark=diamond*\\%
}

\begin{filecontents}{p2.dat}
SAT ETCY-5  ETCX-5  ETCY-10 ETCX-10 AR-5    AR-10
100 0.46    0.50    0.54    0.61    0.17    0.25
90  0.45    0.48    0.53    0.59    0.18    0.25
80  0.43    0.47    0.51    0.58    0.19    0.27
70  0.41    0.45    0.49    0.57    0.21    0.30
60  0.39    0.44    0.48    0.55    0.25    0.35
50  0.37    0.42    0.46    0.54    0.30    0.44
40  0.35    0.40    0.44    0.52    0.38    0.57
30  0.33    0.37    0.42    0.51    0.50    0.71
20  0.29    0.34    0.39    0.48    0.63    0.87
10  0.24    0.29    0.34    0.45    0.78    1.04
0   0.18    0.23    0.29    0.41    0.92    1.22
\end{filecontents}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
cycle list name=my black white,
title={Compressing Pressure: 0.2 MPa},
enlarge x limits=-1,
xmin=0, xmax=100,
xlabel={Water Saturation($S_w$)},
xtick={0,10,20,30,40,50,60,70,80,90,100},
xticklabels={0,10,20,30,40,50,60,70,80,90,100},
scaled ticks=true,
ymin=0, ymax=0.7,
ylabel={Avg. ETC \quad $\frac{K_{eff}}{K_s}$ $(Dimensionless)$},
legend style ={ at={(0.25,0.4)},
anchor=north west, draw=none, font=\normalsize,
fill=white,align=left},
smooth
]


\addlegendentry{$K_{eff(x)}-Overlap \quad 5\%$};

\addlegendentry{$K_{eff(y)}-Overlap \quad5\%$};

\addlegendentry{$K_{eff(x)}-Overlap \quad10\%$};

\addlegendentry{$K_{eff(y)}-Overlap \quad10\%$};

\end{axis}
\end{tikzpicture}%
\end{document}


The smoothness of the curves is not consistent. I was wondering if there is a way to use the hobby package and use the data in .dat file to produce smooth curves. The way I see it hobby uses absolute coordinates for drawing and not data points

## migrated from tex.meta.stackexchange.comApr 13 '17 at 6:44

This question came from our discussion, support, and feature requests site for users of TeX, LaTeX, ConTeXt, and related typesetting systems.

• I don't quite see why you need smoothing here at all, to be honest. Would it represent your data better to add (artificial) curvature to the plots? Unrelated note: Your legend entries should probably be of the form $K_{\mathrm{eff}(x)}$ -- Overlap 5\% , and in the ylabel, you don't want Dimensionless in math mode, so remove the dollar signs around that. – Torbjørn T. Apr 13 '17 at 7:43

As mentioned in the manual for the hobby library, it supports use with pgfplots. It's just a matter of adding \usetikzlibrary{hobby} to the preamble, and saying e.g.

\addplot +[hobby] {rnd};


Hence, replacing smooth in your code with hobby works.

That said, I wouldn't do this myself, there is hardly any change from the default linear interpolation.

Note the changes I made to legend entries and ylabel as well.

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{hobby}
\usepackage{filecontents}
\pgfplotsset{compat=1.9, every tick label/.append style={font=\normalsize}}

\pgfplotscreateplotcyclelist{my black white}{%
solid,smooth, every mark/.append style={solid, fill=white}, mark=triangle*\\%
solid, every mark/.append style={solid, fill=black}, mark=triangle*\\%
densely dashed, every mark/.append style={solid, fill=white},mark=diamond*\\%
densely dashed, every mark/.append style={solid, fill=black}, mark=diamond*\\%
}

\begin{filecontents}{p2.dat}
SAT ETCY-5  ETCX-5  ETCY-10 ETCX-10 AR-5    AR-10
100 0.46    0.50    0.54    0.61    0.17    0.25
90  0.45    0.48    0.53    0.59    0.18    0.25
80  0.43    0.47    0.51    0.58    0.19    0.27
70  0.41    0.45    0.49    0.57    0.21    0.30
60  0.39    0.44    0.48    0.55    0.25    0.35
50  0.37    0.42    0.46    0.54    0.30    0.44
40  0.35    0.40    0.44    0.52    0.38    0.57
30  0.33    0.37    0.42    0.51    0.50    0.71
20  0.29    0.34    0.39    0.48    0.63    0.87
10  0.24    0.29    0.34    0.45    0.78    1.04
0   0.18    0.23    0.29    0.41    0.92    1.22
\end{filecontents}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
cycle list name=my black white,
title={Compressing Pressure: 0.2 MPa},
xmin=0, xmax=100,
xlabel={Water Saturation($S_w$)},
xtick distance=10,
ymin=0, ymax=0.7,
ylabel={Avg. ETC \quad $\frac{K_{\mathrm{eff}}}{K_s}$ (Dimensionless)},
legend style ={ at={(0.25,0.4)},
anchor=north west, draw=none, font=\normalsize,
fill=white,align=left,
},
hobby
]

\addlegendentry{$K_{\mathrm{eff}(x)}$ -- Overlap 5\% };

\addlegendentry{$K_{\mathrm{eff}(y)}$ -- Overlap 5\% };
\addlegendentry{$K_{\mathrm{eff}(x)}$ -- Overlap 10\% };
\addlegendentry{$K_{\mathrm{eff}(y)}$ -- Overlap 10\% };
`