0

我正在尝试在Vincent中创建一个数据数组,其格式类似于Vega 教程中的格式。

...
"data": [
  {
    "name": "table",
    "values": [
      {"x":"A", "y":28}, {"x":"B", "y":55}, {"x":"C", "y":43},
      {"x":"D", "y":91}, {"x":"E", "y":81}, {"x":"F", "y":53},
      {"x":"G", "y":19}, {"x":"H", "y":87}, {"x":"I", "y":52}
    ]
  }
],
...

但是,我还没有弄清楚该怎么做。使用 Data.from_iter() 和 Data.from_mult_iter() 要求数据具有明确的索引和列名。我认为 data.keypairs() 看起来很有希望,但这也产生了截然不同的格式。

到目前为止,这里有一些尝试:

In [1]: coor = {'x': ['A', 'B', 'C'], 'y': [28, 55, 43]}
In [2]: data = Data.keypairs(coor)
In [3]: print data.to_json()
{
  "name": "table",
  "values": [
    { "x": "x", "y": ["A","B","C"]},
    { "x": "y", "y": [28,55,43]}
  ]
}

In [4]: data = Data.from_iter(coor)
In [5]: print data.to_json()
{
  "name": "table", 
  "values": [
    {"col": "data", "idx": "x", "val": ["A", "B", "C"]}, 
    {"col": "data", "idx": "y", "val": [28, 55, 43]}
  ]
}

In [5]: coor = [{'x':'A', 'y':28}, {'x':'B', 'y':55}, {'x':'C', 'y':43}]
In [6]: data = Data.keypairs(coor)
In [7]: print data.to_json()
{
  "name": "table", 
  "values": [
    {"x": 0, "y": {"x": "A", "y": 28}}, 
    {"x": 1, "y": {"x": "B", "y": 55}},
    {"x": 2, "y": {"x": "C", "y": 43}}
  ]
}
In [8]: data = Data.from_iter(coor)
In [9]: print data.to_json()
{
  "name": "table", 
  "values": [
    {"col": "data", "idx": 0, "val": {"x": "A", "y": 28}}, 
    {"col": "data", "idx": 1, "val": {"x": "B", "y": 55}}, 
    {"col": "data", "idx": 2, "val": {"x": "C", "y": 43}}
  ]
}

有谁知道如何使用文森特生成上述格式?如果我想要具有三个键/值对的对象,例如:

...
"data": [
  {
    "name": "table",
    "values": [
      {"x":"A", "y":28, "z":34}, {"x":"B", "y":55, "z":21}, ...
    ]
  }
],
...

非常感谢你的帮助!

4

1 回答 1

0

与. pandas_vincent

In [1]: import pandas

In [2]: coor = {'x': ['A', 'B', 'C'], 'y': [28, 55, 43]}

In [3]: df = pandas.DataFrame(coor)

In [4]: df
Out[4]: 
   x   y
0  A  28
1  B  55
2  C  43

[3 rows x 2 columns]

In [5]: import vincent

In [6]: bar = vincent.Bar(df)

In [7]: print bar.to_json()

{
  "axes": [
    {
      "scale": "x",
      "type": "x"
    },
    {
      "scale": "y",
      "type": "y"
    }
  ],
  "data": [
    {
      "name": "table",
      "values": [
        {
          "col": "x",
          "idx": 0,
          "val": "A"
        },
        {
          "col": "y",
          "idx": 0,
          "val": 28
        },
        {
          "col": "x",
          "idx": 1,
          "val": "B"
        },
        {
          "col": "y",
          "idx": 1,
          "val": 55
        },
        {
          "col": "x",
          "idx": 2,
          "val": "C"
        },
        {
          "col": "y",
          "idx": 2,
          "val": 43
        }
      ]
    },
    {
      "name": "stats",
      "source": "table",
      "transform": [
        {
          "keys": [
            "data.idx"
          ],
          "type": "facet"
        },
        {
          "type": "stats",
          "value": "data.val"
        }
      ]
    }
  ],
  "height": 500,
  "legends": [],
  "marks": [
    {
      "from": {
        "data": "table",
        "transform": [
          {
            "keys": [
              "data.col"
            ],
            "type": "facet"
          },
          {
            "height": "data.val",
            "point": "data.idx",
            "type": "stack"
          }
        ]
      },
      "marks": [
        {
          "properties": {
            "enter": {
              "fill": {
                "field": "data.col",
                "scale": "color"
              },
              "width": {
                "band": true,
                "offset": -1,
                "scale": "x"
              },
              "x": {
                "field": "data.idx",
                "scale": "x"
              },
              "y": {
                "field": "y",
                "scale": "y"
              },
              "y2": {
                "field": "y2",
                "scale": "y"
              }
            }
          },
          "type": "rect"
        }
      ],
      "type": "group"
    }
  ],
  "padding": "auto",
  "scales": [
    {
      "domain": {
        "data": "table",
        "field": "data.idx"
      },
      "name": "x",
      "range": "width",
      "type": "ordinal",
      "zero": false
    },
    {
      "domain": {
        "data": "stats",
        "field": "sum"
      },
      "name": "y",
      "nice": true,
      "range": "height"
    },
    {
      "domain": {
        "data": "table",
        "field": "data.col"
      },
      "name": "color",
      "range": "category20",
      "type": "ordinal"
    }
  ],
  "width": 960
}

然后添加更多列变得如此简单:

df["z"] = [1, 2, 3]
于 2014-05-13T14:21:14.487 回答