我正试图在Incanter图表中加入一个传奇,但我在得到我想要的东西时遇到了一些困难:
[] []作为my参数),然后在单独的步骤中添加数据点。但是,添加图例的唯一方法是在构造函数中给定初始x点之后指定:legend true。不能在没有x参数的情况下指定:legend true,而且我也没有找到任何add-legend函数。[][],它包括在获取点的数据时使用的函数调用,还包括名称损坏的匿名函数(fn*[p1__3813#](second p1__3813#)),它对我的图表的用户来说是非通信的。这是我目前的代码;
(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 ...)调用指定一个图例字符串?
非常感谢
迈克尔
发布于 2012-02-25 22:39:10
每个索引图也是一个JFreeChart对象。因此您可以使用任何JFreeChart方法来操作Incanter图表。
例如,要删除图例,您可以(.removeLegend勒克斯-比-绘图)。还有一个addLegend方法。我自己也没试过。希望这能有所帮助。
发布于 2016-09-24 18:13:08
若要将好的名称与一系列的点或行相关联,请在将数据添加到图表的命令中使用关键字: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参数。但是,如果事先不知道数据集的数量,那么以编程方式生成散点图可能会更加困难,因为您必须以不同于其他数据集的方式对待第一个数据集。
另一个解决办法是:
(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)的颜色透明。否则,您将在图例中为此数据集创建一个红色点。在图例中,您将有一个小的空空间,红色点和空字符串属于那里,但这比在那里看到一个红色点更容易混淆。
https://stackoverflow.com/questions/9419682
复制相似问题