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?
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?
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}
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)
Aparte del enfoque de TikZ que has encontrado, estos lenguajes de scripting funcionarían:
cfplot
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:
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.