如何使用Incanter获得标准化的放样条形图?

时间:2016-12-02 20:55:31

标签: clojure jfreechart incanter

按照这个例子,

(use '(incanter core stats charts datasets))

(with-data  (get-dataset :airline-passengers)
  (view (stacked-bar-chart :month :passengers :group-by :year :legend true)))

如何使每个全局条形图等于100%,允许堆叠元素之间进行完全相对比较?

现在我得到这样的东西: http://phloxblog.in/angulard3/images/Nor-Stackbar.jpg

我怎样才能实现这一目标? enter image description here

1 个答案:

答案 0 :(得分:1)

我找到了答案。

(use '(incanter core stats charts datasets))

(import
   '[org.jfree.chart ChartFactory ChartUtilities JFreeChart StandardChartTheme]
   '[org.jfree.chart.plot CategoryPlot]
   '[org.jfree.chart.renderer.category CategoryItemRenderer StackedBarRenderer])

(with-data  (get-dataset :airline-passengers)
  (view 
   (let [chart (stacked-bar-chart :month :passengers :group-by :year :legend true)
         plot (-> chart .getCategoryPlot)
         renderer (-> plot .getRenderer)
         _ (.setRenderAsPercentages renderer true)] 
     chart)))

在: enter image description here

在: enter image description here

如果你想获得百分比的轴,你可以做

(use '(incanter core stats charts datasets))

(import
   '[org.jfree.chart ChartFactory ChartUtilities JFreeChart StandardChartTheme]
   '[org.jfree.chart.axis NumberAxis]
   '[org.jfree.chart.labels StandardCategoryItemLabelGenerator ItemLabelPosition ItemLabelAnchor]
   '[org.jfree.chart.plot CategoryPlot]
   '[org.jfree.chart.renderer.category StackedBarRenderer]
   '[java.text DecimalFormat])

(with-data (get-dataset :airline-passengers)
  (view 
   (let [chart (stacked-bar-chart :month :passengers :group-by :year :legend true)
         plot (-> chart .getCategoryPlot)
         range-axis (-> plot .getRangeAxis)
         percent-format (DecimalFormat. "#%") ;;"#.0%"
         _ (.setNumberFormatOverride range-axis percent-format)
         renderer (-> plot .getRenderer) 
         _ (.setRenderAsPercentages renderer true)] 
     chart)))