Anzeige:
Ergebnis 1 bis 6 von 6

Thema: pgfplots: werteabhängige Formatierung

  1. #1
    Registrierter Benutzer
    Registriert seit
    10.09.2009
    Beiträge
    98

    pgfplots: werteabhängige Formatierung

    Hallo,

    ich habe folgendes Minimalbeispiel:

    Code:
    \documentclass{scrartcl}
    \usepackage[T1]{fontenc}
    \usepackage{pgfplots}
    \begin{document}
    \begin{tikzpicture}
    \begin{axis}
    
    \addplot [mark=square*, mark size = 2pt, only marks, mark options={black, fill=black!100}] 
    	table [x=a,y=b] {data.csv};
    
    \end{axis}
    \end{tikzpicture}
    \end{document}
    Die Datei data..csv hat folgenden Inhalt (gekürzt):

    Code:
    a b c d e
    181.13 59.87 Tab. 20 0
    241.51 58.87 Tab. 20 0
    60.38 52.54 Tab. 20 5.1
    60.38 53.46 Tab. 20 9.1
    60.38 54.28 Tab. 20 9.1
    60.38 49.89 Tab. 20 9.1
    60.38 47.68 Tab. 20 9.1
    120.76 55.47 Tab. 20 5.1
    120.76 56.01 Tab. 20 9.1
    120.76 56.01 Tab. 20 9.1
    120.76 54.00 Tab. 20 15
    250.00 58.29 CIP 19.1 13
    250.00 56.78 CIP 18.9 13
    Nun zu meinem eigentlichen Anliegen:

    Ich möchte die Formatierung der "marks" in Abhängigkeit der gelesenen Werte ändern. konkret folgendes

    Wenn in Spalte c "Tab." steht, soll mark=*
    Wenn in Spalte c "CIP" steht, soll mark=square*

    Die Größe hängt von Spalte d ab: mark size = 0.1pt* Wert aus Spalte d

    Die Farbe hängt von Spalte e ab: fill = black!(100/15* Wert aus Spalte e

    meine bisherige Idee war es, dies in eine foreach-Schleife einzubinden, und dann mit if-Abfragen zu hantieren, allerdings muss ich die Daten dafür "händisch" ändern ... kann man die foreach-Schleife mit Daten aus einer externen Datei (Tabelle) füttern?

    Andere Vorschläge?


    Vielen Dank im Voraus!

  2. #2
    Registrierter Benutzer
    Registriert seit
    10.09.2009
    Beiträge
    98
    Hmm, beim direkten einlesen gibts wajrscheinlich keine Möglichkeit.

    Allerdings klappt es mit einer foreach-Schleife auch nicht. Ich weiß nicht warum. Kann man in den optionalen Argumenten von \addplot keine Befehle einfügen? Weiß hier icht weiter.

    Code:
    \documentclass{scrartcl}
    \usepackage[T1]{fontenc}
    \usepackage{calc}
    \usepackage{pgfplots}
    \begin{document}
    \begin{tikzpicture}
    \begin{axis}
    
    \foreach \x/\y/\Art/\durchmesser/\PHM in {
    181.13/59.87/Tab./20/0,
    241.51/58.87/Tab./20/0,
    60.38/52.54/Tab./20/5.1,
    60.38/53.46/Tab./20/9.1,
    60.38/54.28/Tab./20/9.1,
    60.38/49.89/Tab./20/9.1,
    60.38/47.68/Tab./20/9.1,
    120.76/55.47/Tab./20/5.1,
    120.76/56.01/Tab./20/15,
    250/58.29/CIP/19.1/13,
    250/56.78/CIP/18.9/13}
    {\addplot  [mark size =  0.1pt*\durchmesser ,only marks, black, mark=*] coordinates {(\x,\y)};}
    \end{axis}
    \end{tikzpicture}
    \end{document}

  3. #3
    Registrierter Benutzer
    Registriert seit
    10.09.2009
    Beiträge
    98
    Ich glaube die foreach-Schleife macht Probleme in der axis-Umgebung, da sie da nicht richtig funktioniert. Das ist sehr ärgerlich. Ich bin nach wie vor an einer Hilfestellung interessiert, wie man es mit einer forech-Schleife direkt machen kann, habe aber mein Problem aber anderweitig gelöst. Falls jemand mal ein ähnliches Problem hat: Die addplot-Anweisung separat kreieren und dann per \input in das eigentliche Dokument einfügen.

    Code:
    \documentclass{scrartcl}
    \usepackage{ifthen}
    \usepackage{tikz}
    
    \newwrite\addplotsfile
    \immediate\openout\addplotsfile=addplotsfile.tex
    
    \newtoks\argtoks\argtoks={\addplot}
    
    \newcommand{\addtobatchfile}[5]{\immediate\write\addplotsfile{\the\argtoks  [mark size =  0.1pt*#3 ,only marks, black, mark=#4, mark options={fill=black!#5}] coordinates {(#1,#2)};}}
    
    \newcommand*{\markform}{}
    \newcommand*{\marksize}{}
    \newcommand*{\markfillfarbe}{}
    
    
    \begin{document}
    
    
    \foreach \x/\y/\Art/\durchmesser/\PHM in {
    0/23.51/1/20/0,
    0/36.99/1/20/0,
    181.13/59.87/1/20/0,
    250/58.29/2/19.1/15,
    250/56.78/2/18.9/13}
    {
    \ifthenelse{\Art=1}
    	{\def\markform{*}}
    	{\ifthenelse
    		{\Art=2}
    		{\def\markform{square*}}}
    
    \pgfmathparse{100/15*\PHM} 
    \edef\markfillfarbe{\pgfmathresult}
    
    \addtobatchfile{\x}{\y}{\durchmesser}{\markform}{\markfillfarbe}
    }
    
    \end{document}

  4. #4
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von borose Beitrag anzeigen
    Ich glaube die foreach-Schleife macht Probleme in der axis-Umgebung, da sie da nicht richtig funktioniert. Das ist sehr ärgerlich. Ich bin nach wie vor an einer Hilfestellung interessiert, wie man es mit einer forech-Schleife direkt machen kann, habe aber mein Problem aber anderweitig gelöst. Falls jemand mal ein ähnliches Problem hat: Die addplot-Anweisung separat kreieren und dann per \input in das eigentliche Dokument einfügen.
    oder PSTricks benutzen, da lässt sich alles nachträglich erweitern und bearbeiten ...

    Herbert

  5. #5
    Registrierter Benutzer
    Registriert seit
    10.09.2009
    Beiträge
    98
    Hallo Herbert,

    ich freue mich über die Antwort

    Wäre denn das oben genannte Problem mit PSTricks ohne weiteres durchführbar? Ohne viel Code schreiben zu müssen? D.h. ich möchte nicht anfangen, die x ticks selber einzuzeichnen ... Wie gesagt, wenn das oben genannte machbar wär, würde ich mich auf jeden Fall mal mit PStricks beschäftigen!


    Grüße!

  6. #6
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von borose Beitrag anzeigen
    Wäre denn das oben genannte Problem mit PSTricks ohne weiteres durchführbar? Ohne viel Code schreiben zu müssen? D.h. ich möchte nicht anfangen, die x ticks selber einzuzeichnen ... Wie gesagt, wenn das oben genannte machbar wär, würde ich mich auf jeden Fall mal mit PStricks beschäftigen!
    Ich habe wohl erst am Wochenende Zeit, den Beweis anzutreten ...
    http://tug.org/PSTricks/main.cgi?fil...t/DataExamples
    gleich oben sind zwei Beispiele, die mit speziellen Datensätzen
    arbeiten.

    Herbert

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •