大家好,JMP 社區,
你有沒有在桑基圖中為所有序列分配相同顏色類別的經驗?我遇到的問題是,每個序列都有不同的顏色類別,這使得很難追蹤從序列 1 到序列 2……再到序列 n 的元素變化,並且分配的顏色相同。
非常感謝!
你好@qunw ,你能發布一個你遇到的問題的(匿名)範例嗎?
就我而言,我希望可以使用桑基圖來監控狀態變化——流程過程中的「屬性」。
例如,通過和失敗有不同的類別。
在桑基圖中,顏色並不表示每個類別的值,而是表示「組」。 (圖表左側的紅色與右側的紅色代表資料表中的同一行 - 圖中其他任何地方的紅色。)這就是您所描述的「每個序列都有不同的顏色類別」嗎?
因此 - 在下面的例子中,藍色在左邊可以是 0,在中間和右邊也可以是藍色:

另一方面,從情節發展來看,將所有「1」賦予相同的顏色是沒有意義的。
但是如何在複雜的桑基圖中「找到」 1。
如果它們的顏色不一樣呢?
不幸的是:只是透過標籤!
以及如何找到「狀態」變化 - 例如從 0 到 1。 ->「用肉眼」幾乎不可能 - 它只是在大腦協處理器負荷很重的情況下工作:
與連續值的桑基圖不同:

……對於具有名義建模類型的列,相同的值可能位於 Y 軸上的不同位置。
這使得檢測具有名義值的桑基圖的「狀態」變化變得非常困難。
可以選擇從標稱模式切換到準“連續模式” - 在相同的高度具有相同的值 - 但具有很酷的附加功能,可以通過“管”的寬度來跟踪“人口”
希望啟用此模式: 平行圖:同步軸
目前解決辦法:
使用(偽)連續值。
除了可用性之外,還有美學方面:
為什麼儲蓄、住房和其他都向上彎曲 - 為什麼不保持在一個高度?
右下角有足夠的(空白)空間:

Victor,謝謝你提供的參考資料!我使用平行座標圖繪製了患者治療概況的桑基圖,但要按治療順序為相同的方案分配相同的顏色非常困難。平行圖說明中包含的兩個範例與我的病例並不完全相同,可能需要額外的編碼來幫助在不同治療方案之間同步顏色設定。
非常感謝Hogi幫我解答這個問題並分享了範例!我使用桑基圖來分析患者的治療情況,並嘗試為治療序列中相同的方案分配相同的顏色。我的情況與您的範例非常相似。您關於“每個序列都有不同的顏色類別”的描述是正確的。 X軸上的“值1、2和3”代表“治療1、2和3”,而“值0、1、2”代表每個治療的方案。我希望在“值1、2和3”中同步0、1和2的顏色設置,其中“1”代表紅色,“2”代表綠色,“0”代表藍色。這將有助於理解患者的治療歷程。如果您有任何解決方案,請告訴我——非常感謝。

我從一篇社區文章中學到了這個圖表,它提供了另一種視覺化相關問題的方法,例如追蹤初始治療和後續治療中每種方案的多樣性。我找到了一種產生該圖表的方法,即如果後續流出資料中的每個值與流出資料 1 中的值相同,則以流出資料 1 中的值作為前綴進行標記,例如「汽車」、「房屋」、「稅」等。這需要進行一些資料預處理才能實現。希望您有更好的方法。非常感謝!
@qunw寫道:
我想同步每個「值 1、2 和 3」中的 0、1 和 2 的顏色設置,其中「1」代表紅色,「2」代表綠色,「0」代表藍色。
好的,明白了。
我擔心,透過桑基圖這是不可能的(也不是有意的)。
在 GraphBuilder 中,可以透過行狀態或顏色拖放區來指派顏色。
在這兩種情況下,顏色都是按行定義的。
因此,當您在圖中選擇一個軌跡時,會選取特定的一行。軌跡的顏色由該行的顏色定義。一條軌跡對應一種顏色。

看更多...
New Table( "treatment",
Add Rows( 9 ),
New Column( "patient",
Character,
Set Values(
{"V1_0", "V1_1", "V1_2", "V1_3", "V1_4", "V1_5", "V1_6", "V1_7", "V1_8"}
)
),
New Column( "treatment 1",
"Nominal",
Set Values( [1, 1, 1, 2, 2, 2, 3, 3, 3] )
),
New Column( "treatment 2",
"Nominal",
Set Values( [1, 2, 3, 1, 2, 3, 1, 2, 3] )
),
New Column( "treatment 3",
"Nominal",
Set Values( [1, 1, 2, 1, 2, 3, 3, 3, 3] )
)
)
要使同一行獲得不同的顏色,必須使用腳本或分割行。
拆分行:堆疊表格:
current data table << Stack( columns( :treatment 1, :treatment 2, :treatment 3 ));
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Label ), Y( :patient ), Color( :Data ) ),
Elements( Heatmap( X, Y, Legend( 4 ) ) )
);

熱圖包含所有資訊 - 但是:令人驚訝的是,人類大腦需要多少次協同處理才能「理解它」。
更接近桑基圖 - 透過 y 軸上的顏色和位置來表示處理。
-> 需要更少的協同處理 - 更容易用肉眼看到資訊。

更接近桑基圖——所有軌跡都在一個圖中,
圖表變得非常繁忙,不再可能遵循特定的軌跡。

平行圖中的提議怎麼樣:同步軸?
使用相同的“Y”位置來識別相同的“值”。
此選項已適用於建模類型為「連續」(非名義)的欄位。
可以調整線寬以獲得更好看的圖形。
不幸的是,不可能使用線寬來表示分數/人口。
顏色可用於識別另一種類型的信息:
初步治療:

不同治療方法的數量:

dt = New Table( "treatment",
Add Rows( 9 ),
New Column( "patient",
Character,
Set Values(
{"V1_0", "V1_1", "V1_2", "V1_3", "V1_4", "V1_5", "V1_6", "V1_7", "V1_8"}
)
),
New Column( "treatment 1",
//"Nominal",
Set Values( [1, 1, 1, 2, 2, 2, 3, 3, 3] )
),
New Column( "treatment 2",
//"Nominal",
Set Values( [1, 2, 3, 1, 2, 3, 1, 2, 3] )
),
New Column( "treatment 3",
//"Nominal",
Set Values( [1, 1, 2, 1, 2, 3, 3, 3, 3] )
)
);
//this functionality is only available for scripters.<BR />//via the GUI, a user can create the equation manually
dt << New Formula Column(
Operation( Category( "Character" ), "Concatenate with Underscore" ),
Columns( :treatment 1, :treatment 2, :treatment 3 )
) << Run Formulas;
Graph Builder(
Size( 568, 240 ),
Show Control Panel( 0 ),
Summary Statistic( "Median" ),
Graph Spacing( 4 ),
Variables(
X( :treatment 1 ),
X( :treatment 2, Position( 1 ) ),
X( :treatment 3, Position( 1 ) ),
Color( :"Concatenate[treatment 1,treatment 2,treatment 3]"n )
),
Elements(
Parallel( X( 1 ), X( 2 ), X( 3 ) )
)
);