【问题标题】:Gridlines above chart in JFreeChartJFreeChart 中图表上方的网格线
【发布时间】:2013-05-20 09:51:28
【问题描述】:

是否可以检索 BarChart 的所有 rangeAxis 值?我已经设法像这样绘制新的 GridLines(Markers):

但我需要知道值轴中的图表需要哪些值才能绘制所有线条。任何想法如何获得“价值”轴上的所有价值?(RangeAxis)

public class BarChartDemo extends ApplicationFrame {

    /**
     * Creates a new demo instance.
     *
     * @param title  the frame title.
     */
    public BarChartDemo(final String title) {
        super(title);
        final CategoryDataset dataset = createDataset();
        final JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(500, 270));
        setContentPane(chartPanel);
    }

    /**
     * Returns a sample dataset.
     * 
     * @return The dataset.
     */
    private CategoryDataset createDataset() {

        // row keys...
        final String series1 = "First";

        // column keys...
        final String category1 = "Category 1";
        final String category2 = "Category 2";
        final String category3 = "Category 3";

        // create the dataset...
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(3.5, series1, category1);
        dataset.addValue(4.0, series1, category2);
        dataset.addValue(3.0, series1, category3);
        return dataset;
    }

    /**
     * Creates a sample chart.
     * 
     * @param dataset  the dataset.
     * 
     * @return The chart.
     */
    private JFreeChart createChart(final CategoryDataset dataset) {

        // create the chart...
        final JFreeChart chart = ChartFactory.createBarChart(
            "Bar Chart Demo",         // chart title
            "Category",               // domain axis label
            "Value",                  // range axis label
            dataset,                  // data
            PlotOrientation.VERTICAL, // orientation
            false,                     // include legend
            false,                     // tooltips?
            false                     // URLs?
        );
        CategoryPlot plot = chart.getCategoryPlot();
        plot.getDomainAxis().setCategoryMargin(.01);

        plot.setRangeGridlinesVisible(false);
        for(int i=1; i<=4; i++){
            Marker marker = new ValueMarker(i);
            marker.setStroke(new BasicStroke(
                    1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                    1.0f, new float[] {3.0f, 8.0f}, 0.0f
                ));
            marker.setPaint(new Color(224,224,224));
            plot.addRangeMarker(marker);
        }

        return chart;
    }

    public static void main(final String[] args) {
        final BarChartDemo demo = new BarChartDemo("Bar Chart Demo");
        demo.pack();
        demo.setVisible(true);
    }
}

【问题讨论】:

  • 您是否尝试过启用跟踪,显示为here
  • 试过了,但它似乎基于“ChartPanel”,它似乎是一个JPanel。但是我想用iText直接把它画成pdf。
  • 请编辑您的问题以澄清此用法并包含一个sscce,以显示您尝试过的Marker;有关示例,请参见演示。
  • 啊,我在想你可以使用addRangeMarker()setDrawAsLine,类似于this 域示例。你可以看看CategoryPlot@draw() 是如何调用draw*Gridlines 的。
  • 谢谢!现在设法用addRangeMarker() 画线。为问题的其余部分编辑问题。

标签: java jfreechart bar-chart


【解决方案1】:

您似乎能够以类似于此域example 的方式利用addRangeMarker()。匹配标记和刻度单位的一种方法是指定一个包含您选择的标记的TickUnitSource

NumberAxis range = (NumberAxis) plot.getRangeAxis();
range.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

如果您需要自定义源,可以在 createIntegerTickUnits()createStandardTickUnits() 上建模。

【讨论】:

    【解决方案2】:

    没有设法理解如何以“好”的方式做到这一点。制作了一个步骤方法来知道将当前图表最大值的线条放在哪里:

    private static double getGridStep(double max){
            double step = 0;
            if(max > 86){
                step = 10;
            }
            else if(max >= 30){
                step = 5;
            }
            else if(max > 17){
                step = 2.5;
            }
            else if(max > 7){
                step = 1;
            }
            else if(max > 2){
                step = 0.5;
            }
            else if(max > 1){
                step = 0.25;
            }
            else
                step = 0.1;
            return step;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多