如何将颜色条缩放到 pgfplots 中的数据

如何将颜色条缩放到 pgfplots 中的数据

早上好,

我有一些包含 3 列数据的 .txt 文件:第一列对应每个点的 x 轴值,第二列对应每个点的 y 轴值,第三列对应我想要的颜色条(元索引)中的值。

当我绘制整个内容时,颜色条不会随着我的 txt 文件第三列中的数据而缩放。

这是我的代码:

\documentclass[varwidth]{standalone}
% *** PACKAGES ***
\usepackage{standalone} % Pour les stand-alone
\usepackage[usenames,dvipsnames]{xcolor} % 68 dvips colors à déclarer avant tikz
\usepackage{tikz} % Pour les figure Tikz
\usepackage{pgfplots} % Pour tracer les courbes à partir de fichiers de données
\usepackage{pgfplotstable} % Pour pouvoir lire les tableaux des fichiers .txt
% *** PACKAGES END ***
\pgfplotsset{compat=1.12} % pour définir la version de pgfplots
\pgfplotsset{
/pgfplots/colormap={hsv2}{rgb255(0cm)=(0,0,0) rgb255(0.10cm)=(128,0,128) rgb255(0.5cm)=(0,0,230)
rgb255(1.cm)=(0,255,255) rgb255(2.5cm)=(0,255,0) rgb255(3.5cm)=(255,255,0) rgb255(6cm)=(255,0,0)}
} % Pour définir les couleurs de la colomap
\begin{document}
\tikzset{mark options={mark size=1.5, line width=0.01pt}}
\begin{tikzpicture}
\begin{axis}[
            clip mode=individual, % Pour plot dans l'ordre
            enlargelimits=false,
    colorbar,
    colorbar style={ylabel=$C_{ligne,si}$},%,ytick={0,0.2,...,1}},
    width=0.7\textwidth,
            height=0.6\textwidth,
    grid=major,
    minor x tick num=1,
            xlabel={Real($\lambda (A)$)},
    minor y tick num=1,
            ylabel={Imag($\lambda (A)$)},
    tick label style={font=\footnotesize},
]
\foreach \m in {1,2,...,100}
{\edef\temp{\noexpand\addplot+[mark=*,only marks,scatter,scatter src=explicit] table[x index=0,y index=1,meta index=2] {./DATA_01/Valeurs_Propres_\m.txt};}\temp}
\end{axis}
\end{tikzpicture}
\end{document}

以下是我得到的最终结果: LaTeX 输出

颜色条从 10^-6 开始,一直到 10^-3;现在我想让颜色条以对数方式(而不是线性方式)缩放,以便 10^-6 和 10^-5 之间的“空间”与 10^-5 和 10^-4 之间以及 10^-4 和 10^-3 之间的“空间”相同。

如果有人愿意帮助我,我将把包含.tex 文件和.txt 文件的文件夹加入到.zip 中。你可以在这里下载。

非常感谢您的帮助!

对比

答案1

您的答案您只是以对数值的形式显示颜色条,但并未“转换”元数据。为此,请使用meta expr={log10(\thisrowno{2})}。但\foreach循环会导致错误,因为meta expr不会展开。要解决此问题,请将循环替换为\pgfplotsinvokeforeach

为了让其他人能够重现它的工作原理,我将数据文件缩短为两个文件,它们一起显示原始数据文件中的最小值和最大值。在下图中,您可以看到包含所有数据点的结果。

\begin{filecontents}{DATA_01/Valeurs_Propres_Shortened_1.txt}
    9.92E+00    5.50E+02    6.43E-05
    4.05E+01    5.99E+02    4.98E-05
    7.45E+01    6.52E+02    3.84E-05
    1.12E+02    7.12E+02    2.94E-05
    1.54E+02    7.77E+02    2.23E-05
    2.01E+02    8.51E+02    1.68E-05
    2.53E+02    9.35E+02    1.26E-05
    3.13E+02    1.03E+03    9.29E-06
    3.81E+02    1.14E+03    6.77E-06
    4.60E+02    1.27E+03    4.85E-06
    5.53E+02    1.42E+03    3.41E-06
    6.64E+02    1.61E+03    2.34E-06
    8.00E+02    1.84E+03    1.56E-06
    9.70E+02    2.12E+03    1.00E-06
\end{filecontents}
\begin{filecontents}{DATA_01/Valeurs_Propres_Shortened_2.txt}
    -1.61E+02   2.77E+02    1.00E-03
    -1.57E+02   2.81E+02    8.47E-04
    -1.52E+02   2.88E+02    6.79E-04
    -1.45E+02   2.98E+02    5.42E-04
    -1.37E+02   3.10E+02    4.33E-04
    -1.26E+02   3.25E+02    3.44E-04
    -1.14E+02   3.45E+02    2.73E-04
    -9.96E+01   3.69E+02    2.17E-04
    -8.30E+01   3.97E+02    1.71E-04
    -6.39E+01   4.29E+02    1.35E-04
    -4.22E+01   4.66E+02    1.06E-04
    -1.76E+01   5.06E+02    8.26E-05
\end{filecontents}
\documentclass[varwidth]{standalone}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
    \pgfplotsset{
        compat=1.12,
        colormap={hsv2}{
            rgb255(0cm)=(0,0,0)
            rgb255(0.10cm)=(128,0,128)
            rgb255(0.5cm)=(0,0,230)
            rgb255(1.cm)=(0,255,255)
            rgb255(2.5cm)=(0,255,0)
            rgb255(3.5cm)=(255,255,0)
            rgb255(6cm)=(255,0,0)
        },
    }
\begin{document}
    \tikzset{
        mark options={
            mark size=1.5,
            line width=0.01pt,
        },
    }
    \begin{tikzpicture}
        \begin{axis}[
            colorbar,
            colorbar style={
                ylabel=$C_{ligne,si}$,
                yticklabel={$10^{\pgfmathprintnumber{\tick}}$},
            },
            width=0.7\textwidth,
            height=0.6\textwidth,
            grid=major,
            xlabel={Real($\lambda (A)$)},
            ylabel={Imag($\lambda (A)$)},
            tick label style={
                font=\footnotesize,
            },
            % -----
            % added so that the boundaries are very similar
            % to the plot in the question
            xmin=-2600,
            xmax=1000,
            ymin=-2150,
            ymax=2150,
        ]
            \pgfplotsinvokeforeach {1,2} {
                \addplot+ [
                    mark=*,
                    only marks,
                    scatter,
                    scatter src=explicit,
                ] table [
                    x index=0,
                    y index=1,
                    % calculate the log of the data
                    meta expr={log10(\thisrowno{2})},
                ] {DATA_01/Valeurs_Propres_Shortened_#1.txt};
            }
        \end{axis}
    \end{tikzpicture}
\end{document}

显示上述代码结果的图像


请注意,数据文件中有很多值出现了三次。希望这是正确的,而不是复制/粘贴失败或类似情况。

答案2

我已经找到了如何设置对数轴,我应该更好地阅读手册中的色条部分。我只需要添加 ymode=log:

colorbar style={ylabel=$C_{ligne,si}$,ymode=log,ytick={1e-6,1e-5,1e-4,1e-3}},

最终结果如下: 在此处输入图片描述

现在的问题是,轴变了,但颜色不对:图中的颜色没有改变,尽管由于对数轴,颜色条中的对应值不再相同(例如,以前,10^-4 对应蓝色,而现在它应该对应颜色条中的橙色,但图中的颜色没有改变,只有颜色条中的颜色改变了)。我不知道为什么……

相关内容