Machen Sie den Textfarbwert im Matrixplot abhängig

Machen Sie den Textfarbwert im Matrixplot abhängig

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}

Bild, das das Ergebnis des obigen Codes zeigt

verwandte Informationen