早上好,
我有一些包含 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}
颜色条从 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}
请注意,数据文件中有很多值出现了三次。希望这是正确的,而不是复制/粘贴失败或类似情况。