Wie kann ich bei einem plot table bewirken, dass auf einer Achse nur gerade Zahlen angezeigt werden. Ansonsten möglichst x=data, y=data beibehalten, so dass keine anderen Zahlen (hier etwa die 0) reinkommen.

Ich weiß, man könnte sowas wie xticks={0,2,...<xMax> } machen, aber xMax ist auch nicht immer bekannt; und das ist auch eine Schummellösung.

Das muss doch exakt gehen. :) Ich habe hier mal einen Beitrag gesehen, wo sowas Ähnliches am Rande mit einer Modulo-Rechnung gemacht wurde (ich finde ihn aber nimmer).

alt text

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=3pt, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.13}

\pgfplotstableread{
1   2  
2   3   
3   2   
4   5
5   1  
}\datatable
\begin{document}

\begin{tikzpicture}
\begin{axis}[ymin=0,
xtick=data, %ytick=data,   % nur xy-Werte aus Tabelle anzeigen
]
\addplot table [header=false, col sep=space,] {\datatable}; 
\end{axis}
\end{tikzpicture}

\end{document}

gefragt 21 Jan, 14:18

cis's gravatar image

cis
8.3k16170267
Akzeptiert: 68%

bearbeitet 21 Jan, 14:21


Mir sind das eigentliche Ziel bzw. die Randbedingungen jetzt nicht klar. Davon hängt dann ab, wie viel Aufwand getrieben bzw. welche Kompromisse gemacht werden müssen.

Du kannst beispielsweise den minimalen und den maximalen x-Wert in Deiner Tabelle ermitteln und diesen dann für xtickmin und xtickmax verwenden:

Öffne in Overleaf
\documentclass[border=3pt]{standalone}
\usepackage{pgfplotstable}% lädt auch pgfplots
\pgfplotsset{width=7cm,compat=1.13}

\pgfplotstableread{
 1   2
 2   3
 3   2
 4   5
12   1
}\datatable
\newcommand*\xmin{}
\newcommand*\xmax{}
\pgfplotstablegetelem{0}{[index]0}\of\datatable
\edef\xmin{\pgfplotsretval}
\edef\xmax{\pgfplotsretval}
\pgfplotstableforeachcolumnelement{[index]0}\of\datatable\as\xvalue{%
  \pgfmathparse{\xvalue<\xmin?\xvalue:\xmin}\edef\xmin{\pgfmathresult}%
  \pgfmathparse{\xvalue>\xmax?\xvalue:\xmax}\edef\xmax{\pgfmathresult}%
}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
  ymin=0,
  xtick distance=2,
  xtickmin=\xmin,
  xtickmax=\xmax
]
\addplot table [header=false, col sep=space,] {\datatable}; 
\end{axis}
\end{tikzpicture}

\end{document}

alt text


Wenn Du nur die ungeraden Zahlen auf der Achse ausblenden willst, nicht aber die zugehörigen Ticks, dann geht

Öffne in Overleaf
\documentclass[border=3pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.13}

\pgfplotstableread{
 1   2
 2   3
 3   2
 4   5
 5   1
 6   2
 7   1
 8   3
 9   1
10   2
11   3
12   1
}\datatable
\begin{document}

\begin{tikzpicture}
\begin{axis}[ymin=0,
xtick=data, %ytick=data,   % nur xy-Werte aus Tabelle anzeigen
xticklabel={\pgfmathparse{mod(\tick,2)==0?"\noexpand\axisdefaultticklabel":""}\pgfmathresult},
]
\addplot table [header=false, col sep=space,] {\datatable}; 
\end{axis}
\end{tikzpicture}

alt text

Fehlt jetzt aber zwischen drin ein x-Wert, dann fehlt auch der zugehörige Tick einschließlich des eventuellen Labels. In dem Beispiel passiert das an der y-Achse, wenn man ytick=data verwendet:

alt text

Während man an der x-Achse vielleicht noch sicher sein kann, dass jeder Zwischenwert in der Koordinatenliste vorkommt, sind fehlende Werte auf der y-Achse vermutlich nicht ganz unwahrscheinlich.

Permanenter link

beantwortet 22 Jan, 05:11

esdd's gravatar image

esdd
16.9k83854

bearbeitet 22 Jan, 07:05

Für gerade kannst einfach mit xtick distance=2 arbeiten:

Öffne in Overleaf
\documentclass[border=3pt, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.13}

\pgfplotstableread{
1   2  
2   3   
3   2   
4   5
5   1  
}\datatable
\begin{document}

\begin{tikzpicture}
\begin{axis}[ymin=0,
  xtick distance=2,
]
\addplot table [header=false, col sep=space,] {\datatable}; 
\end{axis}
\end{tikzpicture}

\end{document}

nur gerade ticks

Permanenter link

beantwortet 21 Jan, 14:46

Ijon%20Tichy's gravatar image

Ijon Tichy
7.7k11019

Ah ok, ich glaube das stößt leider mit xtick = data zusammen.

(21 Jan, 15:21) cis

@cis Logisch. xtick=data würde ja gerade nicht bedeuten, dass nur jedes zweite Datum sondern jedes Datum verwendet werden soll. Da Du aber gar nicht jedes haben willst, sehe ich nicht, dass das ein Problem ist. Die Daten aus der Tabelle werden trotzdem verwendet, wie Du leicht sehen kannst, wenn Du zum Vergleich

\pgfplotstableread{ 5 2 6 3 7 2 8 5 9 1 }\datatable

verwendest.

(22 Jan, 03:10) saputello

@saputello Das funktioniert für die Beispiele. Wenn sich der Bereich der x-Werte erhöht, z.B. auf den Bereich x=1 bis x=11 dann tauchen 0 und 12 an der x-Achse auf. Den gleichen Effekt kann man erreichen, wenn man in dem Beispiel enlarge x limits=.25 ergänzt (Voreinstellung in dem Beispiel ist 0.1). Andererseits könnte enlarge x limits auch eine Lösung für den größeren x-Bereich bieten: enlarge x limits={abs=.9}.

(22 Jan, 04:44) esdd
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:

×261

Frage gestellt: 21 Jan, 14:18

Frage wurde angeschaut: 1,006 Mal

Zuletzt aktualisiert: 22 Jan, 07:05