Matlab - 浓度与距离图(2D)
Matlab - concentration vs distance plot (2D)
我有几组数据。每组都是一个数字列表,它是粒子从 0 开始移动的距离。每个集合都与有限时间相关联,因此集合 1 是 T=0 时的距离;集合 2 是 T=1 处的距离,依此类推。每组大小为粒子总数,每组大小相同
我想绘制浓度与距离线。
比如有1000个粒子(集合的大小);在时间 T=0 时,绘图将只是一条直线 x=0,因为所有粒子都在 0(该集合包含 1000 个零)。所以 x=0 处的浓度 =100%,所有其他距离处的浓度均为 0%
在 T=1 和 T=2 等等,距离会增加(通常)所以我可能有这样的集合:(只是一个例子)
T1 = (1.1,2.2,3.0,1.2,3.2,2.3,1.4...) 等 T2 = (2.9,3.2,2.6,4.5,4.3,1.4,5.8...) 等
很可能每组中的每个数字在该组中都是唯一的
目标是绘制多个图(我最终可以将它们绘制在一张图上),在 y 轴上显示浓度,在 x 轴上显示距离。我想随着 T 增加 T0、T1、T2,那么绘图将变平,直到各处的浓度大致相同。
x 轴(距离)有一个固定的最大值,每个图都相同。因此,例如,一些集合将有一条曲线在 y 轴(浓度)上以较低的 x(距离)值达到零,但随着时间的增加,我设想一条几乎平坦的线,该线不穿过x轴(浓度处处非零)
我已经用直方图试过了,但它并没有真正给出我想要的结果。我想要一个线图,但必须尝试将距离放入常识大小的容器中。
谢谢W
一些粗略的数据
Y1 = 1.0e-09 * [0.3358, 0.3316, 0.3312, 0.3223, 0.2888, 0.2789, 0.2702,...
0.2114, 0.1919, 0.1743, 0.1738, 0.1702, 0.0599, 0.0003, 0, 0, 0, 0, 0, 0];
Y2 = 1.0e-08 * [0.4566, 0.4130, 0.3439, 0.3160, 0.3138, 0.2507, 0.2483,...
0.1714, 0.1371, 0.1039, 0.0918, 0.0636, 0.0502, 0.0399, 0.0350, 0.0182,...
0.0010, 0, 0, 0];
Y3 = 1.0e-07 * [0.2698, 0.2671, 0.2358, 0.2250, 0.2232, 0.1836, 0.1784,...
0.1690, 0.1616, 0.1567, 0.1104, 0.0949, 0.0834, 0.0798, 0.0479, 0.0296,...
0.0197, 0.0188, 0.0173, 0.0029];
这些数据集仅包含 20 个粒子的距离。 Y0
集合为零。我将处理数千个,所以数据集会太大。
谢谢
嗯,基本上,您只是错过了 hold
命令。但首先,将所有数据放在一个矩阵中,如下所示:
Y = [1.0e-09 * [0.3358, 0.3316, 0.3312, 0.3223, 0.2888, 0.2789, 0.2702,...
0.2114, 0.1919, 0.1743, 0.1738, 0.1702, 0.0599, 0.0003, 0, 0, 0, 0, 0, 0];
1.0e-08 * [0.4566, 0.4130, 0.3439, 0.3160, 0.3138, 0.2507, 0.2483,...
0.1714, 0.1371, 0.1039, 0.0918, 0.0636, 0.0502, 0.0399, 0.0350, 0.0182,...
0.0010, 0, 0, 0];
1.0e-07 * [0.2698, 0.2671, 0.2358, 0.2250, 0.2232, 0.1836, 0.1784,...
0.1690, 0.1616, 0.1567, 0.1104, 0.0949, 0.0834, 0.0798, 0.0479, 0.0296,...
0.0197, 0.0188, 0.0173, 0.0029]];
然后你需要分别绘制每个时间步长,并使用hold on
将它们粘贴在相同的轴上:
hold on
for r = size(Y,1):-1:1
histogram(Y(r,:));
end
hold off
T_names = [repmat('T',size(Y,1),1) num2str((size(Y,1):-1:1).')];
legend(T_names)
这会给你(使用示例数据):
请注意,在循环中我向后迭代行 - 这只是为了让较窄的直方图绘制在较宽的直方图上,这样您就可以清楚地看到它们。
编辑
如果你想要连续的线,而不是箱子,你必须首先通过 histcounts
获得直方图值,然后将它们绘制成一条线:
hold on
for r = 1:size(Y,1)
[H,E] = histcounts(Y(r,:));
plot(E,[H(1) H])
end
hold off
T_names = [repmat('T',size(Y,1),1) num2str((1:size(Y,1)).')];
legend(T_names)
虽然你的小示例数据看起来并不那么令人印象深刻:
我有几组数据。每组都是一个数字列表,它是粒子从 0 开始移动的距离。每个集合都与有限时间相关联,因此集合 1 是 T=0 时的距离;集合 2 是 T=1 处的距离,依此类推。每组大小为粒子总数,每组大小相同
我想绘制浓度与距离线。
比如有1000个粒子(集合的大小);在时间 T=0 时,绘图将只是一条直线 x=0,因为所有粒子都在 0(该集合包含 1000 个零)。所以 x=0 处的浓度 =100%,所有其他距离处的浓度均为 0%
在 T=1 和 T=2 等等,距离会增加(通常)所以我可能有这样的集合:(只是一个例子)
T1 = (1.1,2.2,3.0,1.2,3.2,2.3,1.4...) 等 T2 = (2.9,3.2,2.6,4.5,4.3,1.4,5.8...) 等
很可能每组中的每个数字在该组中都是唯一的
目标是绘制多个图(我最终可以将它们绘制在一张图上),在 y 轴上显示浓度,在 x 轴上显示距离。我想随着 T 增加 T0、T1、T2,那么绘图将变平,直到各处的浓度大致相同。
x 轴(距离)有一个固定的最大值,每个图都相同。因此,例如,一些集合将有一条曲线在 y 轴(浓度)上以较低的 x(距离)值达到零,但随着时间的增加,我设想一条几乎平坦的线,该线不穿过x轴(浓度处处非零)
我已经用直方图试过了,但它并没有真正给出我想要的结果。我想要一个线图,但必须尝试将距离放入常识大小的容器中。
谢谢W
一些粗略的数据
Y1 = 1.0e-09 * [0.3358, 0.3316, 0.3312, 0.3223, 0.2888, 0.2789, 0.2702,...
0.2114, 0.1919, 0.1743, 0.1738, 0.1702, 0.0599, 0.0003, 0, 0, 0, 0, 0, 0];
Y2 = 1.0e-08 * [0.4566, 0.4130, 0.3439, 0.3160, 0.3138, 0.2507, 0.2483,...
0.1714, 0.1371, 0.1039, 0.0918, 0.0636, 0.0502, 0.0399, 0.0350, 0.0182,...
0.0010, 0, 0, 0];
Y3 = 1.0e-07 * [0.2698, 0.2671, 0.2358, 0.2250, 0.2232, 0.1836, 0.1784,...
0.1690, 0.1616, 0.1567, 0.1104, 0.0949, 0.0834, 0.0798, 0.0479, 0.0296,...
0.0197, 0.0188, 0.0173, 0.0029];
这些数据集仅包含 20 个粒子的距离。 Y0
集合为零。我将处理数千个,所以数据集会太大。
谢谢
嗯,基本上,您只是错过了 hold
命令。但首先,将所有数据放在一个矩阵中,如下所示:
Y = [1.0e-09 * [0.3358, 0.3316, 0.3312, 0.3223, 0.2888, 0.2789, 0.2702,...
0.2114, 0.1919, 0.1743, 0.1738, 0.1702, 0.0599, 0.0003, 0, 0, 0, 0, 0, 0];
1.0e-08 * [0.4566, 0.4130, 0.3439, 0.3160, 0.3138, 0.2507, 0.2483,...
0.1714, 0.1371, 0.1039, 0.0918, 0.0636, 0.0502, 0.0399, 0.0350, 0.0182,...
0.0010, 0, 0, 0];
1.0e-07 * [0.2698, 0.2671, 0.2358, 0.2250, 0.2232, 0.1836, 0.1784,...
0.1690, 0.1616, 0.1567, 0.1104, 0.0949, 0.0834, 0.0798, 0.0479, 0.0296,...
0.0197, 0.0188, 0.0173, 0.0029]];
然后你需要分别绘制每个时间步长,并使用hold on
将它们粘贴在相同的轴上:
hold on
for r = size(Y,1):-1:1
histogram(Y(r,:));
end
hold off
T_names = [repmat('T',size(Y,1),1) num2str((size(Y,1):-1:1).')];
legend(T_names)
这会给你(使用示例数据):
请注意,在循环中我向后迭代行 - 这只是为了让较窄的直方图绘制在较宽的直方图上,这样您就可以清楚地看到它们。
编辑
如果你想要连续的线,而不是箱子,你必须首先通过 histcounts
获得直方图值,然后将它们绘制成一条线:
hold on
for r = 1:size(Y,1)
[H,E] = histcounts(Y(r,:));
plot(E,[H(1) H])
end
hold off
T_names = [repmat('T',size(Y,1),1) num2str((1:size(Y,1)).')];
legend(T_names)
虽然你的小示例数据看起来并不那么令人印象深刻: