Um eine Sensitivitätsanalyse darzustellen, möchte ich eineTornado-Grundstück. In der Grafik wird ein bestimmter Basisfallwert mit den Werten verglichen, die sich nach der Änderung der Parameter im Modell ergeben. Ich bin von diesem Wert ausgegangenBeispiel. Damit konnte ich dieses MWE erhalten:
\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}
Einer der Balken (82, 5) hat jedoch einen positiven x-Wert, der außerhalb des Bereichs der Domäne des Diagramms liegt. Kann ich die Länge dieses Balkens einschränken und einen Umbruch erzwingen, während weiterhin der ursprüngliche x-Wert angezeigt wird? Ich habe gesehenBeispielefür vertikale Balkendiagramme, aber bisher konnte ich dies für mein Tornado-Diagramm nicht reproduzieren.
Antwort1
Ja, das können Sie. Weitere Informationen hierzu finden Sie in den Kommentaren im Code.
% 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}