如何 select 仅从列表中选择唯一值进行着色?
How do I select only unique values from a list for coloring?
最后的 vega-lite 代码将列“c”的每个实例都视为唯一值,并向图例添加相应的单独条目,如下所示:
在这种情况下我只需要 3 种颜色:红色、蓝色和黄色 - 没有诸如“蓝色、红色”之类的组合。决策逻辑为 50-50,例如:如果“blue”的值为 3,“blue, red”的值为 4,则后者将拆分为 2 个蓝色和 2 个红色,共计 5 ( 3+2)“蓝色”和 2 个“红色”。如果“蓝色,红色”是 5,它就会有 2.5 和 2.5 等等。
代码如下:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": {
"values": [
{"a": "A", "b": 2, "c": "red, blue"},
{"a": "A", "b": 7, "c": "yellow, blue"},
{"a": "A", "b": 4, "c": "blue, red"},
{"a": "B", "b": 1, "c": "blue"},
{"a": "B", "b": 2, "c": "red"}
]
},
"mark": "bar",
"encoding": {
"x": {"field": "a", "type": "nominal"},
"y": {"aggregate": "average", "field": "b", "type": "quantitative"},
"color": {"field": "c", "type": "nominal"}
}
}
在执行一些像fold, calculate and filter
这样的转换之后,您将能够获得想要的结果,在下面的代码片段中或参考editor:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 200,
"data": {
"values": [
{"a": "A", "b": 2, "c": "red, blue"},
{"a": "A", "b": 7, "c": "yellow, blue"},
{"a": "A", "b": 4, "c": "blue, red"},
{"a": "B", "b": 1, "c": "blue"},
{"a": "B", "b": 2, "c": "red"}
]
},
"transform": [
{"fold": ["red", "blue", "yellow"]},
{
"calculate": "indexof(datum.c,datum.key) ? datum.b/2 : datum.b",
"as": "value"
},
{"filter": "indexof(datum.c,datum.key) > -1"},
{
"joinaggregate": [{"field": "value", "op": "sum", "as": "value_sum"}],
"groupby": ["key", "a"]
}
],
"mark": "bar",
"encoding": {
"tooltip": [{"field": "value_sum"}],
"x": {"field": "a", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"},
"color": {
"field": "key",
"type": "nominal",
"scale": {"range": ["blue", "red", "yellow"]}
}
}
}
让我知道这是否有效
最后的 vega-lite 代码将列“c”的每个实例都视为唯一值,并向图例添加相应的单独条目,如下所示:
在这种情况下我只需要 3 种颜色:红色、蓝色和黄色 - 没有诸如“蓝色、红色”之类的组合。决策逻辑为 50-50,例如:如果“blue”的值为 3,“blue, red”的值为 4,则后者将拆分为 2 个蓝色和 2 个红色,共计 5 ( 3+2)“蓝色”和 2 个“红色”。如果“蓝色,红色”是 5,它就会有 2.5 和 2.5 等等。
代码如下:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": {
"values": [
{"a": "A", "b": 2, "c": "red, blue"},
{"a": "A", "b": 7, "c": "yellow, blue"},
{"a": "A", "b": 4, "c": "blue, red"},
{"a": "B", "b": 1, "c": "blue"},
{"a": "B", "b": 2, "c": "red"}
]
},
"mark": "bar",
"encoding": {
"x": {"field": "a", "type": "nominal"},
"y": {"aggregate": "average", "field": "b", "type": "quantitative"},
"color": {"field": "c", "type": "nominal"}
}
}
在执行一些像fold, calculate and filter
这样的转换之后,您将能够获得想要的结果,在下面的代码片段中或参考editor:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 200,
"data": {
"values": [
{"a": "A", "b": 2, "c": "red, blue"},
{"a": "A", "b": 7, "c": "yellow, blue"},
{"a": "A", "b": 4, "c": "blue, red"},
{"a": "B", "b": 1, "c": "blue"},
{"a": "B", "b": 2, "c": "red"}
]
},
"transform": [
{"fold": ["red", "blue", "yellow"]},
{
"calculate": "indexof(datum.c,datum.key) ? datum.b/2 : datum.b",
"as": "value"
},
{"filter": "indexof(datum.c,datum.key) > -1"},
{
"joinaggregate": [{"field": "value", "op": "sum", "as": "value_sum"}],
"groupby": ["key", "a"]
}
],
"mark": "bar",
"encoding": {
"tooltip": [{"field": "value_sum"}],
"x": {"field": "a", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"},
"color": {
"field": "key",
"type": "nominal",
"scale": {"range": ["blue", "red", "yellow"]}
}
}
}
让我知道这是否有效