tikz datavisualization을 사용하여 곡선 아래 영역의 색상을 지정하는 방법은 무엇입니까?

tikz datavisualization을 사용하여 곡선 아래 영역의 색상을 지정하는 방법은 무엇입니까?

일반적으로 나는 곡선 플로팅에 일반 tikz를 사용하고 있습니다. 50mm 그리드의 "교과서 스타일" 좌표계가 필요합니다.

tikz 데이터 시각화 라이브러리를 사용해 보았습니다.

\documentclass{article}
\usepackage{tikz,pgfplots}
\usetikzlibrary{datavisualization}
\usetikzlibrary{datavisualization.formats.functions}

\pagestyle{empty}
\begin{document}

\begin{tikzpicture}[]
\datavisualization [ 
      school book axes={unit=0.5},
      visualize as smooth line, 
      x axis={label={$x$},grid,grid={minor steps between steps=1}}, 
      y axis={label={$y$},grid,grid={minor steps between steps=1}},
      every major grid/.style = {style={gray, thin}},
      every minor grid/.style = {style={gray, very thin}}
]

data [format=function] { 
  var x : interval [-2:2]; 
  func y = 1/2*(\value x)^2; 
}
info' {
   \fill[fill=lightgray] (visualization cs: x=1, y=0) -- plot [domain=1:2] (visualization cs: x=\x,y={0.5*(\x)^2}) -- (visualization cs: x=2, y=0) --cycle;
}
;
\end{tikzpicture}

\end{document}

내가 제대로 이해하지 못한 유일한 것은 곡선 아래 영역을 색칠하는 것입니다. info' 블록에서 다음을 시도했습니다.

\fill[fill=lightgray] (visualization cs: x=1, y=0) -- plot [domain=1:2] (visualization cs: x=\x,y={0.5*(\x)^2}) -- (visualization cs: x=2, y=0) --cycle;

그러나 이로 인해 PGF 수학 오류가 발생합니다. 패키지 PGF 수학 오류: '0.5*(1)^2' 입력을 구문 분석할 수 없습니다.

시각화 CS를 사용하도록 플롯 명령에 지시하는 방법이 필요한 것 같습니다.

미리 감사드립니다.

건배

답변1

. visualize as line​그래서 나는 후자의 정의를 에서 복사합니다 tikzlibrarydatavisualization.code.tex. 유일한 차이점은

every path/.style={draw},

로 변경됩니다

every path/.style={draw,fill},

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{datavisualization,datavisualization.formats.functions}

\begin{document}

\makeatletter
\tikzdatavisualizationset{
  visualize as pie/.style={
    new object={
      when=after survey,
      store=/tikz/data visualization/visualizers/#1,
      class=plot handler visualizer,
      arg1=#1,
      arg2={\tikz@dv@plot@handler,\tikz@dv@plot@mark@maker}
    },
    new visualizer={#1}{%
      every path/.style={draw,fill},
      style={every mark/.append style={color=visualizer color}},
      mark size=2pt,
      semithick,
      color=visualizer color,
      mark=none,
      /tikz/data visualization/every visualize as line/.try,
    }{visualizer in legend=\tikz@dv@legend@entry@as@example},
    #1={straight line}
  },
  visualize as pie/.default=pie,
}

\begin{tikzpicture}
    \datavisualization[
        school book axes={unit=0.5},
        x axis={label={$x$},grid,grid={minor steps between steps=1}}, 
        y axis={label={$y$},grid,grid={minor steps between steps=1}},
        every major grid/.style={style={gray,thin}},
        every minor grid/.style={style={gray,very thin}},
        visualize as pie
    ]
        data point[x=-2, y=0]
        data[format=function]{var x :interval [-2:2];func y =1/2*(\value x)^2;}
        data point[x=2, y=0];
\end{tikzpicture}

\end{document}

답변2

정확히 시각화를 사용하는 것이 아니라 라이브러리를 pgfplots사용하는 것 입니다 fillbetween. 이것은 쉬워 보일 것입니다.

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\usetikzlibrary{fillbetween}

\pagestyle{empty}
\begin{document}

\begin{tikzpicture}[]
  \begin{axis}[
    grid=both,
    ymin=0,
    xmin=-3,xmax=3,
    axis on top
    ]
    \addplot[draw=none,name path=A,domain=-2:2,fill=olive!40] {1/2*(x)^2}\closedcycle;
    \addplot[solid,thick,red,domain=-2:2] {1/2*(x)^2};
  \end{axis}
\end{tikzpicture}

\end{document}

여기에 이미지 설명을 입력하세요

먼저 영역을 채우고 채우기 주변의 선을 피하기 위해 곡선을 그렸습니다. 또한 이 경우 축을 맨 위에 axis on top유지하는 데 도움이 됩니다 .x

답변3

좌표 계산( \usetikzlibrary{calc})을 사용하면 좌표 변환을 수행할 수 있습니다. 불행하게도 나는 이런 종류의 지저분한 변환만을 발견했습니다. 아마도 누군가가 이를 수행하는 더 깔끔한 방법을 게시할 수 있을 것입니다.

info' {
  \begin{scope}[shift={(visualization cs:x=0, y=0)},
     x={($(visualization cs:x=1, y=0)-(visualization cs:x=0, y=0)$)},
     y={($(visualization cs:x=0, y=1)-(visualization cs:x=0, y=0)$)}]
    \fill[fill=lightgray] (1,0) -- plot [domain=1:2] (\x,{0.5*(\x)^2}) -- (2, 0) --cycle;
  \end{scope}
}

관련 정보