Kurze Frage: Wie kann ich denn die Balken so setzen, dass die Ziffern auf der x-Achse mittig zu den Balken stehen? Ich habe das Problem, dass die x-Achse Kategorien beschreibt, und ich gerne eindeutig kennzeichnen würde, welcher Balken welche Kategorie beschreibt. Ich habe allerdings schon abgehakt, da deine Lösung gegeben meines Posts natürlich perfekt ist.

(Anmerkung: Das war ursprünglich ein Kommentar zu einer Antwort auf Histogramm und Graph in ein Schaubild und ist somit eine Folgefrage.)

alt text
(Code ohne rote Kurve)

Öffne in Overleaf
\documentclass[border=3mm,tikz,preview]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}% <- compat immer angeben!

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ymin=0, ymax=55,
    minor y tick num = 3,
    area style,
    ]
\addplot+[ybar interval,mark=no] plot coordinates { (1, 5) (5, 35) (10, 50) (15, 30) (20, 15) (25, 0) };
\end{axis}
\end{tikzpicture}
\end{document}

gefragt 18 Nov '18, 17:22

runix's gravatar image

runix
1.0k207384
Akzeptiert-Rate: 0%

bearbeitet 19 Nov '18, 10:36

esdd's gravatar image

esdd
17.7k254256

  1. Ich habe Deinen Kommentar in eine neue Frage umgewandelt.
  2. Das ist eine gute Frage. Ich hatte das irgendwann mal gelöst (war glaub halb so wild), allerdings erinnere ich mich gerade nimmer.
(18 Nov '18, 19:53) cis

ybar statt ybar interval?

(19 Nov '18, 02:18) Henri

Das hängt davon ab, was Du wie darstellen willst.

Wenn Du ybar interval schon als Option der axis Umgebung angibst und dafür area style entfernst, erfolgt die Beschriftung der Balken automatisch mittig:

Öffne in Overleaf
\documentclass[border=3mm,tikz,preview]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}% <- compat immer angeben!

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ymin=0, ymax=55,
    minor y tick num = 3,
    ybar interval
    ]
\addplot plot coordinates { (1, 5) (5, 35) (10, 50) (15, 30) (20, 15) (25, 0) };
\addlegendentry{bar}
\addplot+[sharp plot, fill=none, line legend, domain=-5:25,samples=100]{e^(-x)};
\addlegendentry{line}
\end{axis}
\end{tikzpicture}
\end{document}

alt text

Allerdings ist diese Art der Beschriftung nicht hilfreich für den roten Graphen der zusätzlich eingezeichneten Funktion. Für diese muss man dann wissen, dass die Beschriftung zum jeweils linken Tick gehört. (Beispielsweise befindet sich der Punkt (1,0) nicht oberhalb der 1 sondern beim Tick links von dieser.

Deshalb wäre dann vielleicht das folgende geeigneter:

Öffne in Overleaf
\documentclass[border=3mm,tikz,preview]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}% <- compat immer angeben!

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ymin=0, ymax=55,
    minor y tick num = 3,
    ybar interval,
    xticklabel interval boundaries,
    x tick label style={
      rotate=90,
      anchor=east
    }
    ]
\addplot plot coordinates { (1, 5) (5, 35) (10, 50) (15, 30) (20, 15) (25, 0) };
\addlegendentry{bar}
\addplot+[sharp plot, fill=none, line legend, domain=-5:25,samples=100]{e^(-x)};
\addlegendentry{line}
\end{axis}
\end{tikzpicture}
\end{document}

alt text

Kann aber auch sein, Du suchst doch ybar wie von @Henri vorgeschlagen, vielleicht noch kombiniert mit xtick=data:

Öffne in Overleaf
\documentclass[border=3mm,tikz,preview]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}% <- compat immer angeben!

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ymin=0, ymax=55,
    minor y tick num = 3,
    ybar,
    xtick=data
    ]
\addplot plot coordinates { (1, 5) (5, 35) (10, 50) (15, 30) (20, 15) (25, 0) };
\addlegendentry{bar}
\addplot+[sharp plot, fill=none, line legend, domain=-5:25,samples=100]{e^(-x)};
\addlegendentry{line}
\end{axis}
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 19 Nov '18, 10:44

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

bearbeitet 19 Nov '18, 11:26

Welche Stelle in deinem Code bewirkt, dass die x-Achse bei -5 beginnt?

(23 Dez '18, 19:55) runix

@runix domain=-5:25

(23 Dez '18, 20:04) cis

Wie bereits in den Kommentaren erwähnt, brächte ybar statt ybar interval die gewünschte Platzierung der x ticks; zusätzlich bekommt man dann dünne Balken.

Um die Optik des Ausgangsbeispiels in etwa zu erhalten, empfehle ich die Einstellung

ybar interval=1.0, % Für Lücken zwischen den Balken Wert verkleinern x tick label as interval, grid=none, % optional %xtick=data, % evtl. sinnvoll

alt text

Öffne in Overleaf
\documentclass[border=3mm,varwidth]{standalone}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
ymin=0, ymax=55,
minor y tick num = 3,
area style,
xlabel={$x$},%<--
ylabel={$y$},%<--
y label style={at={(axis description cs:0.15,0.95)},rotate=-90,anchor=south},
%x label style={at={(axis description cs:0.5,-0.1)},anchor=north},
]
\addplot+[ybar interval, 
mark=no] plot coordinates { (1, 5) (5, 35) (10, 50) (15, 30) (20, 15) (25, 0) };
%\addplot[red, very thick,samples=200, domain=-5:25]{exp(-x)};%<--
\node[font=\bfseries] at (axis cs:5,50) {ALT}; 
\end{axis}

\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[
ybar interval=1.0, % Für Lücken zwischen den Balken Wert verkleinern
x tick label as interval,
grid=none, % optional
%xtick=data, % evtl. sinnvoll
ymin=0, ymax=55,
minor y tick num = 3,
xlabel={$x$},%<--
ylabel={$y$},%<--
y label style={at={(axis description cs:0.15,0.95)},rotate=-90,anchor=south}
]
\addplot [draw=blue,fill=blue!30,
] coordinates { (1, 5) (5, 35) (10, 50) (15, 30) (20, 15) (25, 0) };
\node[font=\bfseries] at (axis cs:5,50) {NEU}; 
\end{axis}
\end{tikzpicture}

\end{document}
Permanenter link

beantwortet 19 Nov '18, 10:54

cis's gravatar image

cis
9.5k75452491
Akzeptiert-Rate: 29%

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:

×296

gestellte Frage: 18 Nov '18, 17:22

Frage wurde gesehen: 6,960 Mal

zuletzt geändert: 23 Dez '18, 20:04