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, 14:58

Delorian's gravatar image

Delorian
715
Akzeptiert: 66%

bearbeitet 12 Feb, 05: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, 16:04

cis's gravatar image

cis
6.4k11141232

bearbeitet 06 Feb, 16:38

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, 16:40

cfeuersaenger's gravatar image

cfeuersaenger
1.2k23

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

(06 Feb, 17: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, 01:51) saputello

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, 05:12

Delorian's gravatar image

Delorian
715

bearbeitet 12 Feb, 05:31

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:

×561
×226
×37
×5

Frage gestellt: 06 Feb, 14:58

Frage wurde angeschaut: 277 Mal

Zuletzt aktualisiert: 12 Feb, 05:37