我试图将一个传奇包含在一个Incanter图表中,但是我遇到了一些麻烦:
我希望能够首先实例化没有数据的图表(使用[] []
作为我的x y参数),然后在单独的步骤中添加数据点。但是,添加图例的唯一方法是在构造函数中给出初始x y点后指定:legend true
。没有x y参数,不能指定:legend true
,我没有找到任何add-legend
函数。
图例选项捕获我在添加图表数据时使用的代码,这意味着如果我不希望丑陋的代码出现在图例中,我必须为X和Y点创建漂亮的vars而不是仅仅调用函数。
因此,创建的图例包括创建空白图时使用的[][]
,它包括获取点数据时使用的函数调用,它包含名称错位的匿名函数{ {1}}这与我图表的消费者无法沟通。
我只是希望能够将字符串与图例中的每组点相关联,例如matlab,excel等。
这是我目前的代码;
(fn*[p1__3813#](second p1__3813#))
因此,在Incanter图表中是否有任何方法可以指定每个(def lux-ratios-plot
(doto (scatter-plot [] [] :legend true
:title "Lux/CH0 vs. CH1/CH0"
:x-label "CH1/CH0"
:y-label "Lux/CH0")
(view)))
(doseq [dut [incs hals cfls leds]]
(add-points lux-ratios-plot (get-vals :CH1/CH0 dut) (get-vals :Lux/CH0 dut) :points true))
; Show the trend line for each bulb
(doseq [fit [inc-fit hal-fit cfl-fit led-fit]]
(add-lines lux-ratios-plot (map #(second %) (:x fit)) (:fitted fit)))
或(add-lines ...)
来电的图例字符串?
非常感谢
迈克尔
答案 0 :(得分:2)
每个Incanter图表也是JFreeChart对象。因此,您可以使用任何JFreeChart方法来操纵您的Incanter图表。
例如,删除你可以做的图例(.removeLegend lux-ratios-plot)。还有addLegend方法。我自己没试过那个。希望这会有所帮助。
答案 1 :(得分:0)
要将好名称与一系列点或行相关联,请在将该数据添加到图表的命令中使用关键字:series-label
。例如:
(def c (scatter plot x y :legend true))
(add-lines c x1 y1 :series-label "Primary")
(add-lines c x2 y2 :series-label "Secondary")
这并不能解决您问题中的其他问题:要创建包含图例的裸散点图,您必须将空数据传递到scatter-plot
,即使用x
并且y
作为上面的空序列,因为Incanter不允许您指定:legend
而不将数据传递给scatter-plot
。如果x
和y
为空(例如,它们为nil
),则空数据也会显示为图例元素。我不相信这个问题可以直接克服(版本1.5.7)。
一种解决方案是在散点图调用中传递实际数据以及:series-label
参数。但是,当数据集的数量事先未知时,这可能会使以编程方式生成散点图更加尴尬,因为您必须以不同于其他数据集的方式处理第一个数据集。
另一个,kludgey解决方案就是:
(def chart (scatter-plot nil nil :legend true :series-label ""))
(set-stroke-color chart (java.awt.Color. 0 0 0 0) :dataset 0)
使用空字符串作为:series-label
的值意味着第一个空数据集的图例中的标签将不会显示。 set-stroke-color
调用使空数据集(即数据集0)的颜色透明。否则,您的图例中的此数据集会有一个红点。在红色圆点和空白字符串所属的图例中你会有一个小的空白区域,但这比在那里看到一个红点更不容易。