如何在 Tikz 中绘制通过数据给出的函数导数

如何在 Tikz 中绘制通过数据给出的函数导数

假设我们有一个data.csv函数数据,形式为两列:x 和 f(x),例如,

x f
0 3
0.25 2
0.5 2
0.75 0
1 1 

在 TikZ 中,它的默认表示形式\addplot是分段线性函数,通过线段连接每连续两个点:

\addplot[color=blue!50, line width=1.5,] table[x={x}, y={f}]{data.csv}

我希望通过类似函数表示其导数\addplot,而无需从中生成辅助数据data.csv。更具体地说,我想要一个自动化 TikZ 程序,给定数据返回导数的分段常数图。对于前面的数据示例,图:

如果 0<x<0.25,则 f(x) = (2-3)/(0.25-0);如果 0.25<x<0.5,则 f(x) = (2-2)/(0.5-0.25);如果 0.5<x<0.75,则 f(x) = (0-2)/(0.75-0.5);如果 0.75<x<1,则 f(x) = (1-0)/(1-0.75)。

谢谢!

答案1

像这样吗?

\documentclass[border=5mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotstableread{
x f
0 3
0.25 2
0.5 2
0.75 0
1 1 
}\mydata

\pgfplotstablecreatecol[
  create col/assign/.code={
  \ifnum\pgfplotstablerow=0
  \pgfmathsetmacro\tmpish{(\nextrow{f}-\thisrow{f})/(\nextrow{x}-\thisrow{x})}
    \else
  \pgfmathsetmacro\tmpish{(\thisrow{f}-\prevrow{f})/(\thisrow{x}-\prevrow{x})}
  \fi
  \edef\entry{\tmpish}%
  \pgfkeyslet{/pgfplots/table/create col/next content}\entry
  }
]{dfdx}{\mydata}


\begin{document}
\begin{tikzpicture}
\begin{axis}[xtick distance=0.25, ytick distance=1, grid]
\addplot table {\mydata};

% use jump mark right instead of const plot mark right if you
% don't want the vertical lines
\addplot +[const plot mark right, mark=none, ultra thick] table[x=x,y=dfdx] {\mydata};
\end{axis}

\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容