4

我正在尝试在 Incanter 图表中包含一个图例,但我在获得我想要的东西时遇到了一些麻烦:

  1. 我希望能够先实例化没有数据的图表([] []用作我的 xy 参数),然后在单独的步骤中添加数据点。然而,添加图例的唯一方法是:legend true在构造函数中给出初始 xy 点之后指定。没有 xy 参数就无法指定:legend true,而且我还没有找到任何add-legend函数。

  2. legend 选项捕获我在添加图表数据时使用的代码,这意味着如果我不希望丑陋的代码出现在图例中,我必须为 X 和 Y 点创建一个漂亮的变量,而不仅仅是调用功能一致。

  3. 因此,创建的图例包括[][]创建空白图时使用的图例,它包括获取点数据时使用的函数调用,它包括名称损坏的匿名函数(fn*[p1__3813#](second p1__3813#)),该函数与我的图表的消费者不可交流。

  4. 我只是希望能够将一个字符串与图例中的每一组点相关联,例如在 matlab、excel 等中。

这是我当前的代码;

(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)))

因此,在 Incanter 图中有什么方法可以为每个(add-lines ...)(add-points ...)调用指定一个图例字符串?

非常感谢

迈克尔

4

2 回答 2

2

每个 Incanter 图表也是一个 JFreeChart 对象。因此,您可以使用任何 JFreeChart 方法来操作您的 Incanter 图表。

例如,要删除您可以执行的图例 (.removeLegend lux-ratios-plot)。还有一个addLegend方法。自己没试过那个。希望这可以帮助。

于 2012-02-25T22:39:10.483 回答
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,即上面带有xy作为空序列,因为 Incanter 不允许您指定:legend不将数据传递给scatter-plot. 如果xy是空的(例如它们是nil),空数据也会作为元素显示在图例中。我不相信这个问题目前可以直接解决(版本 1.5.7)。

一种解决方案是在散点图调用中传递真实数据以及:series-label参数。但是,当数据集的数量事先未知时,这可能会使以编程方式生成散点图变得更加尴尬,因为您必须以不同于其他数据集的方式处理第一个数据集。

另一个笨拙的解决方案是:

(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)的颜色透明。否则,您的图例中会出现此数据集的红点。在红点和空字符串所属的图例中,您将有一个小的空白区域,但这比在那里看到一个红点更容易混淆。

于 2016-09-24T18:13:08.557 回答