Fügen Sie dem B-Chart eine benutzerdefinierte Legende hinzu

Fügen Sie dem B-Chart eine benutzerdefinierte Legende hinzu

Ich versuche, einem Balkendiagramm eine benutzerdefinierte Legende wie folgt einzufügen:

Bildbeschreibung hier eingeben

Leider kann ich überhaupt keine Beispiele für Legenden finden, die bei dieser Art von Diagrammen verwendet werden. Ist das möglich?

Mein Code ist:

\documentclass{article}
\usepackage{bchart}
\begin{document}
\begin{bchart}[steps={20,40,60,80,100,120, 140},max=140]
\bcbar[label=Median]{132} \bcskip{5pt} % you can set the seperation between bars in the argument of \bcskip
\bcbar[label=Amplitudenmaximum]{116} \bcskip{5pt}
\bcbar[label=Effektivwert]{70} \bcskip{5pt}
\bcbar[label=Standardabweichung]{66} \bcskip{5pt}
\bcbar[label=Schiefe]{60} \bcskip{5pt}
\bcbar[label=Standardabweichung, color=black!50]{59} \bcskip{5pt}
\bcbar[label=Varianz]{57} \bcskip{5pt}
\bcbar[label=Schiefe, color=black!50]{54} \bcskip{5pt}
\bcbar[label=Gleichrichtswert]{52} \bcskip{5pt}
\bcbar[label=Amplitudenminimum]{50} \bcskip{-2.1pt}
\bcxlabel{Anzahl von Anwendungen}
\end{bchart}
\end{document} 

Antwort1

Da bchartverwendet wird tikz, kann letzteres zum Zeichnen der Legende verwendet werden. Um die Legende über der x-Achse nach rechts auszurichten, sind einige Berechnungen erforderlich. Außerdem muss der Code Texte mit unterschiedlichen Längen berücksichtigen.

Im folgenden Code \bclegendwird ein Makro mit drei Argumenten definiert. Das erste ist optional und gibt die Länge eines Balkens in der Legende an. Der Standardwert beträgt 10 mm. Das zweite gibt den Abstand zwischen den Zeilen der Legende an, der auch als Abstand zwischen der X-Achse und dem Legendenrahmen verwendet wird. Im dritten Argument werden die Farben und Texte angegeben. Sie müssen in der Form color1/text1,color2/text2,...mit einem Paar pro Zeile angegeben werden.

Der Abstand der Legendenlinien zum Rahmen wird in definiert \bclldist. Mit \renewcommand{\bclldist}{<some length>}(nach dem Code) kann dieser geändert werden. Der Standardwert ist 1mm.

\documentclass{article}
\usepackage{bchart}

\usetikzlibrary{fit}

\makeatletter
\newdimen\legendxshift
\newdimen\legendyshift
\newcount\legendlines
% distance of frame to legend lines
\newcommand{\bclldist}{1mm}
\newcommand{\bclegend}[3][10mm]{%
    % initialize
    \legendxshift=0pt\relax
    \legendyshift=0pt\relax
    \xdef\legendnodes{}%
    % get width of longest text and number of lines
    \foreach \lcolor/\ltext [count=\ll from 1] in {#3}%
        {\global\legendlines\ll\pgftext{\setbox0\hbox{\bcfontstyle\ltext}\ifdim\wd0>\legendxshift\global\legendxshift\wd0\fi}}%
    % calculate xshift for legend; \bcwidth: from bchart package; \bclldist: from node frame, inner sep=\bclldist (see below)
    % \@tempdima: half width of bar; 0.72em: inner sep from text nodes with some manual adjustment
    \@tempdima#1\@tempdima0.5\@tempdima
    \pgftext{\bcfontstyle\global\legendxshift\dimexpr\bcwidth-\legendxshift-\bclldist-\@tempdima-0.72em}
    % calculate yshift; 5mm: heigt of bar
    \legendyshift\dimexpr5mm+#2\relax
    \legendyshift\legendlines\legendyshift
    % \bcpos-2.5mm: from bchart package; \bclldist: from node frame, inner sep=\bclldist (see below)
    \global\legendyshift\dimexpr\bcpos-2.5mm+\bclldist+\legendyshift
    % draw the legend
    \begin{scope}[shift={(\legendxshift,\legendyshift)}]
    \coordinate (lp) at (0,0);
    \foreach \lcolor/\ltext [count=\ll from 1] in {#3}%
    {
        \node[anchor=north, minimum width=#1, minimum height=5mm,fill=\lcolor] (lb\ll) at (lp) {};
        \node[anchor=west] (l\ll) at (lb\ll.east) {\bcfontstyle\ltext};
        \coordinate (lp) at ($(lp)-(0,5mm+#2)$);
        \xdef\legendnodes{\legendnodes (lb\ll)(l\ll)}
    }
    % draw the frame
    \node[draw, inner sep=\bclldist,fit=\legendnodes] (frame) {};
    \end{scope}
}
\makeatother

\begin{document}
\begin{bchart}[steps={20,40,60,80,100,120, 140},max=140]
\bcbar[label=Median]{132} \bcskip{5pt} % you can set the seperation between bars in the argument of \bcskip
\bcbar[label=Amplitudenmaximum]{116} \bcskip{5pt}
\bcbar[label=Effektivwert]{70} \bcskip{5pt}
\bcbar[label=Standardabweichung]{66} \bcskip{5pt}
\bcbar[label=Schiefe]{60} \bcskip{5pt}
\bcbar[label=Standardabweichung, color=black!50]{59} \bcskip{5pt}
\bcbar[label=Varianz]{57} \bcskip{5pt}
\bcbar[label=Schiefe, color=black!50]{54} \bcskip{5pt}
\bcbar[label=Gleichrichtswert]{52} \bcskip{5pt}
\bcbar[label=Amplitudenminimum]{50} \bcskip{-2.1pt}
\bcxlabel{Anzahl von Anwendungen}
\bclegend{5pt}{black!50/Text AA,\bcbarcolor/Text B}
\end{bchart}
\end{document} 

Bildbeschreibung hier eingeben

verwandte Informationen