
通常我會使用普通 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}
我唯一做錯的是給曲線下的區域著色。我在資訊區塊中嘗試了以下操作:
\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}
}