In dieser Woche erstelle ich wieder einige Diagramme mit TikZ. Die y-Achse eines Diagramms soll linear sein, aber die x-Achse soll mit einer Zahlenfolge, z. B. an = 100 * 2n-1, beschriftet werden.

Was muss ich denn mit TikZ der x-Achse sagen, dass sie an jedem "Tick" immer den doppelten Wert des vorhergehenden "Ticks" setzen soll. Kann man das der x-Achse mit einer expiziten Zahlenfolge beibringen?

Irgendwo habe ich gelesen, dass die Koordinaten der Kurve die "Ticks" der Achsen bestimmen.

Ein Diagramm mit MS Excel kann man ziemlich schnell erstellen.
Hier die Grafik aus MS Excel:

alt text

gefragt 06 Feb '18, 20:58

Delorian's gravatar image

Delorian
66912333
Akzeptiert-Rate: 17%

bearbeitet 12 Feb '18, 11:37


Da mir hier, wegen der großen Zahlen, mit pgfmath direkt Dimensions too large um die Ohren fliegt, gebe ich Dir mal eine SageTeX-Lösung an.

Ob Du Sage/SageTeX hast bzw. nutzen möchtest, musst Du entscheiden. Du kannst Dir SageTeX testweise in der SageMathCloud anschauen, am eigenen PC ist der Lauf pdflatex - sage - pgflatex (optional: arara: sage.yaml).

alt text

Öffne in Overleaf
% arara: pdflatex
% arara: sage
% arara: pdflatex

\documentclass[]{article}
%\documentclass[border=5pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage[german]{babel}
\usepackage{sagetex}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[> = latex]
\foreach \n in {1,...,14}%14
\draw[shift={(\n,0)}] (0pt,2pt) -- (0pt,-2pt) node[below=0.5em, rotate=45, xshift=-1.5em] {$\sage{100*2^(\n-1)}$};
\draw[->](0,0) -- (15,0);
\end{tikzpicture}

\end{document}
Permanenter link

beantwortet 06 Feb '18, 22:04

cis's gravatar image

cis
9.5k95459491
Akzeptiert-Rate: 29%

bearbeitet 06 Feb '18, 22:38

Wunderbar. Danke für die Hilfe. Hier kommt meine vollständige Lösung:

Öffne in Overleaf
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,
             every extra y tick/.append style={major tick length=2pt}
            }
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
    \begin{semilogxaxis}[
        scaled ticks=false,
        xtick pos=left, ytick pos=left,
        ymin=0, ymax=8000,
        xmin=100, xmax=819200,
        /pgf/number format/1000 sep={\,},
        ticklabel style={font=\footnotesize},
        tick align=outside,
        grid=both, grid style={dotted},
        ylabel=\footnotesize{Bahngeschwindigkeit \emph{v} / m\;$\cdot{}
               \;\text{s}^{-1}$}, 
        xlabel=\footnotesize{Flugh\"ohe \emph{h} / km},
        xticklabel style={/pgf/number format/fixed, rotate=45, anchor=east},
        xtick={100,200,400,800,1600,3200,6400,12800,25600,
               51200,102400,204800,409600,819200},
        x tick label style={yshift=-0.7em},
        y tick label style={xshift=-0.3em},        
        extra y ticks = {1000,3000,5000,7000},
        extra y tick labels=\empty,
        log ticks with fixed point,
        height=7cm, width=12.2cm,
        log basis x=2
                        ]
        \node[rotate=90] at (404.5,610) {\footnotesize{ISS}};
        \node[rotate=90] at (35880,800) {\footnotesize{GEO}};
        \node[rotate=90] at (384400,850) {\footnotesize{Mond}};
\addplot[smooth] coordinates {
      (100,7850)
      (200,7800)
      (400,7661)
      (800,7425)
      (1600,7000)
      (3200,6350)
      (6400,5500)
      (12800,4500)
      (25600,3500)
      (51200,2550)
      (102400,1825)
      (204800,1270)
      (409600,900)
      (819200,600)           };
   \end{semilogxaxis}
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 12 Feb '18, 11:12

Delorian's gravatar image

Delorian
66912333
Akzeptiert-Rate: 17%

bearbeitet 12 Feb '18, 11:31

Im Grunde ist das ja ein Plot mit logarithmischer x Achse und speziellen Achsenlabeln. Zusaetzlich scheinst Du gerne den log2 zu verwenden zur Skalierung. Das geht mit pgfplots beispielsweise wie folgt:

alt text

Öffne in Overleaf
\documentclass{standalone}

\usepackage{pgfplots}

\pgfplotsset{compat=1.15}

\begin{document}

\begin{tikzpicture}
    \begin{semilogxaxis}[
        scaled ticks=false,
        ymin=0,ymax=8000,
        xmin=100,xmax=819200,
        /pgf/number format/1000 sep={\,},
        ticklabel style={
            font=\footnotesize,
        },
        tick align=outside,
        grid=major,
        xticklabel style={,
            /pgf/number format/fixed,
            rotate=45,
            anchor=east,
        },
        xtick={100,200,400,800,1600,3200,6400,12800,25600,51200,102400,204800,409600,819200},
        log ticks with fixed point,
        height=6cm,width=10cm,
        log basis x=2,
    ]

    \addplot table {
        x y
        100 8000
        800 6500
        6400 5500
        51200 2500
        819200 600
    };

    \end{semilogxaxis}
\end{tikzpicture}
\end{document}

Die tick labels werden hierbei zurueckgerechnet, was immer auch Rundung mit sich bringt (siehe die hohen labels). Man kann mit log ticks with fixed point={precision=4} automatisch die Genauigkeit erhoehen, allerdings beeintraechtigt das dann die Rundung der anderen. Oder Du schreibst sowas wie xticklabels={$100$, $200$} usw.

Permanenter link

beantwortet 06 Feb '18, 22:40

cfeuersaenger's gravatar image

cfeuersaenger
3.7k23
Akzeptiert-Rate: 34%

@cfeuersaenger Kann pgfplots manuell eingefügten Zahlen xtick={100,200,...,819200}, automatisch berechnen?

(06 Feb '18, 23:21) cis

@cis Im Rahmen der Rechen(un)genauigkeit von TeX. Je nach Werte funktioniert das mal sehr gut, mal nicht so gut. Einfach ausprobieren.

(07 Feb '18, 07:51) saputello
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:

×731
×298
×54
×6

gestellte Frage: 06 Feb '18, 20:58

Frage wurde gesehen: 15,362 Mal

zuletzt geändert: 12 Feb '18, 11:37