首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Vegalite绘制多直方图图

用Vegalite绘制多直方图图
EN

Stack Overflow用户
提问于 2020-07-06 21:33:50
回答 1查看 304关注 0票数 3

我想创造一个单一的视觉显示多个直方图在它上。我有一些简单的值数组,如下所示:

代码语言:javascript
复制
"data": {"values": {"foo": [0,0,0,1,1,1,2,2,2], "baz": [2,2,2,3,3,3,4,4,4]}}

我想使用不同的颜色条来显示"foo“和"baz”的值的扩展。我可以为"foo“做一个直方图,如下所示:

代码语言:javascript
复制
{
  "data": {"values": {"foo": [0,0,0,1,1,1,2,2,2]}},
  "mark": "bar",
  "transform": [{"flatten": ["foo"]}],
  "encoding": {
    "x": {"field": "foo", "type": "quantitative"},
    "y": {"field": "foo", "type": "quantitative", "aggregate": "count"}
  }
}

但是,我无法找到正确的方法来平平数组。这不管用:

代码语言:javascript
复制
{
  "data": {"values": {"foo": [0,0,0,1,1,1,2,2,2], "bar": [0,0,0,1,1,1,2,2,2]}},
  "mark": "bar",
  "transform": [{"flatten": ["foo", "baz"]}],
  "encoding": {
    "x": {"field": "foo", "type": "quantitative"},
    "y": {"field": "foo", "type": "quantitative", "aggregate": "count"}
  },
  "layer": [{
    "mark": "bar",
    "encoding": {
      "y": {"field": "baz", "type": "quantitative", "aggregate": "count"}
    }
  }]
}

https://vega.github.io/editor/#/url/vega-lite/N4IgJghgLhIFygG4QDYFcCmBneoBmA9gfANoAMANJZQIwV10BMFzjAuhSAEYQBep1KvWFMWLNgF8JnALYQATgGt43BSE5R5EAHZZC8maXwpoUDNtIhCxTj36SOIcwGMCYAJbaA5rhAAPXzx3DBQwFWt1ECgATwAHDBUARzQdKHcYNMQE6RBowODQ8KJImPiklO00jPcsyIgvL3kML2gEuBBXNEqQKU4TaIx5IxA5JRUeIc4XN08fBFz8kLD2uxK4tpBk1PToGoTOesbm1pVO7qkJSSA

检查data_0时,foo和它的计数都有列,而baz则没有。

这也不起作用:

代码语言:javascript
复制
{
  "data": {
    "values": {
      "foo": [0, 0, 0, 1, 1, 1, 2, 2, 2],
      "baz": [0, 0, 0, 1, 1, 1, 2, 2, 2]
    }
  },
  "mark": "bar",
  "transform": [{"flatten": ["foo"]},{"flatten": ["baz"]}],
  "encoding": {
    "x": {"field": "foo", "type": "quantitative"},
    "y": {"field": "foo", "type": "quantitative", "aggregate": "count"}
  },
  "layer": [
    {
      "mark": "bar",
      "encoding": {
        "y": {"field": "baz", "type": "quantitative", "aggregate": "count"}
      }
    }
  ]
}

https://vega.github.io/editor/#/url/vega-lite/N4IgJghgLhIFygG4QDYFcCmBneoBmA9gfANoAMANJZQIwV10BMFzjAuhSAEYQBep1KvWFMWLNgF8JnALYQATgGt43BSE5R5EAHZZC8maXwpoUDNtIhCxSRWOnzlnv0kcQ5gMYEwAS20BzXBAADyC8HwwUMBVrdRAoAE8ABwwVAEc0HSgfGGzEVOkQBLCIqJiiOMSU9MztbNyffLiIf395DH9oVLgQLzQ6kClOEwSMeSMQOSUVHnHOT28-QIQiksjonudK5O6QDKyc6EbUzha2jq6VPoGpCUkgA

这仍然只给出了foo及其计数的列,但是现在每个桶的计数是27!

如何实现从数组数据开始的多直方图图形?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-06 23:44:11

您可以使用一个平坦变换和一个褶皱变换来完成这个任务,然后使用颜色编码来分离这两个数据集。例如(开放编辑器):

代码语言:javascript
复制
{
  "data": {
    "values": {
      "foo": [0, 0, 1, 1, 1, 1, 2, 2, 2],
      "baz": [4, 4, 5, 5, 6, 6, 6, 6, 7]
    }
  },
  "transform": [{"flatten": ["foo", "baz"]}, {"fold": ["foo", "baz"]}],
  "mark": "bar",
  "encoding": {
    "x": {"field": "value", "type": "quantitative"},
    "y": {
      "field": "value",
      "type": "quantitative",
      "aggregate": "count",
      "stack": null
    },
    "color": {"field": "key", "type": "nominal"}
  }
}

另外,如果将编码放在单独的层中,则层方法也可以工作,这样外部foo聚合不会破坏baz数据,但它比基于折叠的方法要详细一些

代码语言:javascript
复制
{
  "data": {
    "values": {
      "foo": [0, 0, 1, 1, 1, 1, 2, 2, 2],
      "baz": [4, 4, 5, 5, 6, 6, 6, 6, 7]
    }
  },
  "transform": [{"flatten": ["foo", "baz"]}],
  "layer": [
    {
      "mark": {"type": "bar", "color": "orange"},
      "encoding": {
        "x": {"field": "foo", "type": "quantitative"},
        "y": {"field": "foo", "type": "quantitative", "aggregate": "count"}
      }
    },
    {
      "mark": "bar",
      "encoding": {
        "x": {"field": "baz", "type": "quantitative"},
        "y": {"field": "baz", "type": "quantitative", "aggregate": "count"}
      }
    }
  ]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62764869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档