![Festlegen des Y-Ticks an definierten Positionen innerhalb der Farbleiste mithilfe von TikZ/PGFPlots, keine Achse](https://rvso.com/image/305911/Festlegen%20des%20Y-Ticks%20an%20definierten%20Positionen%20innerhalb%20der%20Farbleiste%20mithilfe%20von%20TikZ%2FPGFPlots%2C%20keine%20Achse.png)
Gestern habe ich meine erste Frage gestellt (Probleme beim Einstellen des Y-Ticks innerhalb der Farbleiste mit TikZ/PGFPlots, keine Achse) und ich habe wirklich tolle Antworten bekommen. Jetzt funktioniert es, wie ich es wollte. Aber ich habe immer noch ein kleines Problem und anscheinend bin ich zu dumm, um dieses Problem zu lösen. Aufgrund einiger Probleme mit der Registrierung (jetzt funktioniert es!) und meinem Forenstatus kann ich meinen letzten Beitrag nicht kommentieren.
Nun zu meinem Problem: Ich möchte in TikZ eine Farbleiste ohne Achsen erstellen. Das ist, was ich bisher mithilfe dieses tollen Forums hinbekommen habe.
Ich möchte die yticks aber an definierten Positionen setzen, wie in Bild 2 gezeigt beim Minimalwert des Balkens 7,50e6, dann 8,75e6, 1e7, ..., bis hin zum Maximalwert des Balkens (1,75e7). Bild 2 zeigt meine gewünschte Lösung bezüglich der yticks.
Wie kann ich die Y-Ticks selbst definieren?
Hier ist mein Code bis jetzt:
\documentclass[12pt,a4paper,oneside]{report}
\usepackage{tikz}
\usepackage{pgfplots, siunitx}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
hide axis,
scale only axis, %
height=0pt, % Grafik auf größe null
width=0pt, % Grafik auf größe null
colorbar sampled, % Diskrete Stufung
colormap={mymap}{[1pt] rgb(0pt)=(0.68235,0,1);
rgb(9pt)=(0,0.1216, 1);
rgb(17pt)=(0, 0.69412, 1);
rgb(26pt)=(0, 1, 0.6863);
rgb(34pt)=(0, 1, 0.098);
rgb(43pt)=(0.557,1,0);
rgb(51pt)=(1, 0.8353, 0);
rgb(60pt)=(1, 0.2275, 0);
rgb(63pt)=(1,0.02745,0)},
colorbar style={
title={$J$ in $\frac{A}{\si{\square\m}}$}, % Titel über Colorbar gedreht si unit m^2
%title={$J$ in $\frac{A}{m^{2}}$}, % Titel über Colorbar gedreht
samples=75, % Anzahl diskreter Schritte, so viele wie yticks
width=15, % Breite der Colorbar (des farbigen Bereichs)
height=220, % Höhe der Colorbar
point meta min=7500000, %neu % Beginn Colorbar, beachte yticks min
point meta max=17500000, %neu % Ende Colorbar, beachte yticks max
scaled y ticks = false,
yticklabel={
\num[
%scientific-notation = fixed,
scientific-notation = true,
%fixed-exponent = 5,
exponent-product=\cdot,
%output-exponent-marker = \text{e},
round-integer-to-decimal = true,
round-mode = figures,
round-precision = 3,
]{\tick}
},
yticklabel style={
text width=4em, % Abstand yticks zu colorbar
align=right, %
}
}
]
\end{axis}
\end{tikzpicture}
\end{document}
Ich hoffe ihr könnt mir weiterhelfen. Vielen Dank schon mal im Voraus!
Antwort1
Persönlich halte ich das nicht für besonders hilfreiche Tick-Positionen, aber hier erfahren Sie, wie Sie sie erreichen können.
Der einfachste Weg ist die „Brute-Force-Methode“: Stellen Sie ytick = {7.5e6, 8.75e6, 1e7, 1.125e7, 1.25e7, 1.375e7, 1.5e7, 1.625e7, 1.75e7}
alle Tick-Positionen manuell ein.
foreach
Da dies jedoch nicht sehr flexibel ist, möchten Sie möglicherweise die Syntax von verwenden ytick = {7.5e6, 8.75e6, ..., 1.75e7}
. Dies schlägt jedoch mit einem dimension too large
Fehler fehl, da dieser Mechanismus grundlegende TeX-Arithmetik verwendet, die mit so großen Zahlen nicht umgehen kann. Daher müssen wir einige Zwischenschritte ausführen:
Im Gegensatz zu dem, was ich Ihnen zuvor gesagt habe, geben Sie die Achsengrenzen in skalierten Einheiten an:
point meta min=7.5, point meta max=17.5
Auf diese Weise können Sie die Tick-Positionen mit der folgenden Syntax angeben
foreach
:ytick = {7.5, 8.75, ..., 17.5}
Innerhalb der Tick-Beschriftungen können Sie die Tick-Werte dann zurückskalieren:
yticklabel={ \pgfkeys{/pgf/fpu=true, /pgf/fpu/output format=fixed} % Necessary for handling large values \pgfmathparse{\tick*1e6} % Scale the tick values \num[ scientific-notation = true, exponent-product=\cdot, round-integer-to-decimal = true, round-mode = places, round-precision = 3, ]{\pgfmathresult}
\documentclass[12pt,a4paper,oneside]{report}
\usepackage{tikz}
\usepackage{pgfplots, siunitx}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
hide axis,
scale only axis, %
height=0pt, % Grafik auf größe null
width=0pt, % Grafik auf größe null
colorbar sampled, % Diskrete Stufung
colormap={mymap}{[1pt] rgb(0pt)=(0.68235,0,1);
rgb(9pt)=(0,0.1216, 1);
rgb(17pt)=(0, 0.69412, 1);
rgb(26pt)=(0, 1, 0.6863);
rgb(34pt)=(0, 1, 0.098);
rgb(43pt)=(0.557,1,0);
rgb(51pt)=(1, 0.8353, 0);
rgb(60pt)=(1, 0.2275, 0);
rgb(63pt)=(1,0.02745,0)},
colorbar style={
title={$J$ in $\frac{A}{\si{\square\m}}$}, % Titel über Colorbar gedreht si unit m^2
%title={$J$ in $\frac{A}{m^{2}}$}, % Titel über Colorbar gedreht
samples=75, % Anzahl diskreter Schritte, so viele wie yticks
width=15, % Breite der Colorbar (des farbigen Bereichs)
height=220, % Höhe der Colorbar
point meta min=7.5, %neu % Beginn Colorbar, beachte yticks min
point meta max=17.5, %neu % Ende Colorbar, beachte yticks max
scaled y ticks = false,
ytick = {7.5, 8.75, ..., 17.5},
yticklabel={
\pgfkeys{/pgf/fpu=true, /pgf/fpu/output format=fixed}
\pgfmathparse{\tick*1e6}
\num[
%scientific-notation = fixed,
scientific-notation = true,
%fixed-exponent = 5,
exponent-product=\cdot,
%output-exponent-marker = \text{e},
round-integer-to-decimal = true,
round-mode = places,
round-precision = 3,
]{\pgfmathresult}
},
yticklabel style={
text width=4em, % Abstand yticks zu colorbar
align=right, %
}
}
]
\end{axis}
\end{tikzpicture}
\end{document}
Falls Sie große Zahlen (größer als 1E10) verarbeiten müssen, siunitx
stürzt ab, wenn Sie versuchen, die Zahlen im wissenschaftlichen Format anzuzeigen. In diesem Fall können Sie auf den PGF-Zahlenparser zurückgreifen, der zwar nicht ganz so leistungsfähig ist wie siunitx
, aber auch ein angemessenes Maß an Anpassung ermöglicht:
\pgfmathparse{\tick*1e6}
\pgfmathprintnumber{\pgfmathresult}