QAPF-Diagramm mittels PGFplots und ternaryaxis?

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: QAPF-Diagramm mittels PGFplots und ternaryaxis?

von elmar.a » So 13. Okt 2013, 09:45

Danke, Christian,

der workaround mit yscale=-1 gefällt mir gut; in dem Moment können x-Werte entweder Q oder F repräsentieren, y und z sind jeweils A bzw. P!

Meine (vorläufige?) Lösung sieht wie folgt aus:
\documentclass{standalone}

\usepackage{graphicx}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage[eulergreek]{sansmath}

\pgfplotsset{
   compat=newest,
   every axis plot post/.append style={black,mark=none},
   }
\usepgfplotslibrary{ternary}
\usetikzlibrary{
   pgfplots.ternary,
   calc,
   arrows,
   }

\begin{document} 

\begin{tikzpicture}[font=\sffamily]
   \begin{ternaryaxis}[
	ytick=\empty,
        ztick=\empty,
        ]

        \addplot3[only marks] table {
	Q A P
	0.1 0.1 0.8
	};

   \end{ternaryaxis}

   \begin{scope}[
      yscale=-1,
      /pgfplots/ticklabel style={yscale=-1},
      ] 
   \begin{ternaryaxis}[
        ytick=\empty,
        ztick=\empty,
        clip=false,
        ] 
		 
        \addplot3[only marks] table {
        F A P
        0.1 0.1 0.8
	};

	\node[yscale=-1] at (0.5,0.95) {F};

   \end{ternaryaxis}
   \end{scope}
\end{tikzpicture} 
\nodes müssen bei der Version allerdings ebenfalls noch einmal gedreht bzw. gespiegelt werden, andernfalls stehen sie Kopf.

Falls noch jmd. etwas für die "unterbrochene" Achse in dem Beispielplot einfällt wäre ich sehr dankbar! Mir würde momentan nur in den Sinn kommen eine weiße Box drüberzulegen... wobei das definitiv nicht die schönste Lösung ist!!!??

Gruß,
Elmar

von feuersaenger » Sa 12. Okt 2013, 12:17

Hi,

ich denke Du hast zwei Optionen: entweder "rotate around" oder "yscale=-1".

Tatsaechlich weiss ich nicht so ganz genau, wie es sein soll... das solltest Du mal ausprobieren.

"rotate around" rotiert um 180 grad, also genau was Du auch gemacht hast - allerdings habe ich das Zentrum der rotation so spezifiziert, dass Dein yshift wegfaellt. Nachteil ist (wie Du schon bemerkt hast), dass die tick label dann durcheinanderkommen. In meinem Fall habe ich die rotation in einen tikz scope untergebracht, damit das *gesamte* Dreieck (inklusive labels) rotiert wird (das vermeidet etwas unordnung scheinbar). Kann sein, dass hier pgfplots was verbessert werden sollte...

Die Alternative yscale=-1 ist eine Spiegelung und erscheint fast noch einfacher - und ist vermutlich auch das, was Du willst, denn Du moechtest doch vermutlich, dass die Ecken noch zu denselben Quantitaeten gehoeren, oder? Sonst wuerden die ja auch vertauscht. In dem Fall koenntest Du auch einfach die tick label wieder richten, indem die nochmal gespiegelt werden, siehe mein Beispiel.

Beachte, dass dies deshalb zu einem anderen Ergebnis fuehrt! Du muesstest also gut pruefen.

Hier ist beides drin; Du muesstest ein bisschen rumprobieren, was Du brauchst:
\documentclass{standalone}

\usepackage{graphicx}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage[eulergreek]{sansmath}

\pgfplotsset{
   compat=newest,
   every axis plot post/.append style={black,mark=none},
   }
\usepgfplotslibrary{ternary}
\usetikzlibrary{
   pgfplots.ternary,
   calc,
   arrows,
   }

\begin{document}

\begin{tikzpicture}[font=\sffamily]
   \begin{ternaryaxis}[
     %    xtick=\empty,
      %   ytick=\empty,
       %  ztick=\empty,
         ]
   \addplot3 table {
         0.2 0.8 0
         0.2 0 0.8
         };
   \addplot3 table {
         0.6 0.14 0.26
         0 0.35 0.65
         };
	\node[fill,circle] (rotateaxis) at (axis cs:0,0.5,0.5) {};
   \end{ternaryaxis}

	\begin{scope}[
   %	rotate around={180:(rotateaxis)},
		yscale=-1,
		/pgfplots/ticklabel style={yscale=-1},
	]

   \begin{ternaryaxis}[
%         xtick=\empty,
 %        ytick=\empty,
  %       ztick=\empty,
   %      grid=none,
         ]
   \addplot3[solid] table {
         0.1 0.9 0
         0.1 0 0.9
         };
   \addplot3[solid] table {
         0 0.65 0.35
         0.1 0.585 0.315
         };
   \end{ternaryaxis}
	\end{scope}
\end{tikzpicture}

\end{document} 
Mit liebem Gruss

Christian

von elmar.a » Sa 12. Okt 2013, 11:09

Ich denke nicht. Das Diagramm mit PGF/TikZ zu zeichnen erscheint mir deutlich einfacher.
Ist es bei einem gezeichneten Diagramm noch möglich Daten/Messwerte einzuspeisen und zu plotten (ohne diese auf die TikZ-Koordinaten umzurechnen-9??
Diese sind in der Form 'Anteil Q oder F/Anteil A/ Anteil P' vorhanden, z.B.
	\addplot3[mark=*,only marks] table {
			Q A P
			0.9 0.1 0
			0.1 0.5 0.4
			0 0.5 0.5
			0 0.1 0.9
			};
(ggf. einfach im obigen Beispiel einfügen)...

Einfach zeichnen

von localghost » Sa 12. Okt 2013, 09:35

elmar.a hat geschrieben:[…] Kann dies per PGFplots erreicht werden? […]
Ich denke nicht. Das Diagramm mit PGF/TikZ zu zeichnen erscheint mir deutlich einfacher.


Thorsten

QAPF-Diagramm mittels PGFplots und ternaryaxis?

von elmar.a » Fr 11. Okt 2013, 23:52

Guten Abend,

ich versuche mich momentan im Erstellen eines QAPF Diagrammes mittels PGFplots. Dabei handelt es sich um ein doppeltes Dreiecksdiagramm, wie hier zu sehen: Wikipedia -- Streckeisendiagramm.

Mein Ansatz sieht wie folgt aus:

\documentclass[11pt]{scrartcl}

\usepackage{graphicx}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage[eulergreek]{sansmath}

\pgfplotsset{
	compat=newest,
	every axis plot post/.append style={black,mark=none},
	}
\usepgfplotslibrary{ternary}
\usetikzlibrary{
	pgfplots.ternary,
	calc,
	arrows,
	}

\begin{document}

\begin{tikzpicture}[font=\sffamily]
	\begin{ternaryaxis}[
			xtick=\empty,
			ytick=\empty,
			ztick=\empty,
			]
	\addplot3 table {
			0.2 0.8 0
			0.2 0 0.8
			};
	\addplot3 table {
			0.6 0.14 0.26
			0 0.35 0.65
			};
	\end{ternaryaxis}

	\begin{ternaryaxis}[
			yshift=-35.8ex,
			xtick=\empty,
			ytick=\empty,
			ztick=\empty,
			grid=none,
			rotate=180,
			]
	\addplot3[solid] table {
			0.1 0.9 0
			0.1 0 0.9
			};
	\addplot3[solid] table {
			0 0.65 0.35
			0.1 0.585 0.315
			};
	\end{ternaryaxis}
\end{tikzpicture}


\end{document}
Ich habe also zwei ternary plots erstellt, den zweiten manuell gedreht und verschoben. Geht das auch einfacher? Gibt es eine Möglichkeit einen doppeltes Dreiecksdiagramm direkt zu erstellen?

Außerdem: Wie im Beispiel gezeigt, wird das Feld "Basalt, Andesit" (Mitte, ganz rechts) nicht von der X-Achse des oberen Diagrammes bzw. der Y?-Achse des unteren Diagramms durchschnitten. Kann dies per PGFplots erreicht werden?

Vielen Dank im Voraus,
elmar.a

Nach oben