Para exibir uma análise de sensibilidade, quero produzir umTrama de tornado. No gráfico, um valor de caso base específico é comparado aos valores produzidos após a alteração dos parâmetros no modelo. Eu comecei a partir dissoexemplo. Com isso consegui obter este MWE:
\usepackage{pgf}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}
\usetikzlibrary{intersections,backgrounds}
\usetikzlibrary{decorations.pathmorphing}
\pgfplotsset{
TornadoPlot/.style={% Overall settings
width = 1\textwidth,
line width=1pt,
tick style={line width=0.8pt},
xmin = -50, xmax = 50,
xtick = {-50, -40, -30, -20, -10, 0, 10, 20, 30, 40, 50},
xticklabels = {-50, -40, -30, -20, -10, 0, 10, 20, 30, 40, 50},
xmajorgrids = true,
minor x tick num = 1,
tick align = outside,
xtick pos = left, ytick pos = left,
xbar, bar shift=0pt,
height = 7cm,
enlarge y limits = 0.1, ytick = {0,1,2,3,4,5,6},
nodes near coords={
\pgfkeys{/pgf/fpu=true}%
\pgfmathparse{\pgfplotspointmeta}%
\pgfmathprintnumber{\pgfmathresult}
},
nodes near coords align = {horizontal},
before end axis/.code={
\draw ({rel axis cs:0,0}-|{axis cs:0,0}) -- ({rel axis cs:0,1}-|{axis cs:0,0});
}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[TornadoPlot, legend style={at={(0.975,0.25)}}]
\addplot[fill=green!40] coordinates{(-3.5,0) (-16,1) (-17.5,2) (-19,3) (-34,4) (-27,5) (-22,6)};
\addplot[fill=red!40] coordinates{(4,0) (19,1) (12.5,2) (28.5,3) (34,4) (82,5) (38,6)};
\legend{upside, downside}
\end{axis}
\end{tikzpicture}
\end{document}
Porém, uma das barras (82, 5) possui um valor x positivo que está fora da faixa do domínio do gráfico. Posso restringir o comprimento dessa barra e forçar uma quebra, enquanto ainda exibe o valor original de x? Eu tenho vistoexemplospara gráficos de barras verticais, mas até agora não consegui reproduzir isso para meu gráfico de tornado.
Responder1
Sim você pode. Para obter detalhes sobre como fazer isso, dê uma olhada nos comentários no código.
% used PGFPlots v1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{
TornadoPlot/.style={% Overall settings
width=\textwidth,
height=7cm,
xmin=-50,
xmax=50,
line width=1pt,
tick style={line width=0.8pt},
xmajorgrids=true,
minor x tick num=1,
tick align=outside,
tick pos=left,
xbar,
bar shift=0pt,
enlarge y limits=0.1,
ytick distance=1,
% -----------------------------------------------------------------
% this is the solution to your problem
% -----------------------------------------------------------------
% we want the *original* x value and store it in a macro ...
visualization depends on={rawx \as \rawx},
% ... which value should be shown in the `nodes near coords'
nodes near coords={%
\pgfmathprintnumber{\rawx}%
},
% -----------------------------------------------------------------
before end axis/.code={
\draw ({rel axis cs:0,0} -| {axis cs:0,0})
-- ({rel axis cs:0,1} -| {axis cs:0,0})
;
},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
TornadoPlot,
legend style={at={(0.975,0.25)}},
% and we want to limit the range of the bars to the axis limits
restrict x to domain*={
\pgfkeysvalueof{/pgfplots/xmin}:\pgfkeysvalueof{/pgfplots/xmax}
},
]
\addplot [fill=green!40] coordinates
{(-3.5,0) (-16,1) (-17.5,2) (-19,3) (-34,4) (-27,5) (-22,6)};
\addplot [fill=red!40] coordinates
{(4,0) (19,1) (12.5,2) (28.5,3) (34,4) (82,5) (38,6)};
\legend{upside, downside}
\end{axis}
\end{tikzpicture}
\end{document}