PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pgfplots Strichlänge und -dicke in Legende ändern



J0Sch
23-12-2011, 10:00
Hallo,

Ich würde gerne das Symbol, dass in meiner Legende für den Plot steht ändern. In dem Beispiel ist das einfach eine rote Linie. Mein Ziel ist nun die Linie kürzer und dicker zu machen...

Beispiel:

\documentclass[11pt, oneside, a4paper]{scrreprt}

\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}


\begin{figure}
\centering
\footnotesize
\begin{tikzpicture}
\begin{axis}[
title=test,
xmin=0, xmax=10,
ymin=0, ymax=10,
width={14cm},
height={10cm},
xlabel={x},
ylabel={y},
grid=major,
legend style={
at={(axis cs:0.1,9.9)},
anchor=north west,
fill opacity=0.8,
draw=none,
fill=red!10!white,
},
]

\addplot[red!80!white,domain=1:9,line width=0.5pt] {x};
\addlegendentry{test};


\end{axis}
\end{tikzpicture}
\end{figure}

\end{document}

Ich habe in der pgfpolots Dokumentation diesen codebrocken gefunden:

\pgfplotsset{
/pgfplots/line legend/.style={
legend image code/.code={
\draw[mark repeat=2,mark phase=2,##1]
plot coordinates {
(0cm,0cm)
(0.3cm,0cm)
(0.6cm,0cm)
};%
}
}
}


und meiner Meinung nach sollte ich mein Ziel erreichen in dem ich z.B. die Koordinaten ändere (also (0,0) (0.2,0) (0.4,0))... leider habe ich damit kein Erfolg auch "line width=xpt" ändert an der Darstellung nichts...

Viele Grüße,
Josch

mechanicus
23-12-2011, 10:36
Hi,

Linie dicker:

legend image post style={line width =4pt}

Das andere weiß ich so nicht.

Gruß
Marco

J0Sch
23-12-2011, 10:47
Hi Marco,

vielen Dank für die schnelle Antwort. Das löst mein größtes Problem.

Grüße,
Josch

Feuersaenger
23-12-2011, 11:46
Hi J0Sch,

das mit der line legend sollte eigentlich nicht modifizierbar sein - sorry, das war so nicht markiert.

Der codebrocken ist allerdings trotzdem der richtig Anlauf -- wenn Du *nur* den 'legend image code' kram anfasst, tut es das gewuenschte:



/pgfplots/legend image code/.code={
\draw[mark repeat=2,mark phase=2]
plot coordinates {
(0cm,0cm)
(0.3cm,0cm)
(0.6cm,0cm)
};
}


In dem Zusammenhang ist 'line legend' ist als read-only style konzipiert, mit dem man den default wiederherstellen kann.

Mit liebem Gruss

Christian

mechanicus
23-12-2011, 11:52
In dem Zusammenhang ist 'line legend' ist als read-only style konzipiert, mit dem man den default wiederherstellen kann.

Kannst du das bitte erklären. :confused::confused:

Gruß
Marco

Feuersaenger
01-01-2012, 15:43
Hallo mechanicus,

sorry fuer die Verwirrung. Verstehe ich es richtig, dass Du nur "generell" an einem Verstaendnis zu "line legend" sowie meiner Bemerkung dazu interessiert bist?

Line legend entstandt aus einem Anwendungsfall, in dem jemand gerne den default legend image code wiederherstellen wollte - ohne den laenglichen code dazu zu kopieren. Wenn man also 'line legend' einfach so eingibt, hat man den default wieder.

Wenn man aber 'line legend' *ueberschreibt*, dann bekommt pgfplots das nicht mit -- denn pgfplots fragt diesen style nie ab, weil es davon ausgeht, dass niemand das aendert.

Pgfplots definiert einfach nur 'line legend', ruft den style *einmal* beim laden des pakets auf (damit ist der default systemweit aktiv), und ignoriert den ab da. Der Style ist also nur interessant fuer nutzer, wenn sie den pgfplots-default nochmal haben wollen. Zugegenermassen etwas irrefuehrend :(

Frohes Neues Jahr!

Mit liebem Gruss

Christian

mechanicus
01-01-2012, 22:18
sorry fuer die Verwirrung. Verstehe ich es richtig, dass Du nur "generell" an einem Verstaendnis zu "line legend" sowie meiner Bemerkung dazu interessiert bist?
Du hast mich richtig verstanden.

Danke für die Erklärung.

Gruß
Marco

J0Sch
08-01-2012, 10:39
moin moin,

nur um das zu vervollständigen... wenn ich einen neuen Legendentyp definiere, kann ich einen kurzen, dicken Strich in der Legende darstellen.

kurze Legende:


\pgfplotsset{
kurze Legende/.style={%
legend image code/.code={
\draw[##1,line width=0.6pt]
plot coordinates {
(0cm,0cm)
(0.4cm,0cm)
};%
}
}
}

ergibt dann im Minibeispiel:

\documentclass[11pt, oneside, a4paper]{scrreprt}

\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{pgfplots}

\pgfplotsset{
kurze Legende/.style={%
legend image code/.code={
\draw[##1,line width=1.6pt]
plot coordinates {
(0cm,0cm)
(0.2cm,0cm)
};%
}
}
}

\begin{document}


\begin{figure}
\centering
\footnotesize
\begin{tikzpicture}
\begin{axis}[
title=test,
legend style={kurze Legende},
xmin=0, xmax=10,
ymin=0, ymax=10,
width={14cm},
height={10cm},
xlabel={x},
ylabel={y},
grid=major,
legend style={
at={(axis cs:0.1,9.9)},
anchor=north west,
},
]

\addplot[red!80!white,domain=1:9,line width=0.5pt] {x};
\addlegendentry{test};


\end{axis}
\end{tikzpicture}
\end{figure}

\end{document}

Grüße,
Josch

logikey
03-04-2012, 18:35
Hi!

Ich hab ein "ähnliches" Problem, zumindest was Striche angeht.
Soweit mir als absoluter Neuling offenbar definiere ich, wenn ich die in den Docs beschriebene Zeile "every /. axis style = .. line width =.." verwende für alle Striche in meinen Plots die Strichdicke. Es sind also Achsen und Funktionsstriche (also Verbindungen zwischen den Markierungen/Punkten) in dieser Dicke. Ich brauche allerdings regulär 1.2pt Strichdicke in den Plots - also die Linien !im Diagramm! sollen so dick sein, die Achsbeschriftungen, Achsen und Co sollten sich nicht ändern. (Btw. falls es einfach geht wäre es auch cool zu erfahren, wie man die Farben der Achsen separat vom sonstigen Text verändern kann).

Edit: Ich kann die einzelnen \addplots vergrößern, indem ich +[line width= ] setze, allerdings muss ich das jedes mal einfügen.

Vielen Dank
Gruß Michael