Autor Tema: Gráficos en LaTeX

0 Usuarios y 1 Visitante están viendo este tema.

17 Enero, 2018, 02:19 am
Respuesta #10

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 3,354
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Algunos gráficos con PGFPlots en \( \LaTeX \)

Antes que nada voy a pasar a explicar por qué utilizo el preámbulo que aparece en estos gráficos que realicé para esta guía:

Spoiler
Primero que nada, como siempre declaramos el tipo de documento y el tamaño de la letra para todo el cuerpo del mismo:

\documentclass[11pt]{article}

Utilizaremos el paquete pgfplots para crear nuestros gráficos:

\usepackage{pgfplots}

y agregaremos ciertos parámetros:

  • axis lines=center: Centra los ejes cartesianos en el gráfico, sea cual sea;
  • soldot/.style={color=black,only marks,mark=*}: Tendremos un puntito negro;
  • holdot/.style={color=black,fill=white,only marks,mark=*}: Tendremos un puntito blanco, y;
  • compat=1.15: Versión del paquete con la que trabajaremos. Es muy importante agregar este parámetro.

Quedando de la siguiente manera:

\pgfplotsset{axis lines=center,soldot/.style={color=black,only marks,mark=*},holdot/.style={color=black,fill=white,only marks,mark=*},compat=1.15}

No pondremos el paquete TikZ porque ya viene incorporado con el paquete PGFPlots. Son "amigos" :D.
[cerrar]



Ahora sí, comparto 9 gráficos y sus respectivos códigos:

Gráfico 1
\begin{ tikzpicture}
   \begin{axis}[xmin=-1,xmax=6.5,ymin=-0.7,ymax=3]
      \pgfplotsset{ticks=none}
      \addplot [domain=1:6,fill=gray!60] (\x,{sin((\x-1) r)+1.5})\closedcycle;
      \draw (axis cs:6,2) -- (axis cs:0,2) node
{$f(c)$};
      \draw (axis cs:3.606,2) -- (axis cs:3.606,0) node[below] {$c$};
      \draw (axis cs:1,2) -- (axis cs:1,0) node[below] {$a$};
      \draw (axis cs:6,2) -- (axis cs:6,0) node[below] {$b$};
   \end{axis}
\end{tikzpicture}


[cerrar]
Gráfico 2
\begin{ tikzpicture}
   \draw[fill=gray!50,gray!50] (0,0) rectangle (5.5,0.25);
   \draw[fill=gray!50,gray!50] (5.5,0) rectangle (6.1,3.9);
   \draw (5.5,1) -- (0.4,1) node
{$\Theta$};
   \draw (0.4,1) -- (5.5,1.6);
   \draw (0.4,1) -- (5.5,3.6);
   \draw (5.5,3.6) -- (5.5,1);
   \draw (5.5,0.65) -- (0.4,0.65);
   \draw (0.4,0.55) -- (0.4,0.75);
   \draw (5.5,0.55) -- (5.5,0.75);
   \draw (5.65,3.6) -- (5.65,1);
   \draw (5.55,3.6) -- (5.75,3.6);
   \draw (5.55,1) -- (5.75,1);
   \draw (5.55,1.6) -- (5.75,1.6);
   \draw[gray!50,very thick] (2,1.81) to [out=-60,in=60] (2,1.18);
   \node at (2.3,1.6) {$\theta$};
   
   \draw[gray!50,very thick] (4,2.81) to [out=-60,in=60] (4,1);
   \node at (4.6,1.9) {$\theta_1$};
   
   \draw[gray!50,very thick] (3,1.3) to [out=-60,in=60] (3,1);
   \node at (3.35,1.16) {$\theta_2$};
   
   \node at (2.95,0.45) {$x$};
   \node at (5.85,2.6) {$h$};
   \node at (5.85,1.3) {$d$};
\end{tikzpicture}


[cerrar]
Gráfico 3
\begin{ tikzpicture}
   \begin{axis}[ymax=1.3,ymin=-0.5,ytick={0,0.5,1}]
      \addplot [black, domain=-1:1] {x*x};
      \addplot[soldot] coordinates{(-1,1)} node[above right] {$A(-1,1)$};
      \addplot[soldot] coordinates{(1,1)} node[above left] {$B(1,1)$};
      \addplot[soldot] coordinates{(0.5,0.25)} node[below right] {$P(x,y)$};
      \draw (axis cs:-1,1) -- (axis cs:0.5,0.25) -- (axis cs:1,1);
   \end{axis}
\end{tikzpicture}


[cerrar]

Gráfico 4
\begin{ tikzpicture}
   \begin{axis}
      \addplot[domain=-1:1,black,samples=500] {sin((1/x)r)};
   \end{axis}
\end{tikzpicture}


[cerrar]

17 Enero, 2018, 02:20 am
Respuesta #11

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 3,354
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Gráfico 5
\begin{ tikzpicture}
   \begin{axis}
      \pgfplotsset{ticks=none}
      \addplot[domain=-1.5:1,black] {sin((x)r)};
      \addplot[domain=1:1.6,black] {log10(x^4-1)-0.2};
      
      \addplot[holdot] coordinates{(1,0.841)};
      \addplot[soldot] coordinates{(1,0.35)};
      \addplot[holdot] coordinates{(1,-1.2)};
      \draw[dotted] (axis cs:1,0.8) -- (axis cs:1,0);
      \draw[dotted] (axis cs:1,-1.2) -- (axis cs:1,0) node[below right] {$a$};
   \end{axis}
\end{tikzpicture}


[cerrar]

Gráfico 6
\begin{ tikzpicture}
   \begin{axis}
      \addplot[black, samples=500, domain=-20:14] ({2.0*(\x - sin(\x r))}, {2.0*(1.0 - cos(\x r))});
   \end{axis}
\end{tikzpicture}


[cerrar]

Gráfico 7
\begin{ tikzpicture}
   \begin{axis}[xmin=-2]
      \addplot[black, samples=100, domain=0:2.0*pi] ({2.0*cos(\x r)}, {3.0*sin(\x r)});
   \end{axis}
\end{tikzpicture}


[cerrar]

Gráfico 8
\begin{ tikzpicture}
   \begin{axis}
      \addplot[black, samples=500, domain=0:2.0*pi] ({cos(\x r) * cos(\x r) * cos(\x r)}, {sin(\x r) * sin(\x r) * sin(\x r)});
   \end{axis}
\end{tikzpicture}


[cerrar]

17 Enero, 2018, 02:21 am
Respuesta #12

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 3,354
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Gráfico 9
\begin{ tikzpicture}
   \begin{axis}[ymax=12,xmax=4]
      \addplot[black, samples=100, domain=-4.0:4.0] ({2.0 + \x}, {3.0*\x * \x });
   \end{axis}
\end{tikzpicture}


[cerrar]



El código completo:

Código completo
\documentclass[11pt]{article}
\usepackage{pgfplots}
\pgfplotsset{axis lines=center,soldot/.style={color=black,only marks,mark=*},holdot/.style={color=black,fill=white,only marks,mark=*},compat=1.15}

\begin{document}

Gr\'afico 1

\begin{ tikzpicture}
   \begin{axis}[xmin=-1,xmax=6.5,ymin=-0.7,ymax=3]
      \pgfplotsset{ticks=none}
      \addplot [domain=1:6,fill=gray!60] (\x,{sin((\x-1) r)+1.5})\closedcycle;
      \draw (axis cs:6,2) -- (axis cs:0,2) node
{$f(c)$};
      \draw (axis cs:3.606,2) -- (axis cs:3.606,0) node[below] {$c$};
      \draw (axis cs:1,2) -- (axis cs:1,0) node[below] {$a$};
      \draw (axis cs:6,2) -- (axis cs:6,0) node[below] {$b$};
   \end{axis}
\end{tikzpicture}

Gr\'afico 2

\begin{ tikzpicture}
   \draw[fill=gray!50,gray!50] (0,0) rectangle (5.5,0.25);
   \draw[fill=gray!50,gray!50] (5.5,0) rectangle (6.1,3.9);
   \draw (5.5,1) -- (0.4,1) node
{$\Theta$};
   \draw (0.4,1) -- (5.5,1.6);
   \draw (0.4,1) -- (5.5,3.6);
   \draw (5.5,3.6) -- (5.5,1);
   \draw (5.5,0.65) -- (0.4,0.65);
   \draw (0.4,0.55) -- (0.4,0.75);
   \draw (5.5,0.55) -- (5.5,0.75);
   \draw (5.65,3.6) -- (5.65,1);
   \draw (5.55,3.6) -- (5.75,3.6);
   \draw (5.55,1) -- (5.75,1);
   \draw (5.55,1.6) -- (5.75,1.6);
   \draw[gray!50,very thick] (2,1.81) to [out=-60,in=60] (2,1.18);
   \node at (2.3,1.6) {$\theta$};
   
   \draw[gray!50,very thick] (4,2.81) to [out=-60,in=60] (4,1);
   \node at (4.6,1.9) {$\theta_1$};
   
   \draw[gray!50,very thick] (3,1.3) to [out=-60,in=60] (3,1);
   \node at (3.35,1.16) {$\theta_2$};
   
   \node at (2.95,0.45) {$x$};
   \node at (5.85,2.6) {$h$};
   \node at (5.85,1.3) {$d$};
\end{tikzpicture}

Gr\'afico 3

\begin{ tikzpicture}
   \begin{axis}[ymax=1.3,ymin=-0.5,ytick={0,0.5,1}]
      \addplot [black, domain=-1:1] {x*x};
      \addplot[soldot] coordinates{(-1,1)} node[above right] {$A(-1,1)$};
      \addplot[soldot] coordinates{(1,1)} node[above left] {$B(1,1)$};
      \addplot[soldot] coordinates{(0.5,0.25)} node[below right] {$P(x,y)$};
      \draw (axis cs:-1,1) -- (axis cs:0.5,0.25) -- (axis cs:1,1);
   \end{axis}
\end{tikzpicture}

Gr\'afico 4

\begin{ tikzpicture}
   \begin{axis}
      \addplot[domain=-1:1,black,samples=500] {sin((1/x)r)};
   \end{axis}
\end{tikzpicture}

Gr\'afico 5

\begin{ tikzpicture}
   \begin{axis}
      \pgfplotsset{ticks=none}
      \addplot[domain=-1.5:1,black] {sin((x)r)};
      \addplot[domain=1:1.6,black] {log10(x^4-1)-0.2};
      
      \addplot[holdot] coordinates{(1,0.841)};
      \addplot[soldot] coordinates{(1,0.35)};
      \addplot[holdot] coordinates{(1,-1.2)};
      \draw[dotted] (axis cs:1,0.8) -- (axis cs:1,0);
      \draw[dotted] (axis cs:1,-1.2) -- (axis cs:1,0) node[below right] {$a$};
   \end{axis}
\end{tikzpicture}

Gr\'afico 6

\begin{ tikzpicture}
   \begin{axis}
      \addplot[black, samples=500, domain=-20:14] ({2.0*(\x - sin(\x r))}, {2.0*(1.0 - cos(\x r))});
   \end{axis}
\end{tikzpicture}

Gr\'afico 7

\begin{ tikzpicture}
   \begin{axis}[xmin=-2]
      \addplot[black, samples=100, domain=0:2.0*pi] ({2.0*cos(\x r)}, {3.0*sin(\x r)});
   \end{axis}
\end{tikzpicture}

Gr\'afico 8

\begin{ tikzpicture}
   \begin{axis}
      \addplot[black, samples=500, domain=0:2.0*pi] ({cos(\x r) * cos(\x r) * cos(\x r)}, {sin(\x r) * sin(\x r) * sin(\x r)});
   \end{axis}
\end{tikzpicture}

Gr\'afico 9

\begin{ tikzpicture}
   \begin{axis}[ymax=12,xmax=4]
      \addplot[black, samples=100, domain=-4.0:4.0] ({2.0 + \x}, {3.0*\x * \x });
   \end{axis}
\end{tikzpicture}

\end{document}
[cerrar]


NOTA: Los gráficos 1, 6, 7, 8 y 9 están hechos en forma paramétrica (para aportar más variedad al asunto ::)). El resto no.

Saludos!

17 Enero, 2018, 08:08 pm
Respuesta #13

ingmarov

  • Moderador Global
  • Mensajes: 5,062
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola Manooooh

Están buenos los gráficos, no he usado ese paquete pgfplots y me parece genial.

Creo que (después de...) sería mejor cambiar el título del hilo a "Gráficos en Latex" o "Gráficos con Tikz y Pgfplots".



Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

17 Enero, 2018, 08:38 pm
Respuesta #14

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 3,354
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola ingmarov :D,

Están buenos los gráficos, no he usado ese paquete pgfplots y me parece genial.

Crea muy buenos gráficos de altísima calidad. Y lo mejor de todo es que son "sencillos" de hacer.

Creo que (después de...) sería mejor cambiar el título del hilo a "Gráficos en Latex" o "Gráficos con Tikz y Pgfplots".

Sí, me parece! Pero, ¿qué hacemos con los primeros mensajes (mis consultas)? No creo que sea grato que cuando el lector entre se encuentre con preguntas y luego halle más abajo estos gráficos :-\.
Si es por mí, por este motivo que acabo de señalar, no encuentro problemas en modificar dichos mensajes proponiendo el código a las preguntas que yo mismo formulé (pero también hay otro problema, y es qué hacemos con los mensajes que sí me respondieron, ya que quedarían mensajes sin sentido). Solucionado esto creo que podríamos modificar dicho título (desde ya que sólo es una sugerencia y no cuestiono en absoluto su idoneidad para modificar o no mensajes).

Saludos

17 Enero, 2018, 09:25 pm
Respuesta #15

ingmarov

  • Moderador Global
  • Mensajes: 5,062
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
...
Sí, me parece! Pero, ¿qué hacemos con los primeros mensajes (mis consultas)? No creo que sea grato que cuando el lector entre se encuentre con preguntas y luego halle más abajo estos gráficos :-\.
Si es por mí, por este motivo que acabo de señalar, no encuentro problemas en modificar dichos mensajes proponiendo el código a las preguntas que yo mismo formulé (pero también hay otro problema, y es qué hacemos con los mensajes que sí me respondieron, ya que quedarían mensajes sin sentido). Solucionado esto creo que podríamos modificar dicho título (desde ya que sólo es una sugerencia y no cuestiono en absoluto su idoneidad para modificar o no mensajes).

Saludos

Deja me te lo arreglo. Separaré parte de los mensajes con gráficos en un hilo independiente.

Eh... ¿Hay algun paquete para graficación en 3d?  ::) ::)
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

17 Enero, 2018, 09:47 pm
Respuesta #16

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 3,354
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Deja me te lo arreglo. Separaré parte de los mensajes con gráficos en un hilo independiente.

Bueno bueno... ¡¡muchas gracias!! Va a quedar bonito :D.

Eh... ¿Hay algun paquete para graficación en 3d?  ::) ::)

A que no sabés qué... ¡PGFPlots soporta gráficos en 3D! ::)

Como todavía no cursé Cálculo II (esa materia donde se tratan funciones de dos o más variables) sólo me limité a hacer un par de gráficos en el plano, por lo que estoy en 0 para ayudar con gráficos en el espacio :-[. De todas maneras podés empezar a investigar googleando "pgfplots 3d" y te salen muchos ejemplos. Creo que es sencillo también, como por ejemplo este gráfico que lo extraje de acá:

Gráfico en 3D
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\begin{ document}
\begin{tikzpicture}
  \begin{axis}[
    domain=-2:2,
    domain y=0:2*pi,
  ]

    \newcommand\expr[2]{exp(-#1^2) * sin(deg(#2))}

    \addplot3[
        contour gnuplot={
            % cdata should not be affected by z filter:
            output point meta=rawz,
            number=10,
            labels=false,
        },
        samples=41,
        z filter/.code=\def\pgfmathresult{-1.6},
    ]
        {\expr{x}{y}};

    \addplot3[
        samples=41,
        samples y=10,
        domain=0:2*pi,
        domain y=-2:2,
        % we want 1d (!) individually colored mesh segments:
        mesh, patch type=line,
        x filter/.code=\def\pgfmathresult{-2.5},
    ]
        (y,x,{\expr{y}{x}});

    \addplot3[
        samples=41,
        samples y=10,
        % we want 1d (!) individually colored mesh segments:
        mesh, patch type=line,
        y filter/.code=\def\pgfmathresult{8},
    ]
        {\expr{x}{y}};

    \addplot3[surf,samples=25]
        {\expr{x}{y}};

\end{axis}
\end{tikzpicture}
\end{document}



Fijate que en vez de utilizar la sentencia \addplot ... se usa \addplot3 ... para indicar que se trata de un gráfico en 3D.
También intuyo que no sólo se pueden hacer funciones, sino cualquier objeto (con distintos comandos, como dibujar un cubo, una esfera, etc.). En 2D esto es posible, como por ejemplo el gráfico 2 de la respuesta #10, donde se utilizan un rectángulo y varias líneas para graficar.
[cerrar]

Saludos!

17 Enero, 2018, 09:54 pm
Respuesta #17

sugata

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 3,072
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Bufffff......
¡¡¡¡Que maravilla!!!!

17 Enero, 2018, 10:00 pm
Respuesta #18

ingmarov

  • Moderador Global
  • Mensajes: 5,062
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...