
Normalerweise verwende ich zum Kurvenzeichnen einfaches Tikz. Ich benötige Koordinatensysteme im „Schulbuchstil“ mit einem 50-mm-Raster.
Ich habe versucht, die Datenvisualisierungsbibliothek Tikz zu verwenden.
\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}
Das einzige, was ich nicht richtig hinbekommen habe, ist das Einfärben des Bereichs unter einer Kurve. Ich habe im Infoblock Folgendes versucht:
\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;
Dies führt jedoch zu einem PGF-Mathematikfehler. Paket-PGF-Mathematikfehler: Eingabe „0,5*(1)^2“ konnte nicht analysiert werden.
Ich glaube, ich brauche eine Möglichkeit, dem Plot-Befehl mitzuteilen, dass er die Visualisierungs-CS verwenden soll.
Dank im Voraus.
Prost
Antwort1
Es ist besser, einen neuen Visualizer zu erstellen, der sich von unterscheidet visualize as line
. Also kopiere ich die Definition des letzteren von tikzlibrarydatavisualization.code.tex
. Der einzige Unterschied besteht darin, dass
every path/.style={draw},
wird geändert in
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}
Antwort2
Nicht direkt mithilfe der Visualisierung, sondern pgfplots
mithilfe der dazugehörigen fillbetween
Bibliothek. Das sieht einfach aus.
\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}
Ich habe zuerst den Bereich ausgefüllt und dann die Kurve gezeichnet, um die Linien um die Füllung herum zu vermeiden. In diesem Fall hilft es auch, die Achse oben axis on top
zu halten .x
Antwort3
Mithilfe der Koordinatenberechnung ( \usetikzlibrary{calc}
) kann man eine Koordinatentransformation durchführen. Leider habe ich nur diese Art von unübersichtlicher Transformation gefunden, vielleicht kann jemand eine sauberere Methode dafür posten.
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}
}