首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NVD3和ClojureScript中设置图表的静态刻度

在NVD3和ClojureScript中设置图表的静态刻度
EN

Stack Overflow用户
提问于 2016-06-23 17:48:24
回答 1查看 139关注 0票数 1

我目前正在尝试创建一个图表,在x轴上显示从星期一开始的一周的天数,在y轴上显示周(即1月15日、1月22日等)。

我在制作x轴时遇到了麻烦,总是显示7天。例如,如果我的数据只有周一的一段数据,我希望所有7天都出现在轴上。

以下是我到目前为止所拥有的:

代码语言:javascript
复制
(defn bubble-chart [a] 
  (.addGraph js/nv (fn []
                     (let [chart          (.. js/nv -models scatterChart)
                           width          500
                           x              (doto (js/d3.time.scale.) (.domain #js [0 6]) (.range #js [0 width]))
                           formatWeekFunc (.. js/d3 -time (format "%b %d"))
                           week           ["Mon" "Tues" "Wed" "Thurs" "Fri" "Sat" "Sun"]]

                       (.. chart -xAxis 
                           (scale x)
                           (axisLabel "Day of the week") 
                           (ticks 7)
                           ;(tickSize 16 0)
                           (tickValues #js [0 1 2 3 4 5 6])
                           (tickFormat (fn [d] (nth week d))))


                       (. chart (yScale (js/d3.time.scale.utc.)))
                       (.. chart -yAxis 
                           (axisLabel "Week") 
                           (ticks (.. js/d3 -time -monday) 1)
                           (tickFormat (fn [d] (formatWeekFunc (js/Date. d)))))


                     (let [my-data @a]
                         (println (str "my-data " my-data))
                         (.. js/d3 (select "#testDiv svg")

                             (datum (clj->js my-data))
                             (call chart)))))))

我知道我应该像使用x一样使用xAxis,并将xAxis设置为scale(x),但我不确定是否所有语法在D3中的ClojureScript都是正确的,或者甚至是正确的。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-23 19:25:36

想出了答案。要使用clojurescript操作nvd3,您需要确保所有nvd3 “备选方案”的格式如下:

代码语言:javascript
复制
(. chart (forceX #js [0 1 2 3 4 5 6]))
(.. chart -xAxis 
    (axisLabel "Day of the week") 
    (tickValues (.range js/d3 0 6 1))
    (tickFormat (fn [d] (nth week d))))

;(. chart (yRange #js [chart.height 0]))
(. chart (yDomain #js [chart.height 0]))
(. chart (yScale (js/d3.time.scale.utc.)))

它们不能放在let[]中。

因此,要回答原来的问题,可以用(.chart (forceX #js [yourRange]))实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37998540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档