goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

PGFPlot y Skala logarithmisch aber normale werte anzeigen

 

MrsTudore
Forum-Newbie
Forum-Newbie

Beiträge: 7
Anmeldedatum: 21.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2017, 11:00     Titel: PGFPlot y Skala logarithmisch aber normale werte anzeigen
  Antworten mit Zitat      
Hallo.

Ich habe folgende Aufgabenstellung.

Ich habe ein Diagramm, dass mit einer logarithmischen Y-Skala besser zu erkennen ist.
Jedoch haben meine Kollegen gemeint ich sollte statt der logarithmischen Werte wie zB 10^2 etc. lieber den normalen Wert hinschreiben.
Im angehängten Bild sieht man wie es jetzt aussieht (jetzt.png).
und ziel.png zeigt was ich haben will.



Habe in der doku nichts gefunden, womit ich zwar die Werte logarithmieren kann, jedoch die Skala mit den richtigen (normalen) Werte anzeigen kann.

Ist das möglich?


Code • Öffne in Overleaf

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}

\usepackage{pgfplots}
\pgfplotsset{width=\textwidth,height=6cm,compat=1.9}
\pgfplotsset{/pgf/number format/read comma as period}
\begin{filecontents}{test.dat}
   XOR      UN         UO        
   9      0,1464      0,1658  
   10      0,5522      0,6937  
   11      2,3192      2,6957  
   12      10,6797      12,7331  
   13      79,5394      94,9720  
   14      406,1020   468,6611  
\end{filecontents}
\begin{document}
\pgfplotstableread{test.dat}{\test}
\begin{tikzpicture}
      \begin{axis}[
      ybar=8pt,
      bar width=20pt,
      xlabel=xlabel,
      ylabel=Zeit (Minuten),
           grid=major,
      ymode = log,
      log origin=infty,
               xtick=data,
      minor y tick num=2,
      xmin=8.5, xmax=14.5,
      ymin=0, ymax=533,
      every node near coord/.append style={
         /pgf/number format/fixed zerofill,
         /pgf/number format/precision=2
     
}
   
]
   \addplot[blue,fill=blue!30,nodes near coords] table[x=XOR,y=UN] {\test};
   \addplot+[orange,fill=orange!30,nodes near coords,ybar] table[x=XOR,y=UO] {\test};
           

   \end{axis}
\end{tikzpicture}
\end{document}
 
[/img]

Ziel.PNG
 Beschreibung:

Download
 Dateiname:  Ziel.PNG
 Dateigröße:  17.59 KB
 Heruntergeladen:  47 mal
jetzt.PNG
 Beschreibung:

Download
 Dateiname:  jetzt.PNG
 Dateigröße:  15.46 KB
 Heruntergeladen:  49 mal
Private Nachricht senden Benutzer-Profile anzeigen

esdd
Forum-Meister
Forum-Meister

Beiträge: 2188
Anmeldedatum: 07.02.10
Wohnort: Stutensee
Version: MiKTeX 2.9
     Beitrag Verfasst am: 27.03.2017, 12:45     Titel:
  Antworten mit Zitat      
Wenn Du an der y-Achse statt beispielsweise 10^1 lieber 10 stehen haben möchtest, dann geht das mit

Code • Öffne in Overleaf
\pgfplotsset{
  /pgfplots/log number format basis/.code 2 args={%
    ${\pgfmathparse{#1^#2}\pgfmathprintnumber[fixed,precision=2]{\pgfmathresult}}$%
}}% Ausgabe von beispielsweise 100 statt 10^2 an logarithmischen Achsen


Allerdings verstehe ich nicht ganz, warum in Deiner Skizze an der Stelle 237 oder 2.37 als gewünschter Wert steht.

Vielleicht meinen Deine Kollegen auch die Zahlenwerte an den Balken. Bei denen wäre es sicher wirklich sinnvoll die ursprünglichen [y]-Werte anzugeben. Das erreicht man hier mit

Code • Öffne in Overleaf
point meta=rawy% <- Angabe ursprünglicher y-Werte




Code:

Code • Öffne in Overleaf
\begin{filecontents*}{test.dat}
    XOR      UN         UO        
    9      0,1464      0,1658  
    10      0,5522      0,6937  
    11      2,3192      2,6957  
    12      10,6797      12,7331  
    13      79,5394      94,9720  
    14      406,1020   468,6611  
\end{filecontents*}

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}

\usepackage{pgfplots}
\pgfplotsset{compat=1.9}% immer als erstes setzen, aktuell wäre 1.14
\pgfplotsset{width=\textwidth,height=6cm}
\pgfplotsset{/pgf/number format/read comma as period}

\pgfplotsset{
  /pgfplots/log number format basis/.code 2 args={%
    ${\pgfmathparse{#1^#2}\pgfmathprintnumber[fixed,precision=2]{\pgfmathresult}}$%
}}% Ausgabe von beispielsweise 100 statt 10^2 an logarithmischen Achsen

\begin{document}
\pgfplotstableread{test.dat}{\test}
\begin{tikzpicture}
  \begin{axis}[
       ybar=8pt,
       bar width=20pt,
       xlabel=xlabel,
       ylabel=Zeit (Minuten),
       grid=major,
       ymode = log,
       log origin=infty,
       xtick=data,
       %minor y tick num=2,% kein Effekt bei logarithmischer Achse
       xmin=8.5, xmax=14.5,
       %ymin=0,% <- das macht bei logarithmischer Achse keinen Sinn
       ymin=.01,
       ymax=5000,
       every node near coord/.append style={
          /pgf/number format/fixed,
          /pgf/number format/fixed zerofill,
          /pgf/number format/precision=1
       
},
      nodes near coords,% <- kann hier für alle Plots gesetzt werden
      point meta=rawy% <- Angabe ursprünglicher y-Werte
    ]
    \addplot[blue,fill=blue!30] table[x=XOR,y=UN] {\test};
    \addplot+[orange,fill=orange!30] table[x=XOR,y=UO] {\test};
  \end{axis}
\end{tikzpicture}
\end{document}


gl_logpointmeta.png
 Beschreibung:

Download
 Dateiname:  gl_logpointmeta.png
 Dateigröße:  19.69 KB
 Heruntergeladen:  41 mal
Private Nachricht senden Benutzer-Profile anzeigen

markusv
Forum-Guru
Forum-Guru

Beiträge: 295
Anmeldedatum: 03.09.15
Wohnort: Leipzig
Version: ---
     Beitrag Verfasst am: 27.03.2017, 12:47     Titel:
  Antworten mit Zitat      
Du kannst mit ytick={num1,num2,num3,...} selbst definieren, welche Zahlen angezeigt werden sollen.
Mit yticklabels={num1,num2,num3,...} kannst du einstellen, welche Bezeichnung diese Zahlen erhalten.

Kombinierst du also beides, erhälst du:
Code • Öffne in Overleaf
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}

\usepackage{pgfplots}
\pgfplotsset{width=\textwidth,height=6cm,compat=1.9}
\pgfplotsset{/pgf/number format/read comma as period}
\begin{filecontents}{test.dat}
   XOR      UN         UO        
   9      0,1464      0,1658  
   10      0,5522      0,6937  
   11      2,3192      2,6957  
   12      10,6797      12,7331  
   13      79,5394      94,9720  
   14      406,1020   468,6611  
\end{filecontents}
\begin{document}
\pgfplotstableread{test.dat}{\test}
\begin{tikzpicture}
      \begin{axis}[
      ybar=8pt,
      bar width=20pt,
      xlabel=xlabel,
      ylabel=Zeit (Minuten),
           grid=major,
      ymode = log,
      log origin=infty,
               xtick=data,
      minor y tick num=2,
      xmin=8.5, xmax=14.5,
      ymin=0, ymax=533,
      ytick = {0.1,10,237,438}, %<--- ergänzt
      yticklabels={$10^{-1}$,$10^1$,237,438}, %<--- ergänzt
      every node near coord/.append style={
         /pgf/number format/fixed zerofill,
         /pgf/number format/precision=2
     
}
   ]
   \addplot[blue,fill=blue!30,nodes near coords] table[x=XOR,y=UN] {\test};
   \addplot+[orange,fill=orange!30,nodes near coords,ybar] table[x=XOR,y=UO] {\test};
           

   \end{axis}
\end{tikzpicture}
\end{document}

_________________

Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Books heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen:
Help-LaTeX@web.de
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden

MrsTudore
Forum-Newbie
Forum-Newbie

Beiträge: 7
Anmeldedatum: 21.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2017, 14:00     Titel: Danke esdd
  Antworten mit Zitat      
Danke.

Das war genau das was mein Kollege gemeint hat. Ich habe ihn am Anfang falsch verstanden. Aber das mit den point meta=rawy war genau das richtige.

Wenn es erlaubt ist würde ich jetzt gern noch eine Frage dazustellen.

Bräuchte noch ein diagramm im Area style (also unter der linie soll die fläche farblich markiert sein).

Nun sollen wie vorhin beide flächen gezeichnet werden und dies wenn möglich auch im log-skalierung.

Wenn ich es ohne log-skalierung mache, sieht es schon so aus wie ich es möchte, wenn ich jedoch die log-skalierung hinzufüge, sehen die Flächen nicht mehr so aus. Die beginnen nicht unten sondern irgendwo.

Bild jetzt.png zeigt wie es zurzeit mit der log-skalierung aussieht. ziel.png zeigt wie es aussehen soll hat jedoch noch keine log-skalierung.

Code • Öffne in Overleaf
\begin{filecontents*}{test.dat}
    XOR      UN         UO        
    9      0,1464      0,1658  
    10      0,5522      0,6937  
    11      2,3192      2,6957  
    12      10,6797      12,7331  
    13      79,5394      94,9720  
    14      406,1020   468,6611  
\end{filecontents*}

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}

\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\pgfplotsset{width=\textwidth,height=6cm}
\pgfplotsset{/pgf/number format/read comma as period}

\pgfplotsset{
  /pgfplots/log number format basis/.code 2 args={%
    ${\pgfmathparse{#1^#2}\pgfmathprintnumber[fixed,precision=2]{\pgfmathresult}}$%
}}% Ausgabe von beispielsweise 100 statt 10^2 an logarithmischen Achsen

\begin{document}
\pgfplotstableread{test.dat}{\test}
\begin{tikzpicture}
\begin{axis}[
%               stack plots=y,
area style,
xlabel=Number of XORs,
ylabel=Zeit (Minuten),
legend style={at={(0.5,-0.25)},
   anchor=north,legend columns=-1},
grid=major,
ymode = log,
log origin y=infty,
enlargelimits=false,
nodes near coords,
xtick=data,
xmin=8.5, xmax=14.2,
ymin=0, ymax=533,
every node near coord/.append style={
   /pgf/number format/fixed zerofill,
   /pgf/number format/precision=2
},
point meta=rawy,% <- Angabe ursprünglicher y-Werte
]
\addplot[orange,fill=orange!30] table[x=XOR,y=UO] {\test};
\addplot[blue,fill=blue!30] table[x=XOR,y=UN] {\test};

\end{axis}
\end{tikzpicture}
\end{document}


Danke im Voraus Smile

Ziel.PNG
 Beschreibung:
noch ohne log skalierung

Download
 Dateiname:  Ziel.PNG
 Dateigröße:  14.14 KB
 Heruntergeladen:  40 mal
jetzt.PNG
 Beschreibung:

Download
 Dateiname:  jetzt.PNG
 Dateigröße:  14.71 KB
 Heruntergeladen:  36 mal
Private Nachricht senden Benutzer-Profile anzeigen

esdd
Forum-Meister
Forum-Meister

Beiträge: 2188
Anmeldedatum: 07.02.10
Wohnort: Stutensee
Version: MiKTeX 2.9
     Beitrag Verfasst am: 27.03.2017, 14:33     Titel:
  Antworten mit Zitat      
Dein MWE erzeugt nach Auskommentieren von `ymode=log` nicht das angehangene "noch ohne log Skalierung" Bild.

Es sollte mit \closedcycle in beiden Fällen funktionieren:

Code • Öffne in Overleaf
\addplot[orange,fill=orange!30] table[x=XOR,y=UO] {\test} \closedcycle;
\addplot[blue,fill=blue!30] table[x=XOR,y=UN] {\test} \closedcycle;


Da die beiden Graphen sehr nah beieinander liegen, sollt man dann aber nur für einen von beiden nodes near coords nutzen.
Private Nachricht senden Benutzer-Profile anzeigen

MrsTudore
Forum-Newbie
Forum-Newbie

Beiträge: 7
Anmeldedatum: 21.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2017, 15:41     Titel: Danke
  Antworten mit Zitat      
Danke genau das was ich wollte.
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2017 goLaTeX.de