8 votos

La mejor herramienta para generar diagramas de flujo de caja

A menudo tengo que generar diagramas de flujo de caja.

Me preguntaba si alguien tiene una buena herramienta para generarlos en cualquiera $\LaTeX$ ¿o una foto?

3voto

Jiaaro Puntos 14379

He encontrado un buen ejemplo en esta página utilizando el paquete pgf/tikZ para $\LaTeX$ .

El sitio web está dando el código para $\LaTeX$ Si utilizas LyX, para obtener la misma muestra que en la página web tienes que hacer lo siguiente. Primero edita el preámbulo del documento usando Documento->Configuración:

 \usepackage{siunitx}
 \usepackage{tikz}
 \usetikzlibrary{calc,matrix}

y luego lo siguiente en un bloque de código:

 \begin{tikzpicture}[>=stealth,ultra thick]
    \draw[->] (0,0) -- (10,0);
    \draw (-1,0) node[below] {n} (-1,0.5) node[above] {PMT};
    \foreach \x/\n in {1/0,3/1,5/2,7/3,9/4}
      \draw (\x,0) node(\n)[below] {\n} -- (\x,0.5);
    \foreach \x/\n in {1/0,3/1,5/2,7/3}
      \draw (\x,0.5) node[above] {\num{5000}};
    \matrix (calc) [matrix of math nodes,matrix anchor=north west,nodes={anchor=east}] at (9,-1) {%
      \$ \num{5300.00} & = & \num{5000}\times (\num{1.06})^1 \\
      \$ \num{5618.00} & = & \num{5000}\times (\num{1.06})^2 \\
      \$ \num{5955.08} & = & \num{5000}\times (\num{1.06})^3 \\
      \$ \num{6312.38} & = & \num{5000}\times (\num{1.06})^4 \\
      \$ \num{23185.46} \\
    };
    \draw[thick] (calc-5-1.north west) -- (calc-5-1.north east);
    \foreach \n/\l in {0/4,1/3,2/2,3/1}
      \draw[->,gray!50] (\n) |- ($(calc-\l-1.west)+(-0.5,0)$);
  \end{tikzpicture}

0 votos

¿Por qué crees que esto requiere LyX?

0 votos

No lo hace, sólo di los pasos para usarlo con LyX, editaré para aclararlo. Puse los pasos para $LyX$ porque conozco a muchas personas que no están familiarizadas con el trabajo directo con $\LaTeX$ archivos.

3voto

Popofr13 Puntos 86

Esto se puede hacer usando python con la siguiente función (toda la documentación está disponible en este Repo de GitHub ):

import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator

def diagram (t, value, cashflow, c1="k", c2="k", currency="$", path = "test.png", aspect = [12,6], int_x = True, bar = True, show = False):

    fig, ax1 = plt.subplots(figsize=(aspect))

    # Define x axis as integer (optional)
    if int_x:
        ax1.xaxis.set_major_locator(MaxNLocator(integer=True))

    # Plot value (left axis) with color c1
    if (bar):
        ax1.bar(t, value, color = c1,  alpha= 0.3)
    else:
        ax1.plot(t, value, color = c1,  alpha= 0.3)
    ax1.set_xlabel('time (year)')

    # Set value label and currency
    ax1.set_ylabel('Future Value '+ currency, color = c1)
    ax1.tick_params('y', colors = c1)

    # Define twin axis for cashflow
    ax2 = ax1.twinx()

    # Find positive and negative values in cashflow
    pos = [i for i in range(len(cashflow)) if cashflow[i] > 0]
    neg = [i for i in range(len(cashflow)) if cashflow[i] < 0]

    # Plot cashflow (right axis) in the correct direction with color c2
    if (len(pos)):
        markerline, stemlines, baseline = ax2.stem(t[pos], cashflow[pos], markerfmt='^', basefmt=" ")
        plt.setp(stemlines, 'color', c2)
        plt.setp(markerline, 'color', c2)
    if (len(neg)):
        markerline, stemlines, baseline = ax2.stem(t[neg], cashflow[neg] ,markerfmt='v', basefmt=" ")
        plt.setp(stemlines, 'color', c2)
        plt.setp(markerline, 'color', c2)

    # Set cashflow label and currency
    ax2.set_ylabel('Cash Flow '+ currency, color=c2)
    ax2.tick_params('y', colors=c2)
    fig.tight_layout()

    # Remove the frame to visualize data more clearly
    ax1.spines['top'].set_visible(False)
    ax1.spines['right'].set_visible(False)
    ax1.spines['bottom'].set_visible(False)
    ax1.spines['left'].set_visible(False)
    ax2.spines['top'].set_visible(False)
    ax2.spines['right'].set_visible(False)
    ax2.spines['bottom'].set_visible(False)
    ax2.spines['left'].set_visible(False)

    # Save the plot to the specified path with 500dpi
    fig.savefig(path, dpi = 500)

    # Show plot (optional)
    plt.show (show)

2voto

Timothy Carter Puntos 7079

Aparte del enfoque de TikZ que has encontrado, estos lenguajes de scripting funcionarían:

  • MetaPost
  • PSTricks
  • Asíntota
  • MATLAB, véase cfplot
  • Mathematica, véase Cashflow

Los gráficos vectoriales son los más adecuados para esta tarea, así que si prefiere la interfaz gráfica de usuario apunte y haga clic:

  • Adobe Illustrator
  • CorelDRAW
  • Inkscape (gratuito)

1 votos

Más allá de una lista de paquetes de software, ¿puede dar ejemplos de cómo alguien crearía las parcelas? Por ejemplo, ¿hay algunos comandos MetaPost que el OP podría copiar y pegar?

1 votos

Sí podría, pero de su pregunta se desprende que pidió una buena herramienta, no comandos específicos.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X