Hallo,

ich habe ein Balkendiagramm gezeichnet, dessen Balken keine Begrenzungslinien haben (draw=none). Leider wird in den Symbolen der Legende jedoch eine Begrenzungslinie automatisch gezeichnet. Wie passe ich diese an das Format der Balken in der Grafik an. D.h. im konkreten Fall: Wie kann ich für die Legendensymbole draw=none einstellen? Vielen Dank schon mal.

Hier das MB:

\documentclass{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}

% pgfplots
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}

% TikZ Beginn Adjustments -----------------------------------------------------------------------------------------------------------------------------
    \usepackage{tikz}
    \usetikzlibrary{intersections,positioning,arrows,calc,patterns,shapes.multipart,fit,backgrounds,decorations.pathreplacing}
    \newenvironment{tikzschriftgroesse}{\begin{small}}{\end{small}}

    % Eigene Befehle für TikZ Abbildungen.
        \newcommand{\balkenbreite}{1.2cm} % Balkenbreite für Balkendiagramme

% TikZ Ende Adjustments -----------------------------------------------------------------------------------------------------------------------------

\begin{document}
\begin{figure}
\centering
\begin{tikzschriftgroesse}
\begin{tikzpicture}
% Grid
%   \draw [step=0.5cm,very thin,gray] (0,0) grid(14.5,20); 
\begin{axis}
[
ybar=10pt, % Gibt Balkendiagramm vor.
axis x line*=bottom, % Sternchen führt dazu, dass kein Pfeil an Achse.
axis y line*=left, % Sternchen führt dazu, dass kein Pfeil an Achse.
ymin=0, % Minimum der y-Achse. Beschriftung über ytick.
ymax=600,   % Minimum der x-Achse. Beschriftung über xtick.
enlarge y limits=0.0, % Fügt zusätzlichen Abstand oben und unten ein. Angabe in Prozent (bspw. 0.2).
enlarge x limits=0.15, % Fügt zusätzlichen Abstand links und rechts. Angabe in Prozent (bspw. 0.2).
legend style={draw=none}, % keine Box um Legende
symbolic x coords=
{
1920,
1930,
1940,
1950
},
x tick label style={text width=2.5cm,align=center},
xtick={data},
ytick={100,200,300,400,500,600},
nodes near coords,
width=\linewidth,
height=0.3\linewidth,
bar width=\balkenbreite,
]
\addplot
[fill=gray,draw=none] 
coordinates{
(1920,400)
(1930,230)
(1940,50)
(1950,10)
};
\addplot
[fill=black!20,draw=none] 
coordinates{
(1920,560)
(1930,230)
(1940,50)
(1950,10)
};
\legend{Grau, Hellgrau};
\end{axis}
\end{tikzpicture}
\end{tikzschriftgroesse}
\end{figure}

\end{document}

alt text

gefragt 24 Okt '13, 17:35

josephine's gravatar image

josephine
944223035
Akzeptiert-Rate: 0%

bearbeitet 24 Okt '13, 20:04

cgnieder's gravatar image

cgnieder
22.1k243463

@Josephine: Bitte sieh dir auch mal saputellos Antwort auf die Frage Kann ich Schriftgrößenumschaltungen auch als Umgebungen verwenden? an.

(24 Okt '13, 23:21) esdd

Edit

Eine einfache Möglichkeit wäre, die Begrenzungslinien in der gleichen Farbe wie die Füllung zeichnen zu lassen:

Open in writeLaTeX
\addplot[gray,fill]coordinates{(1920,400)(1930,230)(1940,50)(1950,10)};

alt text

Code:

Open in writeLaTeX
\documentclass{scrbook}
\usepackage{lmodern}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}

\tikzset{tikzschrift/.style={font=\small}}
\newcommand{\balkenbreite}{1.2cm} % Balkenbreite für Balkendiagramme

\begin{document}
\begin{tikzpicture}[tikzschrift]
  \begin{axis}[ybar=10pt, % gibt Balkendiagramm vor
      legend style={draw=none},% keinen Rahmen um Legende
      axis x line*=bottom, 
      axis y line*=left,
      ymin=0, ymax=600,
      enlarge y limits=0.0, 
      enlarge x limits=0.15,
      symbolic x coords={1920,1930,1940,1950},
      x tick label style={text width=2.5cm,align=center},
      xtick={data}, ytick={100,200,300,400,500,600},
      nodes near coords,
      width=\linewidth, height=0.3\linewidth,
      bar width=\balkenbreite,
    ]
    \addplot[gray,fill]coordinates{(1920,400)(1930,230)(1940,50)(1950,10)};
    \addplot[black!20,fill]coordinates{(1920,560)(1930,230)(1940,50)(1950,10)};
    \legend{Grau, Hellgrau};
  \end{axis}
\end{tikzpicture}
\end{document}

Ursprünglicher Vorschlag

Die Option ybar der axis Umgebung aktiviert den Stil ybar legend, der laut Doku von pgfplots so definiert ist:

Open in writeLaTeX
\pgfplotsset{
  /pgfplots/ybar legend/.style={
   /pgfplots/legend image code/.code={%
     \draw[##1,/tikz/.cd,bar width=3pt,yshift=-0.2em,bar shift=0pt]
     plot coordinates {(0cm,0.8em) (2*\pgfplotbarwidth,0.6em)};}
  }

Mit ##1 wird der Stil des jeweiligen Plots übernommen. Warum das für die Option draw=none nicht gilt, ist mir allerdings nicht klar. Eine mögliche Ursache ist eventuell, dass laut Doku gleichzeitig auch der Stil every axis legend wirksam ist.

Als mögliche Lösung kann man bei den \addplot zusätzlich oder ersatzweise die Option draw opacity=0 angeben. Dann sind auch die Ränder der Legendenbildern nicht sichtbar:

Open in writeLaTeX
\addplot[fill=gray,draw=none,draw opacity=0]coordinates{(1920,400)(1930,230)(1940,50)(1950,10)};

Alternativ kann man legend style={draw opacity=0} als Option der axis Umgebung angeben. Dann verschwinden sowohl die Ränder der Legendenbilder als auch der Rahmen der Legende:

Open in writeLaTeX
\begin{axis}[..., legend style={draw opacity=0},...]...\end{axis}

Man kann sich aber auch einen eigenen Stil für die Legendenbilder definieren. Im folgenden Code ist lediglich \draw durch \path ersetzt:

Open in writeLaTeX
\pgfplotsset{%
  /pgfplots/my ybar legend/.style={
    legend image code/.code={%
      \path[##1,/tikz/.cd,bar width=3pt,yshift=-0.2em,bar shift=0pt]
        plot coordinates {(0cm,0.8em) (2*\pgfplotbarwidth,0.6em)};%
    }
  }
}

Diesen eigenen Stil kann man dann nach ybar=... als Option für die axis Umgebung verwenden:

Open in writeLaTeX
\documentclass{scrbook}
\usepackage{lmodern}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}

% eigener Stil für die Legendenbilder
\pgfplotsset{%
  /pgfplots/my ybar legend/.style={
    legend image code/.code={%
      \path[##1,/tikz/.cd,bar width=3pt,yshift=-0.2em,bar shift=0pt]
        plot coordinates {(0cm,0.8em) (2*\pgfplotbarwidth,0.6em)};%
    }
  }
}

\tikzset{tikzschrift/.style={font=\small}}
\newcommand{\balkenbreite}{1.2cm} % Balkenbreite für Balkendiagramme

\begin{document}
\begin{tikzpicture}[tikzschrift]
  \begin{axis}[ybar=10pt, % gibt Balkendiagramm vor
      my ybar legend,% eigenen Stil für die Legendenbilder verwenden
      legend style={draw=none},% keinen Rahmen um Legende
      axis x line*=bottom, 
      axis y line*=left,
      ymin=0, ymax=600,
      enlarge y limits=0.0, 
      enlarge x limits=0.15,
      symbolic x coords={1920,1930,1940,1950},
      x tick label style={text width=2.5cm,align=center},
      xtick={data}, ytick={100,200,300,400,500,600},
      nodes near coords,
      width=\linewidth, height=0.3\linewidth,
      bar width=\balkenbreite,
    ]
    \addplot[fill=gray,draw=none]coordinates{(1920,400)(1930,230)(1940,50)(1950,10)};
    \addplot[fill=black!20,draw=none]coordinates{(1920,560)(1930,230)(1940,50)(1950,10)};
    \legend{Grau, Hellgrau};
  \end{axis}
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 24 Okt '13, 23:06

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

bearbeitet 14 Aug '14, 16:58

Super, danke für die Antwort. Es klappt sehr gut.

(28 Okt '13, 10:03) josephine
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×728
×296

gestellte Frage: 24 Okt '13, 17:35

Frage wurde gesehen: 18,080 Mal

zuletzt geändert: 14 Aug '14, 16:58