Charts 如何在白炽灯图表中操作图例

Charts 如何在白炽灯图表中操作图例,charts,clojure,legend,incanter,Charts,Clojure,Legend,Incanter,我试图在白炽灯图表中加入一个图例,但在获得我想要的东西时遇到了一些问题: 我想先实例化一个没有数据的图表(使用[[[]作为我的x y参数),然后在单独的步骤中添加数据点。但是,添加图例的唯一方法是在构造函数中给出初始x y点后指定:图例true。无法在没有x-y参数的情况下指定:legend true,并且我没有找到任何添加legend函数 图例选项捕获添加图表数据时使用的代码,这意味着如果我不想在图例中出现难看的代码,我必须为X点和Y点创建一个好看的变量,而不仅仅是在直线上调用函数 因此,创建

我试图在白炽灯图表中加入一个图例,但在获得我想要的东西时遇到了一些问题:

  • 我想先实例化一个没有数据的图表(使用
    [[[]
    作为我的x y参数),然后在单独的步骤中添加数据点。但是,添加图例的唯一方法是在构造函数中给出初始x y点后指定
    :图例true
    。无法在没有x-y参数的情况下指定
    :legend true
    ,并且我没有找到任何
    添加legend
    函数

  • 图例选项捕获添加图表数据时使用的代码,这意味着如果我不想在图例中出现难看的代码,我必须为X点和Y点创建一个好看的变量,而不仅仅是在直线上调用函数

  • 因此,创建的图例包含创建空白图时使用的<代码> [][COD]/>代码,它包括在获取数据点时使用的函数调用,它包括被命名的匿名函数<代码>(FN*[P1*Y38,1313](第二P11338 13))< /代码>,它与我的图表的消费者不沟通。< /P>
  • 我只想能够将一个字符串与图例中的每组点相关联,比如在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)))
    
    因此,在白炽灯图中是否有任何方法可以指定每个
    (添加行…
    (添加点…
    调用)的图例字符串

    非常感谢


    Michael

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


    例如,要删除图例,可以执行以下操作(.removeLegend lux ratio plot)。还有一种方法。我自己还没试过。希望这有帮助。

    要将好的名称与一系列点或线相关联,请在将数据添加到图表的命令中使用关键字
    :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")
    
    这并没有解决您问题中的另一个问题:为了创建带有图例的裸散点图,您必须将空数据传递给
    散点图
    ,即,将
    x
    y
    作为上面的空序列,因为白炽灯不允许您在不将数据传递到散点图的情况下指定
    :图例
    。如果
    x
    y
    为空(例如,它们为
    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)的颜色透明。否则,图例中该数据集将有一个红点。在图例中,红点和空字符串所属的位置将有一个小的空白,但这比在那里看到红点更容易混淆