Ich versuche gerade ein Säulendiagramm zu erstellen. Die gesamte x-Achse besteht dabei aus Strings (Namen von magn. Kernen). Die y-Achse enthält das Volumen (float).

Wie sage ich pgfplots, dass die x-Achse mit dem String "ETD 29/" usw. beschriftet werden soll?

Später soll das in eine CSV Datei stehen. Wie muss die CSV aussehen? Bisher sieht sie so aus:

Öffne in Overleaf
x,y
ETD 29/16/10,9.60
ETD 34/17/11,13.21
ETD 39/20/13,19.92
ETD 44/22/15,29.96
ETD 49/25/16,40.34
PQ 20/20,5.80
PQ 26/20,10.15
PQ 26/25,12.47
PQ 32/20,14.43
PQ 32/30,21.37

Muss ich dann pgfplot sagen, dass die Trennung mit einem Komma erfolgt?

Hier das Minimalbeispiel für das "String-Problem":

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage[normalem]{ulem} 
\usepackage{tikz} 
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{dateplot} 
\usepackage{subcaption}
\usepackage{filecontents}
\begin{filecontents}{datensuperfein.dat}
x   y   
ETD 29/16/10    9.60
ETD 34/17/11    13.21
ETD 39/20/13    19.92
ETD 44/22/15    29.96
ETD 49/25/16    40.34
PQ 20/20    5.80
PQ 26/20    10.15
PQ 26/25    12.47
PQ 32/20    14.43
PQ 32/30    21.37
\end{filecontents}

\begin{document}

\begin{figure}
  \centering
\begin{tikzpicture}
\begin{axis}[
%width=\linewidth, % Scale the plot to \linewidth
grid=major, % Display a grid
grid style={dashed,gray!30}, % Set the style
xlabel=X Axis,
ylabel=Y Axis,
legend style={at={(0.5,-0.2)},anchor=north}, % Put the legend below the plot
x tick label style={rotate=90,anchor=east} % Display labels sideways
]
\addplot+[ybar] table [x index=0, y expr=\thisrowno{1}] {datensuperfein.dat}; 
\legend{Plot}
\end{axis}
\end{tikzpicture}
  \caption{Caption}
\end{figure}
\end{document}

gefragt 06 Jun '18, 11:07

SF6's gravatar image

SF6
15953440
Akzeptiert-Rate: 0%

bearbeitet 06 Jun '18, 11:29

saputello's gravatar image

saputello
11.1k174365

Eigentlich sind das zwei Fragen. Bitte möglichst immer nur eine Frage auf einmal stellen. Und ja: Wenn eine CSV-Datei einen Aufbau hat, der nicht der in der pgfplots-Anleitung dokumentierten Voreinstellung (z. B. Leerzeichen zur Spaltentrennung, Zeilenumbruch zur Zeilentrennung) entspricht, dann sollte man über die entsprechenden Optionen dem Tabellenparser von pgfplots mitteilen, was stattdessen als Trennzeichen verwendet wird.

(06 Jun '18, 11:31) saputello

Lade das Paket pgfplotstable, das seinerseits das Paket pgfplots lädt, was wiederum tikz lädt, ... Jedenfalls kannst Du dann die csv-Tabelle mit \pgfplotstableread einlesen. Dabei muss der Spaltentrenner angegeben werden, wenn es sich nicht um den voreingestellten space (mindestens ein Leerzeichen oder Tabulator) handelt.

Die Beschriftungen der Ticks an der x-Achse kannst Du direkt aus der Tabelle einlesen lassen, als x-Werte verwendest Du dann den Koordinatenindex \coordindex und gibst mit der Option xtick=data an, dass jeder x-Wert einen Tick bekommt.

Öffne in Overleaf
% Erzeugen der csv Datei für dieses Beispiel
\begin{filecontents*}{datensuperfein.csv}
x,y
ETD 29/16/10,9.60
ETD 34/17/11,13.21
ETD 39/20/13,19.92
ETD 44/22/15,29.96
ETD 49/25/16,40.34
PQ 20/20,5.80
PQ 26/20,10.15
PQ 26/25,12.47
PQ 32/20,14.43
PQ 32/30,21.37
\end{filecontents*}

\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage{pgfplotstable}% lädt auch pgfplots,tikz,xcolor,graphicx,...
\pgfplotsset{compat=newest}

\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
  \pgfplotstableread[col sep=comma]{datensuperfein.csv}{\loadedtable}% laden der Tabelle
  \begin{axis}[
      grid=major,
      grid style={dashed,gray!30},
      xlabel=X Axis,
      ylabel=Y Axis,
      legend style={at={(xticklabel cs:.5)},anchor=north},% Legende abhänging von xticks positioniert
      x tick label style={rotate=90,anchor=east},
      xticklabels from table={\loadedtable}{x},% verwende die Werte aus der Spalte "x" für die Tickbeschriftung
      xtick=data% jeder x-Wert bekommt einen Tick
    ]
    \addplot+[ybar] table [x expr=\coordindex, y = y] {\loadedtable}; 
    \legend{Plot}
  \end{axis}
\end{tikzpicture}
\caption{Caption}
\end{figure}
\end{document}

Ergebnis:

alt text

Permanenter link

beantwortet 06 Jun '18, 21:43

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 06 Jun '18, 23:05

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:

×298
×50
×13
×9

gestellte Frage: 06 Jun '18, 11:07

Frage wurde gesehen: 8,365 Mal

zuletzt geändert: 07 Jun '18, 08:11