我正在尝试创建一个图表,在x轴上显示从星期一开始的星期几,在y轴上显示星期(即1月15日,1月22日等)
我无法让x轴始终显示7天。例如,如果我的数据仅有星期一的数据,我希望所有7天都出现在轴上。
这是我到目前为止所做的:
(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设置为scale(x)
,但我不确定我的所有语法对于D3中的ClojureScript是否正确或者我是否正在做它正确。有什么想法吗?
答案 0 :(得分:1)
找出答案。要使用clojurescript操作nvd3,您需要确保所有nvd3 "options"的格式如下:
(. 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]))
来实现。