不同数据范围的charts.js工具提示

时间:2018-06-08 14:46:59

标签: angularjs charts chart.js momentjs

我使用的是chart.js(使用angular-charts指令),我面临着不同数据集sizez的问题。我必须在折线图中显示时间轴中的一些值。所以我的数据结构如下:

datasets : [
  [ {"x" : date1, "y" : 2 }, {"x" : date1, "y" : 5 } ..], //first dataset
  [ {"x" : date2, "y" : 3 }, {"x" : date4, "y" : 7 } ..] //second one
]; 

其中date1,date2,.. date4是时刻日期,y是随机值。 现在,如果第一个数据集具有相同数量的第二个数据集的值,则一切正常。但是如果我有不同的数据集大小(例如,第一个具有昨天的值,今天是今天和明天的第二个)那么传奇工具提示是完全错误的。它总是显示每个系列的NTH值,即使它们处于不同的日期。用文字解释有点困难,英语不是我的语言。我在这里留下自我解释的截图:

enter image description here

我该如何避免这种行为?

1 个答案:

答案 0 :(得分:0)

为了防止对其他开发人员有所帮助,我设法解决了规范化数据的问题。 I.E.我改变了我的数据:

def createWsObservable(url: String, onStartAction: WebSocket ⇒ Option[KillSwitch] = _ ⇒ None, bufferSize: Int = 32): Source[WsMessage, KillSwitch] = {
  val actorSource = Source.actorRef[WsMessage](bufferSize, OverflowStrategy.fail)
  actorSource.mapMaterializedValue { actor ⇒
    val listener: WebSocketListener = new WebSocketListener() {

      override def onOpen(ws: WebSocket): Unit =
        actor ! ...

      override def onClose(ws: WebSocket, code: Int, reason: String): Unit =
        actor ! akka.actor.Status.Success(code)

      override def onBinaryFrame(payload: Array[Byte], finalFragment: Boolean, rsv: Int): Unit =
        actor ! ...

      override def onTextFrame(payload: String, finalFragment: Boolean, rsv: Int): Unit =
        actor ! ...

      override def onError(t: Throwable): Unit =
        actor ! akka.actor.Status.Failure(t)
    }

    val websocket =
      asyncHttpClient
        .prepareGet(url)
        .execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(listener).build).get

    // Use Pong reply as indication that we've connected to the server
    val p = Promise[Void]()
    websocket.sendPingFrame().addListener(p)
    val onStartKillSwitchFut = p.future.map(_ ⇒ onStartAction(websocket))

    new KillSwitch {
      override def shutdown(): Unit = {
        onStartKillSwitchFut.map(_.foreach(_.shutdown()))
        websocket.sendCloseFrame()
      }

      override def abort(ex: Throwable): Unit = {
        onStartKillSwitchFut.map(_.foreach(_.abort(ex)))
        websocket.sendCloseFrame()
      }
    }
  }
}

到:

[ 
  [{"x" : date1, "y" : valueA }, {"x" : date2, "y" : valueB }, {"x" : date3, "y" : valueC }],
  [{"x" : date3, "y" : valueD }, {"x" : date4, "y" : valueE }]
]

因此,每个数据集包含相同数量的元组,即从第一个数据集和第二个数据集合并日期并删除重复项的结果。