Scala-Chart直方图,每个bin有多个柱

时间:2013-10-19 16:37:06

标签: scala charts jfreechart

我需要在Scala中创建一个直方图,我需要在一个图表中创建两个系列,这个系列被分成5个分区。我找到了一个库scala-chart,它是jFreeChart的包装器。 我可以创建一个histrogram数据集添加两个系列,并使图表正常如下:

  val data:HistogramDataset = new HistogramDataset
  data.addSeries("Class 0",class0,5)
  data.addSeries("Class 1",class1,5)

  val chart = ChartFactories.XYBarChart(class1data)

然而,这两个栏只是重叠,所以我看不到太多的信息。有一个jFreeChart类似乎能够完成这项工作:ClusteredXYBarRenderer,但我如何使用它来绘制我的图表?


作为一个额外的问题,无论如何要让它以百分比显示不同的分布,而不是简单地将它们显示为每个分区中有多少个值?

理想情况下,我正在寻找这样的最终产品:enter image description here

1 个答案:

答案 0 :(得分:2)

你看一下at this example。它使用DefaultCategoryDataset,其中categories = bin。您可以将scala-chart的toCategoryDataset用于Tuple3 (count, series, bin)。但是正确地订购数据有点复杂。我发现在许多情况下,使用默认的Java API而不是scala-chart的to...方法构建数据集确实更容易。

import scalax.chart._

val ds = new org.jfree.data.category.DefaultCategoryDataset
ds.addValue(5, "Class A", "Bin 1")
ds.addValue(7, "Class A", "Bin 2")
ds.addValue(8, "Class B", "Bin 1")
ds.addValue(3, "Class B", "Bin 2")

val chart = ChartFactories.BarChart(ds)
chart.show()

enter image description here

要使用百分比,最简单的方法是提供已转换为百分比的值。否则,您需要更改轴刻度标签渲染器。