【问题标题】:How do I use JFreeChart auto ranges properly?如何正确使用 JFreeChart 自动范围?
【发布时间】:2015-02-24 12:26:50
【问题描述】:

我在创建的图表上手动为 y 轴创建了一个范围,但看到有一些属性表明 JFreeChart 可以为您生成它们。

它已经为 y 轴生成了一个合理的最大值,但无论我尝试做什么,在生成图表时我都无法真正考虑到 setAutoRangeIncludesZero(boolean)

以下是生成和操作图表的相关代码:

barChart = ChartFactory.createBarChart("Classifiers' accuracy for " + position + "s", 
           "Missing Value Imputation Method Combination", 
           "Average accuracy (%)", dataset, 
           PlotOrientation.VERTICAL, true, false, false);

plot = (CategoryPlot)barChart.getCategoryPlot();
xAxis = (CategoryAxis)plot.getDomainAxis();
xAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);

yAxis = (NumberAxis)plot.getRangeAxis();
yAxis.setAutoRangeIncludesZero(false);

barChartImage = new File(position + "-Classification" + ".png");

我也尝试过首先将 y 轴设为 ValueAxis,使用 setAutoRange(true),然后将 y 轴转换为 NumberAxis 并使用 setAutoRangeIncludesZero(false)

每次,y 轴仍然从 0 开始。

【问题讨论】:

  • 你有什么值,轴的范围是多少?
  • 我的值在 48 到 74 之间,目前 y 轴是 0-78
  • 检查以下值(例如打印它们):plot.getDataRange (yAxis)yAxis.getRangeType ()yAxis.getAutoRangeIncludesZero ()yAxis.getFixedAutoRange ()yAxis.getAutoRangeMinimumSize ()yAxis.getAutoRangeStickyZero ()
  • plot.getRange(yAxis) = 0.0 和 70.45(不知道为什么从 0 开始,数据集中没有一个数据是 0)yAxis.getRangeType() = RangeType.FULL yAxis.getAutoRangeIncludesZero() = false @987654337 @ = 0.0 yAxis.getAutoRangeMinimumSize() = 1.0E-8 yAxis.getAutoRangeStickyZero() = 真
  • 好吧,如果绘图范围返回零作为下限,难怪轴在其自动范围中包含零。您是否绝对确定数据集中实际上没有零值(可能以某种方式“隐藏”)?

标签: java jfreechart bar-chart


【解决方案1】:

感谢@doublep 在私聊中的回答。

我使用的是条形图,结果默认BarRenderer 将范围的基数设置为 0。 要覆盖这一点,您只需从绘图对象中获取渲染器并将其转换为类型 BarRenderer,然后调用 setIncludeBaseInRange(false),这将阻止默认值 0 包含在范围内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2014-04-22
    • 2018-02-10
    相关资源
    最近更新 更多