簡體   English   中英

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軸(濃度在各處都是非零)

我用直方圖試過這個,但它並沒有真正給出我想要的結果。 我想要一個線條圖,但必須嘗試將距離放入常識大小的箱子中。

謝謝你

濃度圖

一些粗略的數據

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)

哪個會給你(使用示例數據): 多個直方圖

請注意,在循環中我向后迭代行 - 這只是為了使更窄的直方圖繪制在更寬的位置,因此您可以清楚地看到所有這些。

編輯

如果你想要連續的行,而不是bin,你必須首先通過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)

使用您的小示例數據,它看起來並不那么令人印象深刻: 多行直方圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM