Ich versuche, diese Handlung zu optimieren:
pgfplots: Prozentsatz im Matrixplot
... um die Farbe der Anmerkungen je nach Wert zu ändern. Über 50 % sollte es weiß sein und darunter schwarz.
Ich habe das vage Gefühl, dass das einfach sein könnte, aber ich weiß nicht, wie das geht, und kann kein Beispiel finden, das es mir zeigt. Jede Hilfe ist sehr willkommen.
Antwort1
Dies kann durch die Änderung vondiese Antwort.
Weitere Einzelheiten zur Funktionsweise finden Sie in den Kommentaren im Code.
% used PGFPlots v.1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{
width=5cm,
height=18cm,
compat=1.3,
colormap={blackwhite}{gray(0cm)=(1); gray(1cm)=(0.5)},
xticklabels={LPIBG, ALL, HPIBG},
xtick={0,...,2},
ytick=\empty,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
enlargelimits=false,
xlabel style={font=\footnotesize},
ylabel style={font=\footnotesize},
legend style={font=\footnotesize},
xticklabel style={font=\footnotesize},
yticklabel style={font=\footnotesize},
colorbar,
colorbar style={
ytick={0,20,40,60,80,100},
yticklabels={0,20,40,60,80,100},
yticklabel={\pgfmathprintnumber\tick\,\%},
yticklabel style={font=\footnotesize}
},
point meta min=0,
point meta max=100,
nodes near coords={\pgfmathprintnumber\pgfplotspointmeta\,\%},
% ---------------------------------------------------------------------
% show `nodes near coords' but adapt the style so that values
% above a threshold get another style
% (adapted from <http://tex.stackexchange.com/a/141006/95441>)
% #1: the THRESHOLD after which we switch to a special display.
nodes near coords black white/.style={
% define the style of the nodes with "small" values
small value/.style={
font=\footnotesize,
yshift=-7pt,
text=black,
},
% define the style of the nodes with "large" values
large value/.style={
font=\footnotesize,
yshift=-7pt,
text=white,
},
every node near coord/.style={
check for zero/.code={
\pgfmathfloatifflags{\pgfplotspointmeta}{0}{
% If meta=0, make the node a coordinate
% (which doesn't have text)
\pgfkeys{/tikz/coordinate}
}{
\begingroup
% this group is merely to switch to FPU locally.
% Might be unnecessary, but who knows.
\pgfkeys{/pgf/fpu}
\pgfmathparse{\pgfplotspointmeta<#1}
\global\let\result=\pgfmathresult
\endgroup
%
% simplifies debugging:
%\show\result
%
\pgfmathfloatcreate{1}{1.0}{0}
\let\ONE=\pgfmathresult
\ifx\result\ONE
% AH: our condition 'y < #1' is met.
\pgfkeysalso{/pgfplots/small value}
\else
% ok, proceed as usual.
\pgfkeysalso{/pgfplots/large value}
\fi
}
},
check for zero,
},
},
% asign a value to the new style thich is the threshold at which
% the two style `small value' or `large value' are used
nodes near coords black white=50,
% -----------------------------------------------------------------
]
\addplot[
matrix plot,
mesh/cols=3,
point meta=explicit,
] table [meta=C] {
x y C
0 0 80
1 0 36
2 0 40
0 1 64
1 1 80
2 1 60
0 2 52
1 2 84
2 2 72
0 3 72
1 3 28
2 3 32
0 4 56
1 4 84
2 4 80
0 5 72
1 5 52
2 5 44
0 6 4
1 6 84
2 6 41
0 7 37
1 7 69
2 7 84
0 8 63
1 8 53
2 8 82
0 9 78
1 9 74
2 9 39
0 10 39
1 10 63
2 10 88
0 11 76
1 11 74
2 11 49
0 12 39
1 12 6
2 12 88
0 13 46
1 13 33
2 13 75
0 14 88
1 14 67
2 14 54
0 15 79
1 15 83
2 15 75
0 16 50
1 16 46
2 16 71
0 17 92
1 17 71
2 17 75
0 18 46
1 18 33
2 18 8
};
\end{axis}
\end{tikzpicture}
\end{document}