RingoP601
18-09-2012, 16:09
Hallo,
ich habe seit Tagen im Netz gesucht aber keine Info gefunden. Hier mein Problem:
Ich habe ein Diagramm mit PGFPLOTS, das als x-Achse
xtick=data hat.
Des Weiteren habe ich pro xtick 4 Werte, die ich als Quadrate und Dreiecke eintrage.
So lange die Werte alle unterchiedlich sind, bin ich zufrieden und man kann alles erkennen.
Problem ist, für die Instanz 1 habe ich 3 mal den selben Wert. Durch die bisherige Konstruktion übermalt tikz mit dem zweiten Dreieck das erste und es sieht aus, als ob Algo 2 keinen Wert hat für Instanz 1.
Ich hätte gern, dass bei gleichen Werten die Symbole einfach nebeneinander gemalt werden. Platz ist dafür ja da. Doch hat scheinbar vor mir nie jemand ein ähnliches Problem gehabt oder ich habe falsch gesucht :-(
Kann mir nicht vorstellen, dass das nicht gehen soll. Ich nehme auch gern ne Lösung mit Brecheisen ;-)
Voraussetzungen:
Die Symbole müssen so bleiben und ich will KEINE Kurve durch die Punkte zeichnen.
Ich habe für mein echtes Diagramm sehr viele Instanzen, wodurch ein Balkendiagramm sehr hässlich wird. Ich kann das Diagramm aus inhaltlichen Gründen nicht in zwei aufteilen.
Minimalbeispiel:
\begin{tikzpicture}
\begin{semilogyaxis}
[
xlabel={Instanzen},
ylabel={Laufzeit Algorithmus in ms},
ymin=0,ymax=1000,
xtick = data,
yticklabel={%
\pgfplotsset{/pgf/fpu}% <-- erweiterter zahlenbereich
\pgfmathparse{exp(\tick)}% exponentiere den exponent
\pgfmathprintnumber[fixed]{\pgfmathresult}% formatiere die zahl
},
y tick label style={/pgf/number format/use comma, /pgf/number format/1000 sep={.}},
x tick label style={rotate=45,anchor=east},
legend pos=north west, %,legend columns=-1},
symbolic x coords={Instanz 1, Instanz 2, Instanz 3}
]
\addplot[color=green, draw=black, mark=square*,only marks]coordinates{
(Instanz 1, 46) (Instanz 2, 515) (Instanz 3, 109)
};
\addlegendentry{Algo 1}
\addplot[color=blue, draw=black, mark=triangle*,only marks] coordinates{
(Instanz 1, 31) (Instanz 2, 421) (Instanz 3, 94)
};
\addlegendentry{Algo 2}
\addplot[color=yellow, draw=black, mark=square*,only marks] coordinates{
(Instanz 1, 31) (Instanz 2, 187) (Instanz 3, 62)
};
\addlegendentry{Algo 3}
\addplot[color=magenta, draw=black, mark=triangle*,only marks] coordinates{
(Instanz 1, 31) (Instanz 2, 140) (Instanz 3, 47)
};
\addlegendentry{Algo 4}
\end{semilogyaxis}
\end{tikzpicture}
Danke, viele Grüße
Ringo
ich habe seit Tagen im Netz gesucht aber keine Info gefunden. Hier mein Problem:
Ich habe ein Diagramm mit PGFPLOTS, das als x-Achse
xtick=data hat.
Des Weiteren habe ich pro xtick 4 Werte, die ich als Quadrate und Dreiecke eintrage.
So lange die Werte alle unterchiedlich sind, bin ich zufrieden und man kann alles erkennen.
Problem ist, für die Instanz 1 habe ich 3 mal den selben Wert. Durch die bisherige Konstruktion übermalt tikz mit dem zweiten Dreieck das erste und es sieht aus, als ob Algo 2 keinen Wert hat für Instanz 1.
Ich hätte gern, dass bei gleichen Werten die Symbole einfach nebeneinander gemalt werden. Platz ist dafür ja da. Doch hat scheinbar vor mir nie jemand ein ähnliches Problem gehabt oder ich habe falsch gesucht :-(
Kann mir nicht vorstellen, dass das nicht gehen soll. Ich nehme auch gern ne Lösung mit Brecheisen ;-)
Voraussetzungen:
Die Symbole müssen so bleiben und ich will KEINE Kurve durch die Punkte zeichnen.
Ich habe für mein echtes Diagramm sehr viele Instanzen, wodurch ein Balkendiagramm sehr hässlich wird. Ich kann das Diagramm aus inhaltlichen Gründen nicht in zwei aufteilen.
Minimalbeispiel:
\begin{tikzpicture}
\begin{semilogyaxis}
[
xlabel={Instanzen},
ylabel={Laufzeit Algorithmus in ms},
ymin=0,ymax=1000,
xtick = data,
yticklabel={%
\pgfplotsset{/pgf/fpu}% <-- erweiterter zahlenbereich
\pgfmathparse{exp(\tick)}% exponentiere den exponent
\pgfmathprintnumber[fixed]{\pgfmathresult}% formatiere die zahl
},
y tick label style={/pgf/number format/use comma, /pgf/number format/1000 sep={.}},
x tick label style={rotate=45,anchor=east},
legend pos=north west, %,legend columns=-1},
symbolic x coords={Instanz 1, Instanz 2, Instanz 3}
]
\addplot[color=green, draw=black, mark=square*,only marks]coordinates{
(Instanz 1, 46) (Instanz 2, 515) (Instanz 3, 109)
};
\addlegendentry{Algo 1}
\addplot[color=blue, draw=black, mark=triangle*,only marks] coordinates{
(Instanz 1, 31) (Instanz 2, 421) (Instanz 3, 94)
};
\addlegendentry{Algo 2}
\addplot[color=yellow, draw=black, mark=square*,only marks] coordinates{
(Instanz 1, 31) (Instanz 2, 187) (Instanz 3, 62)
};
\addlegendentry{Algo 3}
\addplot[color=magenta, draw=black, mark=triangle*,only marks] coordinates{
(Instanz 1, 31) (Instanz 2, 140) (Instanz 3, 47)
};
\addlegendentry{Algo 4}
\end{semilogyaxis}
\end{tikzpicture}
Danke, viele Grüße
Ringo