2017-04-01 62 views
3

我遇到了一個螢石問題,圖表展示了一個'擺動線',當這條線應該是直線的,並且日期間隔不等。Vegalite每日折線圖擺動

任何人都可以驗證這是一個錯誤,或者我在我的規範中犯了錯誤嗎? enter image description here

我發現當你增加數據點的數量時,這個問題會變得更加嚴重。

複製此問題,粘貼下面的規格爲vega lite editor

{ 
    "description": "", 
    "data": { 
    "values": [ 
     { 
     "date": "2017-01-23", 
     "value": 100 
     }, 
     { 
     "date": "2017-01-24", 
     "value": 200 
     }, 
     { 
     "date": "2017-01-25", 
     "value": 300 
     }, 
     { 
     "date": "2017-01-26", 
     "value": 400 
     }, 
     { 
     "date": "2017-01-27", 
     "value": 500 
     }, 
     { 
     "date": "2017-01-28", 
     "value": 600 
     }, 
     { 
     "date": "2017-01-29", 
     "value": 700 
     }, 
     { 
     "date": "2017-01-30", 
     "value": 800 
     }, 
     { 
     "date": "2017-01-31", 
     "value": 900 
     }, 
     { 
     "date": "2017-02-01", 
     "value": 1000 
     }, 
     { 
     "date": "2017-02-02", 
     "value": 1100 
     }, 
     { 
     "date": "2017-02-03", 
     "value": 1200 
     }, 
     { 
     "date": "2017-02-04", 
     "value": 1300 
     }, 
     { 
     "date": "2017-02-05", 
     "value": 1400 
     }, 
     { 
     "date": "2017-02-06", 
     "value": 1500 
     }, 
     { 
     "date": "2017-02-07", 
     "value": 1600 
     } 
    ] 
    }, 
    "mark": "line", 
    "encoding": { 
    "x": { 
     "field": "date", 
     "type": "temporal" 
    }, 
    "y": { 
     "field": "value" 
    } 
    }, 
    "config": [], 
    "embed": { 
    "renderer": "canvas", 
    "actions": { 
     "export": false, 
     "source": false, 
     "editor": false 
    } 
    } 
} 

編輯:跟進 - 在牛郎星實驗,好像這個日期方面是無關緊要的。您同時與下面的代碼塊得到了同樣的問題:

import pandas as pd 
import numpy as np 
from altair import * 

s1 = pd.date_range(start="2017-01-23", end="2020-02-07") 
s2 = np.arange(1,len(s1)+1)*100 
df = pd.DataFrame({"date":s1, "value":s2}) 

Chart(df).mark_line(
).encode(
    x='date', 
    y='value' 
) 

import pandas as pd 
import numpy as np 
from altair import * 

s1 = np.arange(1,1000,1) 
s2 = np.arange(1,len(s1)+1)*100 
df = pd.DataFrame({"x":s1, "value":s2}) 

Chart(df).mark_line(
).encode(
    x='x', 
    y='value' 
) 

相反下面產生流暢的情節(熊貓和matplotlib):

%matplotlib inline 
df.plot('date', 'value') 

回答

2

的擺動是由於在計算與數據值相關的像素座標期間由舍入誤差的影響引起的。

查看由vega-lite產生的vega代碼,可以看到定義的scale"round": true條目。此更改爲false解決了我的屏幕上的問題,並使vega-lite做到這一點,也可以通過添加:

"config": {"scale": {"round" : false}}, 

,而不是在vega-lite規範的

"config": [], 

線。

+2

非常感謝!如果有人使用Altair並且看到了這個,你可以使用'Chart(df).configure_scale( round = False)' – RobinL

+0

將這個傳遞給Vega ...並且在R'vegalite'包中你必須手動添加它, vl < - vegalite :: vegalite()'等,一旦創建了'vl'列表,你可以執行'vl $ x $ config $ scale $ round < - FALSE' – RobinL

+0

這看起來像一個bug,我們會修復這個在Vega-Lite中(我是Vega-Lite團隊成員)。 – kanitw