
Tengo el siguiente código:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage[active,float]{preview}
\usetikzlibrary{calc}
\usetikzlibrary{graphs,plotmarks,arrows,automata,positioning,fit,shapes.geometric,backgrounds}
\usepackage{graphicx}
\PreviewEnvironment{tikzpicture}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}[x=0.8cm,y=0.5cm]
%axis
\draw (0,0) -- coordinate (x axis mid) (10,0);
\draw (0,0) -- coordinate (y axis mid) (0,12);
%ticks
\foreach \x in {0,...,10}
\draw (\x,0pt) -- (\x,-3pt) node[anchor=north] {\x};
\foreach \y in {0,...,12}
\draw (0pt,\y) -- (-3pt,\y) node[anchor=east] {\y};
%labels
\node[below=0.8cm,xshift=0.3cm,scale=1.5] at (x axis mid) {$\sum{t_i}\;\;\longrightarrow$};
% plot first concave function
\draw[mark=square*,green,thick,mark options={fill=green}] (0,2) -- (1,3) -- (2,4) -- (3,5) -- (4,5) -- (5,5) -- (6,5) -- (7,5) -- (8,5) -- (9,3) -- (10,1);
\node[mark=square*,green,thick,mark options={fill=green}] at (4,5) {};
% plot second concave function
\draw[mark=square*,red,thick,mark options={fill=red}] (0,1) -- (1,2) -- (2,3) -- (3,4) -- (4,5) -- (5,6) -- (6,6) -- (7,5) -- (8,4) -- (9,3) -- (10,2);
% plot third concave function
\draw[mark=*,blue,thick,mark options={fill=blue}] (0,3) -- (1,5) -- (2,7) -- (3,9) -- (4,10) -- (5,11) -- (6,11) -- (7,10) -- (8,9) -- (9,6) -- (10,3);
%legend
\begin{scope}[shift={(0.5,10)}]
\draw[yshift=3\baselineskip] (0,0) --
plot[mark=square*, mark options={fill=red}] (0.25,0) -- (0.5,0) node[right]{$f(t)$};
\draw[yshift=2\baselineskip] (0,0) --
plot[mark=square*, mark options={fill=green}] (0.25,0) -- (0.5,0) node[right]{$g(t)$};
\draw[yshift=\baselineskip] (0,0) --
plot[mark=square*, mark options={fill=blue}] (0.25,0) -- (0.5,0) node[right]{$f(t) + g(t)$};
\end{scope}
\end{tikzpicture}
\end{document}
representando la siguiente figura:
Tengo problemas para hacer lo siguiente:
Muestra los números en ambos ejes xy con un paso de 2
Por alguna razón no puedo visualizar los nodos entre los segmentos de línea.
No se puede agregar un área rectangular alrededor de la leyenda.
Respuesta1
Como se menciona en los comentarios y en la respuesta de Harish, el uso pgfplots
le permite especificar el estilo una vez y reutilizarlo en su documento en lugar de reinventar la rueda para cada trama.
Creé un cycle list
llamado mycycle
que se puede usar en cualquier gráfico (para cycle list name=mycycle
recorrer los estilos de trazado).
El resto del estilo se realiza en las opciones del axis
entorno, pero se empaqueta fácilmente en un estilo TikZ para reutilizarlo en otros gráficos.
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\pgfplotscreateplotcyclelist{mycycle}{%
green!70!black,every mark/.append style={fill=green!80},mark=diamond*\\%
red!70!black,every mark/.append style={fill= red!80},mark=square*\\%
blue!70!black,every mark/.append style={fill= blue!80},mark=*\\%
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=left,
ymin=0,ymax=13.75,
tick align=inside,
axis line style={-},
cycle list name=mycycle,
legend pos=north west,
legend cell align=left,
legend style={
outer sep=-0.2em,
inner sep=0.2em,
node font=\small,
},
xlabel={$\sum{t_i}\;\;\longrightarrow$},
]
\addplot coordinates {
(0,2) (1,3) (2,4) (3,5) (4,5) (5,5) (6,5) (7,5) (8,5) (9,3) (10,1)
};
\addlegendentry{$f(t)$};
\addplot coordinates {
(0,1) (1,2) (2,3) (3,4) (4,5) (5,6) (6,6) (7,5) (8,4) (9,3) (10,2)
};
\addlegendentry{$g(t)$};
\addplot coordinates {
(0,3) (1,5) (2,7) (3,9) (4,10) (5,11) (6,11) (7,10) (8,9) (9,6) (10,3)
};
\addlegendentry{$f(t)+g(t)$};
\end{axis}
\end{tikzpicture}
\end{document}
Respuesta2
¿Por qué no utilizarlo pgfplots
para este tipo de trabajos? De cualquier forma, para dibujar un cuadro alrededor de la leyenda, puedes usar fit
la biblioteca. La sintaxis de plot
es diferente. Para obtener marcas de trazado, debe utilizar coordenadas con la sintaxis adecuada. Y para obtener etiquetas de marca en múltiplos de, 2
cambie el bucle foreach como {0,2,...,12}
.
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\usetikzlibrary{graphs,plotmarks,arrows,automata,positioning,fit,shapes.geometric,backgrounds}
\usetikzlibrary{plotmarks,fit}
\begin{document}
\begin{tikzpicture}[x=0.8cm,y=0.5cm]
%axis
\draw (0,0) -- coordinate (x axis mid) (10,0);
\draw (0,0) -- coordinate (y axis mid) (0,12);
%ticks
\foreach \x in {0,2,...,10}
\draw (\x,0pt) -- (\x,-3pt) node[anchor=north] {\x};
\foreach \y in {0,2,...,12}
\draw (0pt,\y) -- (-3pt,\y) node[anchor=east] {\y};
%labels
\node[below=0.8cm,xshift=0.3cm,scale=1.5] at (x axis mid) {$\sum{t_i}\;\;\longrightarrow$};
% plot first concave function
\draw[green,thick,] plot[mark=square*,mark options={fill=green}] coordinates{(0,2) (1,3) (2,4) (3,5) (4,5) (5,5) (6,5) (7,5) (8,5) (9,3) (10,1)};
\node[mark=square*,green,thick,mark options={fill=green}] at (4,5) {};
% plot second concave function
\draw[red,thick] plot[mark=square*,mark options={fill=red}] coordinates {(0,1) (1,2) (2,3) (3,4) (4,5) (5,6) (6,6) (7,5) (8,4) (9,3) (10,2)};
% plot third concave function
\draw[blue,thick] plot [mark=*,mark options={fill=blue}] coordinates{(0,3) (1,5) (2,7) (3,9) (4,10) (5,11) (6,11) (7,10) (8,9) (9,6) (10,3)};
%legend
\begin{scope}[shift={(0.5,10)}]
\draw[yshift=3\baselineskip] (0,0) node(a){} --
plot[mark=square*, mark options={fill=red}] (0.25,0) -- (0.5,0) node[right]{$f(t)$};
\draw[yshift=2\baselineskip] (0,0) --
plot[mark=square*, mark options={fill=green}] (0.25,0) -- (0.5,0) node[right]{$g(t)$};
\draw[yshift=\baselineskip] (0,0) --
plot[mark=square*, mark options={fill=blue}] (0.25,0) -- (0.5,0) node[right](fg){$f(t) + g(t)$};
\node[draw,fit=(a) (fg)] {};
\end{scope}
\end{tikzpicture}
\end{document}
Por cierto, no necesitarás preview
el paquete explícitamente con standalone
la clase.