Vega 没有从 python `time.time()` 中正确读取时间戳

Vega does not correctly read timestamps from python `time.time()`

我有以下织女星图表:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {
    "name": "data",
    "values": [
      {
        "action_hidden_size": 128,
        "async_envs": true,
        "charts_path": "charts/sweep",
        "entropy_coef": 0.01,
        "env": "BreakoutNoFrameskip-v0",
        "episode length": 168.8265306122449,
        "episode return": 1.0714285714285714,
        "epsilon": 0.0001,
        "fps": 427.7912197785782,
        "gamma": 0.99,
        "gpt": "1558M",
        "gradient norm": 0.04117301106452942,
        "jit": true,
        "lambda_": 1,
        "learning_rate": 0.0009,
        "log_interval": 100,
        "log_level": "INFO",
        "logger": "hasura",
        "loss": -0.028508108109235764,
        "num_envs": 16,
        "num_steps": 5,
        "resnet": false,
        "rnn": false,
        "run ID": 1459,
        "seed": 0,
        "step": 64000,
        "subcommand": "sweep",
        "sweep_id": 19,
        "time": 1625243790.698869,
        "training_steps": -1
      },
      {
        "action_hidden_size": 64,
        "async_envs": true,
        "charts_path": "charts/sweep",
        "entropy_coef": 0.01,
        "env": "BreakoutNoFrameskip-v0",
        "episode length": 178.2111111111111,
        "episode return": 1.288888888888889,
        "epsilon": 0.00001,
        "fps": 437.3014892700601,
        "gamma": 0.99,
        "gpt": "1558M",
        "gradient norm": 0.0920964702963829,
        "jit": true,
        "lambda_": 1,
        "learning_rate": 0.0005,
        "log_interval": 100,
        "log_level": "INFO",
        "logger": "hasura",
        "loss": 0.008676287718117237,
        "num_envs": 16,
        "num_steps": 10,
        "resnet": false,
        "rnn": false,
        "run ID": 1456,
        "seed": 0,
        "step": 64000,
        "subcommand": "sweep",
        "sweep_id": 23,
        "time": 1625243788.6341043,
        "training_steps": -1
      },
      {
        "action_hidden_size": 64,
        "async_envs": true,
        "charts_path": "charts/sweep",
        "entropy_coef": 0.01,
        "env": "BreakoutNoFrameskip-v0",
        "episode length": 178.75581395348837,
        "episode return": 1.430232558139535,
        "epsilon": 0.00001,
        "fps": 462.03207466360925,
        "gamma": 0.99,
        "gpt": "1558M",
        "gradient norm": 0.041478127241134644,
        "jit": true,
        "lambda_": 1,
        "learning_rate": 0.0005,
        "log_interval": 100,
        "log_level": "INFO",
        "logger": "hasura",
        "loss": 0.0075914873741567135,
        "num_envs": 16,
        "num_steps": 10,
        "resnet": false,
        "rnn": false,
        "run ID": 1452,
        "seed": 0,
        "step": 64000,
        "subcommand": "sweep",
        "sweep_id": 23,
        "time": 1625243776.3521159,
        "training_steps": -1
      },
      {
        "action_hidden_size": 128,
        "async_envs": true,
        "charts_path": "charts/sweep",
        "entropy_coef": 0.01,
        "env": "BreakoutNoFrameskip-v0",
        "episode length": 161.39583333333334,
        "episode return": 0.9166666666666666,
        "epsilon": 0.0001,
        "fps": 271.2519726477831,
        "gamma": 0.99,
        "gpt": "1558M",
        "gradient norm": 0.0941310003399849,
        "jit": true,
        "lambda_": 1,
        "learning_rate": 0.0009,
        "log_interval": 100,
        "log_level": "INFO",
        "logger": "hasura",
        "loss": -0.025099074468016624,
        "num_envs": 16,
        "num_steps": 5,
        "resnet": false,
        "rnn": false,
        "run ID": 1455,
        "seed": 0,
        "step": 32000,
        "subcommand": "sweep",
        "sweep_id": 19,
        "time": 1625243760.262077,
        "training_steps": -1
      },
      {
        "action_hidden_size": 128,
        "async_envs": true,
        "charts_path": "charts/sweep",
        "entropy_coef": 0.01,
        "env": "BreakoutNoFrameskip-v0",
        "episode length": 156.8181818181818,
        "episode return": 0.8863636363636364,
        "epsilon": 0.0001,
        "fps": 279.50948832177323,
        "gamma": 0.99,
        "gpt": "1558M",
        "gradient norm": 0.06209081411361694,
        "jit": true,
        "lambda_": 1,
        "learning_rate": 0.0009,
        "log_interval": 100,
        "log_level": "INFO",
        "logger": "hasura",
        "loss": -0.02385426126420498,
        "num_envs": 16,
        "num_steps": 5,
        "resnet": false,
        "rnn": false,
        "run ID": 1459,
        "seed": 0,
        "step": 32000,
        "subcommand": "sweep",
        "sweep_id": 19,
        "time": 1625243755.579455,
        "training_steps": -1
      }
    ]
  },
  "encoding": {
    "x": {
      "type": "temporal",
      "field": "time"
    },
    "y": {
      "type": "quantitative",
      "field": "episode return"
    },
    "color": {
      "type": "nominal",
      "field": "run ID"
    }
  },
  "height": 400,
  "mark": "line",
  "width": 600
}

这是 link 给 vega 编辑器的这张图表。

如您所见,时间戳似乎没有正确呈现。 “时间”字段派生自 python 的 time.time() 方法。我应该使用不同的格式吗?

根据 documentation,vega 应该接受“时间”字段的“时间戳编号(例如,1552199579097)”。

我还查看了 this issue,这似乎表明这应该适用于最新的 Vega,尽管根据那个问题,我不确定我是否需要一个类似于 [=18] 的字段=]

    "format": {
      "parse": {
        "date": "number"
      }
    }

谢谢。

Python 的 time.time() returns 自零纪元以来 seconds 中的时间戳。

Javascript 时间戳预计在 milliseconds 自零纪元以来。

因此,要在 vega-lite 图表中正确使用 Python 时间戳,您必须将它们乘以 10^6:

  "transform": [
    {"calculate": "1000000 * datum.time", "as": "time"}
  ],