昨天我发布了我的第一个问题(使用 TikZ/PGFPlots 设置颜色条内的 ytick 时出现问题,没有轴)我得到了非常棒的答案。现在它按我想要的方式工作了。但我还有一个小问题,显然我太笨了,无法解决这个问题。由于注册(现在它可以工作了!)和我的论坛状态出现一些问题,我无法评论我的上一篇帖子。
现在,我的问题是:我想在 TikZ 中创建一个没有任何轴的颜色条。这是我迄今为止使用此超级论坛提供的帮助所得到的。
但我想将 yticks 设置在定义的位置,如图 2 所示,条形图的最小值为 7.50e6,然后是 8.75e6、1e7、...,直到条形图的最大值 (1.75e7)。图 2 显示了我想要的有关 yticks 的解决方案。
我怎样才能自定义 yticks?
到目前为止这是我的代码:
\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}
希望您能帮助我。提前致谢!
答案1
就我个人而言,我并不认为这些是非常有用的位置,但是你可以通过以下方法获得它们。
最简单的方法就是“蛮力法”:设置ytick = {7.5e6, 8.75e6, 1e7, 1.125e7, 1.25e7, 1.375e7, 1.5e7, 1.625e7, 1.75e7}
为手动指定所有的刻度位置。
但由于这种方式不太灵活,您可能希望使用 语法foreach
。ytick = {7.5e6, 8.75e6, ..., 1.75e7}
但是,这将失败并出现错误dimension too large
,因为此机制使用基本的 TeX 算法,无法处理如此大的数字。因此,我们必须使用一些中间步骤:
与我之前告诉你的相反,以缩放单位指定轴限制:
point meta min=7.5, point meta max=17.5
这允许您使用以下语法指定刻度位置
foreach
:ytick = {7.5, 8.75, ..., 17.5}
在刻度标签内,您可以按比例缩小刻度值:
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}
如果您需要处理巨大的数字(大于 1E10),siunitx
当您尝试使用科学格式显示数字时会卡住。在这种情况下,您可以回到 PGF 数字解析器,它虽然不如那么强大siunitx
,但也允许进行大量自定义:
\pgfmathparse{\tick*1e6}
\pgfmathprintnumber{\pgfmathresult}