我是Vega-Lite的新手,我试图在折线图中显示一些数据,但是我相信“ Harvest_Year”数据(该日期是前几年的日期:2017、2018)正在显示为字符串。
我是从.csv文件中通过数据导入的,以下是将字符串更改为日期格式的步骤。我很累:
"Harvest_Year": "year"
但是那没有用,因为它使我所有的值都为空。所以我想首先将其转换为整数,然后将其转换为年份。但是在Vega-Lite中,我的所有年份都正确地显示在表格中,但是当我在折线图上显示它时,我只能看到1970(我确定我没有在数据集中),并且只显示该年份。
在下面的图像中,您可以看到我的数据中包含所有年份:
{
"$schema": "https://vega.github.io/schema/vega-lite/v4.json",
"data": {
"url": "https://raw.githubusercontent.com/DanStein91/Info-vis/master/CoffeeRobN.csv",
"format": {
"type": "csv",
"parse": {
"Number_of_Bags": "number",
"Bag_weight": "number",
"Harvest_Year": "number"
}
}
},
"transform": [
{
"timeUnit": "year",
"field": "Harvest_Year",
"as": "Year"
},
{
"calculate": "datum.Number_of_Bags * datum.Bag_Weight ",
"as": "Total_Export"
}
],
"width": 300,
"height": 200,
"mark": "line",
"encoding": {
"y": {
"field": "Total_Export",
"type": "quantitative"
},
"x": {
"field": "Harvest_Year",
"type": "temporal"
}
},
"config": {}
}
欢迎任何帮助,谢谢。
答案 0 :(得分:0)
当您告诉vega-lite将数字解释为日期时,它会将它们视为unix时间戳,即1970年1月1日之后的毫秒数。您得到的每个日期都在1970年,这将导致您看到图表。 / p>
您的日期似乎采用非标准格式(例如"2017.0"
表示2017年),因此您必须使用vega expressions手动将其解析为日期对象。这是一个示例(view in editor):
{
"data": {
"url": "https://raw.githubusercontent.com/DanStein91/Info-vis/master/CoffeeRobN.csv",
"format": {
"type": "csv",
"parse": {
"Number_of_Bags": "number",
"Bag_weight": "number",
"Harvest_Year": "number"
}
}
},
"transform": [
{"filter": "isValid(datum.Harvest_Year)"},
{"calculate": "datetime(datum.Harvest_Year, 1)", "as": "Harvest_Year"},
{
"calculate": "datum.Number_of_Bags * datum.Bag_Weight ",
"as": "Total_Export"
}
],
"mark": "point",
"encoding": {
"y": {"field": "Total_Export", "type": "quantitative"},
"x": {"field": "Harvest_Year", "type": "ordinal", "timeUnit": "year"}
},
"width": 300,
"height": 200
}
另一种选择是完全避免使用datetime
和timeUnit
逻辑(因为您的数据实际上不包含任何日期),而直接在编码中使用年份数字即可;例如
{
"data": {
"url": "https://raw.githubusercontent.com/DanStein91/Info-vis/master/CoffeeRobN.csv",
"format": {
"type": "csv",
"parse": {
"Number_of_Bags": "number",
"Bag_weight": "number",
"Harvest_Year": "number"
}
}
},
"transform": [
{"filter": "isValid(datum.Harvest_Year)"},
{
"calculate": "datum.Number_of_Bags * datum.Bag_Weight ",
"as": "Total_Export"
}
],
"mark": "point",
"encoding": {
"y": {"field": "Total_Export", "type": "quantitative"},
"x": {"field": "Harvest_Year", "type": "ordinal"}
},
"width": 300,
"height": 200
}