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, 11:22

runix's gravatar image

runix
94124256
Akzeptiert: 56%

bearbeitet 19 Nov, 04:36

esdd's gravatar image

esdd
17.0k83854

  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, 13:53) cis

ybar statt ybar interval?

(18 Nov, 20: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, 04:44

esdd's gravatar image

esdd
17.0k83854

bearbeitet 19 Nov, 05:26

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, 04:54

cis's gravatar image

cis
8.5k16172275

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×263

Frage gestellt: 18 Nov, 11:22

Frage wurde angeschaut: 624 Mal

Zuletzt aktualisiert: 19 Nov, 05:26