【问题标题】:JFreeChart Histogram with constant number of bins while zoomingJFreeChart 直方图在缩放时具有恒定数量的 bin
【发布时间】:2012-05-24 03:49:15
【问题描述】:

我想制作一个 JFreeChart 直方图,在放大和缩小时保持恒定数量的 bin。例如,也许缩小后您可以看到 12 年,并且每年会有 1 个 bin。当您再放大一点时,您可能会看到 12 个月,并且每个月都会有一个 bin。进一步放大可能每天、每小时等都有 1 个 bin。它们不必是这么干净的 bin 大小,但你明白了。

我正在使用HistogramDataset.addSeries 将我的数据添加到直方图中。 bins 参数是整个集合的 bin 数量,不考虑缩放。

我发现我可以使用 ChartPanel 并覆盖其 zoom 方法。在这里,我可能会改变垃圾箱的数量。但是,我很难弄清楚在哪里可以更改垃圾箱的数量以及应该将其更改为什么。

编辑:

我对这个问题的几个部分感兴趣,我认为这些部分对解决方案至关重要:

  1. 如何最好地告诉用户已缩放。我目前的方法是覆盖zoom
  2. 如何确定用户缩放到的范围。我仍然不确定如何执行此操作。
  3. 如何更改数据模型中的 bin 数量,以便缩放保持相同数量的显示 bin。

在某些情况下,我的最终目标是创建一个 Google 财务样式控件: Google Finance style control for Java?

【问题讨论】:

    标签: java user-interface charts jfreechart histogram


    【解决方案1】:

    回答我上面的个别问题:

    1. 我继续覆盖 ChartPanel 类的缩放。
    2. 为了确定用户缩放到的范围,我使用了下面的windowToRatioratioToModel 函数,因为缩放函数被赋予了窗口坐标。
    3. 为了更改 bin 的数量,我实际上保持 bin 的数量相同,只是更改了传递到图表中的数据集。我为我的数据模型使用了SortedMap,我可以轻松地从中获取 subMap。

    功能:

    private double windowToRatio(double window) {
        Rectangle2D scaledDataArea = getScreenDataArea();
        return (window - scaledDataArea.getMinX()) / scaledDataArea.getWidth();
    }
    
    private double ratioToModel(double ratio) {
        Range domainRange = getChart().getXYPlot().getDomainAxis().getRange();
        return domainRange.getLowerBound() + ratio * domainRange.getLength();
    }
    

    【讨论】:

      【解决方案2】:

      重载缩放功能很吸引人,但可能会令人困惑。作为替代方案,请考虑添加一个更新数据模型的控件,如example 所示。 enum 的实例特别便于填充JComboBox,如here 所示。

      【讨论】:

      • 我不确定我是否完全理解您在这里的建议。我可以添加另一个控件,但如果我不需要,我不想添加。当用户只能做 1 件事(缩放)时,为什么还要让他们做 2 件事(缩放和更改组合框)?假设我要显示一个直方图,其中包含 2001 年到 2011 年的数据,其中包含 10 个 bin,然后用户放大 2003 年 4 月到 2003 年 6 月。生成的数据集将仅显示 1 个 bin(如果有)。我想把它分解成 10 个 new 箱。我不确定这些示例中的任何一个如何帮助我处理该缩放案例并解决问题。也许我错过了什么。
      • 不,你的理解是正确的;这些示例仅与我建议的替代方案相关。无论哪种情况,您都需要更新模型,无论该更新是由组合还是缩放手势控制。我会先开发底层功能,然后先使用更简单的方法公开它。
      猜你喜欢
      • 1970-01-01
      • 2019-06-28
      • 2018-09-22
      • 1970-01-01
      • 2023-04-03
      • 2019-10-21
      • 1970-01-01
      • 2017-10-24
      • 2022-08-12
      相关资源
      最近更新 更多