大家好,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 ) )
)
);