在 pgfplots 中将 xbar 自动化为 ybar

在 pgfplots 中将 xbar 自动化为 ybar

我正在努力证明勒贝格 V 黎曼积分之间的概念差异。可以很容易地自动执行 ybar 命令以给出左、右或中点和,如所示使用图中的点将彩色矩形放置在图上 - 黎曼和

我可以用几种不同的方法手工制作盒子,但如果可能的话,我想避免暴力破解。主要问题是 xbar 总是想回到 xmin(这又是一种明显的一次一个的方法)有没有关于如何自动化 xbar 命令的想法,就像上面的 ybar 一样,以制作横向“勒贝格和”?

答案1

这个答案,您可以在这里使用交叉点。

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{backgrounds,calc,intersections}
\begin{document}
\begin{tikzpicture}
 \draw[thick,name path=A] plot[smooth] coordinates {(0,0) (1,0.8) (2,1) (3.5,0.6) (4,0)};
 \begin{scope}[on background layer]
  \foreach \X [count=\Z] in {0,0.5,...,4}
   {\path[name path global=v-\Z,overlay] (\X,0) --  (\X,0|-current bounding box.north);
   \draw[name intersections={of=A and v-\Z,by=i-\Z},blue,fill=blue!20] 
   \ifnum\Z>1
    let \p1=(i-\the\numexpr\Z-1),\p2=(i-\Z) in
    (\X-0.5,0) rectangle (\X,{max(\y1,\y2)})
    \fi;
   \draw[name intersections={of=A and v-\Z,by=i-\Z},blue,fill=blue!80] 
   \ifnum\Z>1
    let \p1=(i-\the\numexpr\Z-1),\p2=(i-\Z) in
    (\X-0.5,0) rectangle (\X,{min(\y1,\y2)})
    \fi;}
 \end{scope}
 %
 \begin{scope}[yshift=-2cm]
  \draw[thick,name path=B] plot[smooth] coordinates {(0,0) (1,0.8) (2,1) (3.5,0.6) (4,0)};
  \begin{scope}[on background layer]
   \foreach \Y [count=\Z] in {0,0.2,0.4,0.6,0.8,1}
    {\path[name path global=h-\Z,overlay] (0,\Y) --  (4,\Y);
    \draw[name intersections={of=B and h-\Z,by={i-\Z-1,i-\Z-2}},red,fill=red!20] 
     \ifnum\Z>1
      let \p1=(i-\the\numexpr\Z-1\relax-1),\p2=(i-\the\numexpr\Z-1\relax-2),
       \p3=(i-\Z-1),\p4=(i-\Z-2)
       in
    ({min(\x1,\x3)},\Y-0.2) rectangle ({max(\x2,\x4)},\Y)
    \fi;
    \draw[name intersections={of=B and h-\Z,by={i-\Z-1,i-\Z-2}},red,fill=red!60] 
     \ifnum\Z>1
      let \p1=(i-\the\numexpr\Z-1\relax-1),\p2=(i-\the\numexpr\Z-1\relax-2),
       \p3=(i-\Z-1),\p4=(i-\Z-2)
       in
    ({max(\x1,\x3)},\Y-0.2) rectangle ({min(\x2,\x4)},\Y)
    \fi;
    }
  \end{scope}
 \end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容