【问题标题】:Skip Category axis labels in a JFree Bar Chart在 JFree 条形图中跳过类别轴标签
【发布时间】:2013-12-20 12:15:47
【问题描述】:

我有一个条形图,其中包含一个名为“Brutto”的“系列”(用 jfree 的说法)和许多类别;自 2008 年以来每个月一个。我将月份标签轮换为 UP-90,但它们都被挤在一起并且难以阅读,所以我想跳过其中一些(例如每隔一个或每隔一个,但它没有'只要它简洁易读并且最好是动态的以供将来添加,就没有关系)。

我正在使用 JfreeChart 1.0.16,当我在 SourceForge 上看到 Ray Lukas 的补丁以及 jfree 论坛上的相关帖子时,我以为我已经找到了答案:http://www.jfree.org/phpBB2/viewtopic.php?f=3&t=15345&start=15

不幸的是,这个补丁/类似乎不适用于 1.0.16;我已经尝试了演示代码并针对我的用例调整了演示,虽然它没有抛出任何错误,但它似乎对我的图表也没有任何作用。从 SourceForge 看来,该补丁最后一次更新是在 2012 年。

有什么方法可以跳过 1.0.16 或 1.0.17 中的类别标签吗?如果没有,是否有解决方法或方法来更新 Ray 的补丁以与 1.0.16 一起使用?

我已经为 JFree 开发指南和演示源付费,但在那里没有看到任何有用的东西 - 如果我错过了其中的任何内容,请告诉我。

更新

要玩代码,您可以使用 Ray 的演示代码,其数据集与我的更相似:

public class CategoryLabelDemo extends ApplicationFrame {

/**
 * Creates a new demo instance.
 *
 * @param title  the frame title.
 */
public CategoryLabelDemo(String title) {
    super(title);
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(-0.0023, value, Jun 2008);
dataset.addValue(-0.0039089907, value, Jul 2008);
dataset.addValue(-0.0035218354, value, Aug 2008);
dataset.addValue(-0.0092901141, value, Sep 2008);
dataset.addValue(-0.0245642646, value, Okt 2008);
dataset.addValue(-0.0032392894, value, Nov 2008);
dataset.addValue(0.0024111542, value, Dez 2008);
dataset.addValue(0.0062748379, value, Jan 2009);
dataset.addValue(0.0107046352, value, Feb 2009);
dataset.addValue(-0.0101799486, value, Mrz 2009);
dataset.addValue(6.233119E-4, value, Apr 2009);
dataset.addValue(0.0117317276, value, Mai 2009);
dataset.addValue(0.0069779374, value, Jun 2009);
dataset.addValue(0.0132477326, value, Jul 2009);
dataset.addValue(0.0062355426, value, Aug 2009);
dataset.addValue(0.0181909045, value, Sep 2009);
dataset.addValue(0.0049082164, value, Okt 2009);
dataset.addValue(0.0186578099, value, Nov 2009);
dataset.addValue(0.0059455313, value, Dez 2009);
dataset.addValue(8.5796E-4, value, Jan 2010);
dataset.addValue(0.0048576055, value, Feb 2010);
dataset.addValue(0.0230331754, value, Mrz 2010);
dataset.addValue(0.0128787177, value, Apr 2010);
dataset.addValue(-0.0101536773, value, Mai 2010);
dataset.addValue(0.0017558451, value, Jun 2010);
dataset.addValue(-0.0010147601, value, Jul 2010);
dataset.addValue(0.0093268076, value, Aug 2010);
dataset.addValue(0.0082342177, value, Sep 2010);
dataset.addValue(0.0078039927, value, Okt 2010);
dataset.addValue(7.203314E-4, value, Nov 2010);
dataset.addValue(0.0071081519, value, Dez 2010);
dataset.addValue(-0.0108996694, value, Jan 2011);
dataset.addValue(0.0059615211, value, Feb 2011);
dataset.addValue(-0.0045793302, value, Mrz 2011);
dataset.addValue(0.0128991521, value, Apr 2011);
dataset.addValue(0.0040074806, value, Mai 2011);
dataset.addValue(-0.0117083555, value, Jun 2011);
dataset.addValue(0.0096033028, value, Jul 2011);
dataset.addValue(-0.0115565828, value, Aug 2011);
dataset.addValue(-0.0178972929, value, Sep 2011);
dataset.addValue(0.0091575092, value, Okt 2011);
dataset.addValue(-0.0153357532, value, Nov 2011);
dataset.addValue(0.0110588886, value, Dez 2011);
dataset.addValue(0.0148573512, value, Jan 2012);
dataset.addValue(0.0104185378, value, Feb 2012);
dataset.addValue(-0.0038222222, value, Mrz 2012);
dataset.addValue(0.0026768984, value, Apr 2012);
dataset.addValue(-0.006763371, value, Mai 2012);
dataset.addValue(8.063794E-4, value, Jun 2012);
dataset.addValue(0.0189794091, value, Jul 2012);
dataset.addValue(7.028642E-4, value, Aug 2012);
dataset.addValue(0.0049165935, value, Sep 2012);
dataset.addValue(-0.0038441377, value, Okt 2012);
dataset.addValue(0.0055253464, value, Nov 2012);
dataset.addValue(-0.0018316616, value, Dez 2012);
dataset.addValue(0.0015728766, value, Jan 2013);
dataset.addValue(0.0035770372, value, Feb 2013);
dataset.addValue(0.0103451274, value, Mrz 2013);
dataset.addValue(-7.743934E-4, value, Apr 2013);
dataset.addValue(0.0051666236, value, Mai 2013);
dataset.addValue(-0.0231303007, value, Jun 2013);
dataset.addValue(0.0109620275, value, Jul 2013);
dataset.addValue(-0.0020818876, value, Aug 2013);
dataset.addValue(0.0067802503, value, Sep 2013);
dataset.addValue(0.0087204283, value, Okt 2013);
dataset.addValue(0.0053924506, value, Nov 2013);
dataset.addValue(-0.0103865146, value, Dez 2013);
    JFreeChart chart = createChart(dataset);
    ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));

    setContentPane(chartPanel);

}

/**
 * Creates a chart.
 * 
 * @param dataset  the dataset.
 * 
 * @return A chart.
 */
private static JFreeChart createChart(CategoryDataset dataset) {

    JFreeChart chart = null;
    try {
        BarRenderer barRenderer = new BarRenderer();
        CategoryAxis customCategoryAxis = new CategoryAxisSkipLabels();  // new CategoryAxis("Category");
        ((CategoryAxisSkipLabels)customCategoryAxis).setTickMarksVisible(true);
        ((CategoryAxisSkipLabels)customCategoryAxis).setDisplaySkippedTickMarks(true);
        // ****************** set Layout Type and AlgorithmType
        ((CategoryAxisSkipLabels)customCategoryAxis).setAlgorithmType(CategoryAxisSkipLabels.N_STEP_ALGO);
        // this must be the last call to category axis as it may return CategoryAxis instead of CategoryAxisSkipLabels          
        //customCategoryAxis = ((CategoryAxisSkipLabels)customCategoryAxis).setTruncate(true);

            customCategoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
        NumberAxis numberAxis = new NumberAxis("Value");
        CategoryPlot categoryPlot = new CategoryPlot(
            dataset, customCategoryAxis, numberAxis, barRenderer
        );
        chart = new JFreeChart("Bar Chart", categoryPlot);
    } catch (Exception e) {
        System.out.print("crash");
    }
    // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

    // set the background color for the chart...
    chart.setBackgroundPaint(Color.white);

    // get a reference to the plot for further customisation...
    CategoryPlot plot = (CategoryPlot) chart.getPlot();
    plot.setBackgroundPaint(Color.lightGray);
    plot.setRangeGridlinePaint(Color.white);
    plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
    // change the auto tick unit selection to integer units only...
    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    LegendTitle legend = (LegendTitle) chart.getLegend();
    legend.setPosition(RectangleEdge.BOTTOM);
    legend.setHorizontalAlignment(HorizontalAlignment.LEFT);
    legend.setBorder(new BlockBorder(Color.white));
    legend.setBackgroundPaint(Color.white);

    BarRenderer renderer = (BarRenderer) plot.getRenderer();
    renderer.setDrawBarOutline(false);
    renderer.setLegendItemToolTipGenerator(new StandardCategorySeriesLabelGenerator("Tooltip: {0}"));
    // OPTIONAL CUSTOMISATION COMPLETED.

    return chart;

}


/**
 * Starting point for the demonstration application.
 *
 * @param args  ignored.
 */
public static void main(String[] args) {

    CategoryLabelDemo demo = new CategoryLabelDemo("Bar Chart Demo 2");
    demo.pack();
    RefineryUtilities.centerFrameOnScreen(demo);
    demo.setVisible(true);

}
public static void run(String title) throws Exception {
    CategoryLabelDemo demo = new CategoryLabelDemo(title);
    demo.pack();
    RefineryUtilities.centerFrameOnScreen(demo);
    demo.setVisible(true);    
}

}

【问题讨论】:

  • 请将您的代码发布为SSCCE,以证明您的问题。这允许用户复制/粘贴和重现您的问题。
  • 我不确定这是否相关,因为我也在使用补丁作者提供的演示代码,但没有结果,但我会看看是否能给你一些有用的东西
  • 也许您可以将代码合并到您的问题中?也许是一个几乎可以说明您的问题的最小版本?
  • 好的,我已经添加了一些来自 Ray 的补丁演示的示例代码以及更类似于我自己的数据集
  • 你想隐藏类别轴标签是吗?意味着你只需要图表而不是类别轴标签吗??

标签: java label jfreechart categories bar-chart


【解决方案1】:

我在这里给你一个代码尝试一次,它可能会起作用,并且会给你想要的东西。

例子:

final JFreeChart chart = ChartFactory.createStackedBarChart("", "", "",
                dataset, PlotOrientation.VERTICAL, true, true, false);

 CategoryPlot plot = chart.getCategoryPlot();
 plot.getDomainAxis(1).setVisible(false);

试试它会删除类别轴标签。

【讨论】:

  • 这在 StackedBarchart 中效果很好,如果您有其他图表格式,请告诉我。
  • 我想要做的是删除 一些 标签而不是 all 标签。不过还是谢谢。
  • 但是没有指定。你可以删除特定的轴标签,但你可以删除特定轴的标签。我在上面给了你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多