How would I go about creating a simple characteristic function plot such as this in pgfplots? It is not necessary for my Latex processor to generate the plot based on a function, manually drawing the coordinates and lines will suffice. Is pgfplots an appropriate tool for the job?
[Tex/LaTex] Simple Characteristic Function or Step Function in pgfplots
pgfplotstikz-pgf
Related Solutions
If the function is used inside a coordinate pair, then you get two closing parentheses:
(0.2, f(0.2))
This apparently confuses the parser. These parentheses are not matched like curly braces in \TeX, when an argument is read. A set of curly braces protects the inner parentheses:
(0.2, {f(0.2)})
Then the inner delimiters are hidden for the parser that looks for the closing coordinate pair delimiter.
If you want to set the minimum and maximum values for the x-axis, you can use xmin
and xmax
, like so:
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[date coordinates in=x,date ZERO=2013-08-18,
xticklabel=\month-\day,ymin=0,ymax=10000,
xmin=2013-08-18,
xmax=2013-09-21]
\addplot coordinates {
(2013-08-18, 14)
(2013-08-25, 245)
(2013-08-31, 3412)
(2013-09-04, 4567)
(2013-09-05, 5001)
(2013-09-12, 6891)
(2013-09-13, 7456)
(2013-09-15, 8234)
(2013-09-21, 9456)
};
%\addplot [red] expression {1/(1+exp(-x))}; % <-- fails if uncommented
\end{axis}
\end{tikzpicture}
\end{document}
I don't believe that you can do computations with the x values in the plot because they are dates, not floats.
This explains why your second \addplot
fails.
If you want to plot a function of the number of days since 2013/08/18, say 13 * exp(x), you could use Excel for example to compute the function value and save it as a csv file:
date,days.since,function.value
2013-08-18,0.00,13
2013-08-19,1.00,15.87823586
2013-08-20,2.00,19.39372107
2013-08-21,3.00,23.68754441
2013-08-22,4.00,28.93203207
2013-08-23,5.00,35.33766377
2013-08-24,6.00,43.16152
2013-08-25,7.00,52.71759957
2013-08-26,8.00,64.38942152
2013-08-27,9.00,78.64541704
2013-08-28,10.00,96.05772929
2013-08-29,11.00,117.3251755
2013-08-30,12.00,143.3012929
2013-08-31,13.00,175.0285945
2013-09-01,14.00,213.780408
2013-09-02,15.00,261.11198
2013-09-03,16.00,318.9228926
2013-09-04,17.00,389.5333006
2013-09-05,18.00,475.7770478
2013-09-06,19.00,581.1153984
2013-09-07,20.00,709.7759504
2013-09-08,21.00,866.9223035
2013-09-09,22.00,1058.861293
2013-09-10,23.00,1293.296103
2013-09-11,24.00,1579.635428
2013-09-12,25.00,1929.371068
2013-09-13,26.00,2356.539144
2013-09-14,27.00,2878.283411
2013-09-15,28.00,3515.543297
2013-09-16,29.00,4293.894279
2013-09-17,30.00,5244.574315
2013-09-18,31.00,6405.737534
2013-09-19,32.00,7823.985492
2013-09-20,33.00,9556.23746
2013-09-21,34.00,11672.01479
In my case, I saved it as a file 2014-01-19.csv
.
Then you could plot the graph by reading the function values as a table from the file.
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[date coordinates in=x,date ZERO=2013-08-18,
xticklabel=\month-\day,ymin=0,ymax=10000,
xmin=2013-08-18,
xmax=2013-09-21]
\addplot coordinates {
(2013-08-18, 14)
(2013-08-25, 245)
(2013-08-31, 3412)
(2013-09-04, 4567)
(2013-09-05, 5001)
(2013-09-12, 6891)
(2013-09-13, 7456)
(2013-09-15, 8234)
(2013-09-21, 9456)
};
\addplot table [x=date,y=function.value,col sep=comma]
{2014-01-19.csv};
\end{axis}
\end{tikzpicture}
\end{document}
Best Answer
Here's a simple solution using the
pgfplots
packageFor reference, here's a solution using
pstricks