Python Vincent-将单个对象数组传递给数据

Python Vincent-将单个对象数组传递给数据,python,vega,Python,Vega,我正在尝试创建一个数据数组,其格式与中找到的格式类似 然而,我还没有弄明白怎么做。使用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]:

我正在尝试创建一个数据数组,其格式与中找到的格式类似

然而,我还没有弄明白怎么做。使用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}}
  ]
}
有人知道如何使用Vincent生成上述格式吗?如果我想要具有三个键/值对的对象,例如:

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

非常感谢你的帮助

当与
文森特
一起工作时,走
熊猫
路线是值得的

[1]中的
:导入熊猫
在[2]中:coor={'x':['A','B','C'],'y':[28,55,43]}
[3]中:df=pandas.DataFrame(coor)
In[4]:df
出[4]:
xy
0 A 28
1 B 55
2 C 43
[3行x 2列]
在[5]中:导入
In[6]:bar=vincent.bar(df)
在[7]中:打印条到_json()
{
“轴”:[
{
“比例”:“x”,
“类型”:“x”
},
{
“比例”:“y”,
“类型”:“y”
}
],
“数据”:[
{
“名称”:“表格”,
“价值观”:[
{
“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
}
]
},
{
“名称”:“统计数据”,
“来源”:“表格”,
“转变”:[
{
“钥匙”:[
“data.idx”
],
“类型”:“方面”
},
{
“类型”:“统计数据”,
“值”:“data.val”
}
]
}
],
“高度”:500,
“图例”:[],
“标记”:[
{
“发件人”:{
“数据”:“表格”,
“转变”:[
{
“钥匙”:[
“data.col”
],
“类型”:“方面”
},
{
“高度”:“data.val”,
“点”:“data.idx”,
“类型”:“堆栈”
}
]
},
“标记”:[
{
“财产”:{
“输入”:{
“填充”:{
“字段”:“data.col”,
“比例”:“颜色”
},
“宽度”:{
“乐队”:没错,
“抵销”:-1,
“比例”:“x”
},
“x”:{
“字段”:“data.idx”,
“比例”:“x”
},
“y”:{
“字段”:“y”,
“比例”:“y”
},
“y2”:{
“字段”:“y2”,
“比例”:“y”
}
}
},
“类型”:“rect”
}
],
“类型”:“组”
}
],
“填充”:“自动”,
“天平”:[
{
“域”:{
“数据”:“表格”,
“字段”:“data.idx”
},
“名称”:“x”,
“范围”:“宽度”,
“类型”:“序号”,
“零”:错误
},
{
“域”:{
“数据”:“统计数据”,
“字段”:“总和”
},
“名称”:“y”,
“好”:真的,
“范围”:“高度”
},
{
“域”:{
“数据”:“表格”,
“字段”:“data.col”
},
“名称”:“颜色”,
“范围”:“类别20”,
“类型”:“序号”
}
],
“宽度”:960
}
然后,添加更多列变得非常简单:

df["z"] = [1, 2, 3]

好吧,你要么去掉“z”键,因为它看起来在织女星中没有3d图形。但是我可能没有深入研究。你说你没有想到如何构建一个数据数组,比如示例。。。但你没有展示你真正尝试过的东西。你能给我们一些代码吗?嗨@zmo。谢谢你的建议。我更新了这个问题,包括了我迄今为止的一些尝试。还值得一提的是,有很多原因可以解释为什么我希望每个点有三个或更多的值。例如,气泡图有三个轴,但只有两个维度。我可能还希望包括额外的信息,如标签。有了这些更新的信息,您有什么建议吗?如果您计划或正在使用,那么这将变得非常简单。谢谢您的提示,@midnight。我当然相信你,但我不确定我知道你要干什么。你愿意详细说明一下吗?看起来Vincent有一个to_pandas()方法,但我正在努力让它工作。(我几乎没用过pandas。)一些示例代码会非常有用(也许是我可以接受的答案?)。非常感谢你的帮助!感谢您提供示例代码@midnight。生成的JSON在中似乎不太起作用,但我确实看到了如何创建数据。然而,这仍然不太匹配。请注意,在本教程中,可以像“data.x”和“data.y”一样引用数据。Vincent代码生成的格式不允许这种引用。是否有任何方法可以生成格式化的数据,以便使用Vincent通过字段名引用?再次感谢你的例子!我的错误是,具有多列的数据帧是使用条形图的错误示例。我会努力调整它。但是,请注意,引用确实发生在变换和缩放中。例如,我看到您可以引用“data.idx”和“data.val”,但不能引用“data.x”。我是不是错过了一些明显的东西?说真的,谢谢你花时间来帮助我…你到底想引用他们什么?您可以用vincent表达几乎所有内容,它将为您输出正确的JSON。你想仅仅为了跟随教程而引用
data.x
,还是有更深层次的原因?老实说,这是我第一次使用Vega或Vincent。我先去
df["z"] = [1, 2, 3]