Vegalite 日线图摆动
Vegalite daily line chart wobble
我 运行 遇到了 vegalite 的问题,图表显示 'wobbling line' 线条应该是直的,并且日期不是等距的。
任何人都可以验证这是一个错误,还是我的规范有误?
.
我发现当您增加数据点的数量时,这个问题会变得更加严重。
要重现此问题,请将以下规范粘贴到 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
}
}
}
编辑:跟进 - 在 Altair 中进行实验,似乎与日期方面无关。以下两个代码块都会遇到同样的问题:
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'
)
相反,以下生成了平滑的绘图(pandas 和 matplotlib):
%matplotlib inline
df.plot('date', 'value')
摆动是由计算与数据值相关的像素坐标时的舍入误差影响造成的。
查看 vega-lite
生成的 vega
代码,可以看到定义的 scale
的 "round": true
条目。将其更改为 false
解决了我屏幕上的问题,并使 vega-lite
做到这一点,也可以通过添加:
"config": {"scale": {"round" : false}},
而不是
"config": [],
vega-lite
规范中的行。
我 运行 遇到了 vegalite 的问题,图表显示 'wobbling line' 线条应该是直的,并且日期不是等距的。
任何人都可以验证这是一个错误,还是我的规范有误?
我发现当您增加数据点的数量时,这个问题会变得更加严重。
要重现此问题,请将以下规范粘贴到 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
}
}
}
编辑:跟进 - 在 Altair 中进行实验,似乎与日期方面无关。以下两个代码块都会遇到同样的问题:
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'
)
相反,以下生成了平滑的绘图(pandas 和 matplotlib):
%matplotlib inline
df.plot('date', 'value')
摆动是由计算与数据值相关的像素坐标时的舍入误差影响造成的。
查看 vega-lite
生成的 vega
代码,可以看到定义的 scale
的 "round": true
条目。将其更改为 false
解决了我屏幕上的问题,并使 vega-lite
做到这一点,也可以通过添加:
"config": {"scale": {"round" : false}},
而不是
"config": [],
vega-lite
规范中的行。