
Normalmente estoy usando tikz simple para trazar curvas. Necesito sistemas de coordenadas "estilo libro escolar" con una cuadrícula de 50 mm.
Intenté usar la biblioteca de visualización de datos 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}
Lo único que no hice bien es colorear el área debajo de una curva. Intenté lo siguiente en el bloque de información:
\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;
Pero esto resulta en un error matemático PGF. Error matemático del paquete PGF: no se pudo analizar la entrada '0.5*(1)^2'
Supongo que necesito una forma de decirle al comando de trazado que use la visualización cs.
Gracias de antemano.
Salud
Respuesta1
Mejor cree un nuevo visualizador diferente de visualize as line
. Entonces copio la definición de este último de tikzlibrarydatavisualization.code.tex
. La única diferencia es que
every path/.style={draw},
se cambia a
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}
Respuesta2
No exactamente usando visualización sino pgfplots
con su fillbetween
biblioteca. Esto parecerá fácil.
\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}
Primero llené la región y tracé la curva para evitar las líneas alrededor del relleno. Además, en este caso axis on top
ayuda a mantener el eje en la parte superior.x
Respuesta3
Usando el cálculo de coordenadas ( \usetikzlibrary{calc}
), se puede hacer una transformación de coordenadas. Desafortunadamente, solo encontré este tipo de transformación desordenada, tal vez alguien pueda publicar una forma más limpia de hacerlo.
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}
}