我需要在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,但我如何使用它来绘制我的图表?
作为一个额外的问题,无论如何要让它以百分比显示不同的分布,而不是简单地将它们显示为每个分区中有多少个值?
理想情况下,我正在寻找这样的最终产品:
答案 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()
要使用百分比,最简单的方法是提供已转换为百分比的值。否则,您需要更改轴刻度标签渲染器。