如何在JFreeChart折线图中添加标签值和错误栏?

朱利安

我正在使用JFreeChart创建折线图,这些折线图可以作为图像导出并嵌入到自动生成的文档中。例如,一个简单的折线图如下所示:

简单线图

我用来显示值的代码是:

LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
chart.getCategoryPlot().setRenderer(renderer);
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", NumberFormat.getNumberInstance()));
renderer.setBaseItemLabelsVisible(true);

我还想添加误差线以显示每个点的标准偏差,这可以通过使用StatisticsLineAndShapeRenderer(当然还要将误差值添加到数据集)来完成,因此上面的杂项现在变为:

StatisticalLineAndShapeRenderer renderer = new StatisticalLineAndShapeRenderer(true, false);
chart.getCategoryPlot().setRenderer(renderer);
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", NumberFormat.getNumberInstance()));
renderer.setBaseItemLabelsVisible(true);

使用此代码,将生成带有错误条的图表,但标签消失了。从这张图片可以看出:

带误差线的线图

我试图找到一个同时包含错误栏和标签的在线示例,但我没有这样做。为什么使用Statistical Renderer时标签消失了,这有什么办法吗?

编辑:添加了最小和自包含的示例。

DefaultStatisticalCategoryDataset dataset = new DefaultStatisticalCategoryDataset();
dataset.add(1, 0.1, "serie", "A");
dataset.add(2, 0.4, "serie", "B");
dataset.add(2, 0.2, "serie", "C");

JFreeChart chart = ChartFactory.createLineChart("Chart", null, null, dataset, PlotOrientation.VERTICAL, false, true, true);
LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
chart.getCategoryPlot().setRenderer(renderer);
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", NumberFormat.getNumberInstance()));
renderer.setBaseItemLabelsVisible(true);

JFreeChart chartErrorBars = ChartFactory.createLineChart("ErrorBars", null, null, dataset, PlotOrientation.VERTICAL, false, true, true);
StatisticalLineAndShapeRenderer statisticalRenderer = new StatisticalLineAndShapeRenderer(true, false);
chartErrorBars.getCategoryPlot().setRenderer(statisticalRenderer);
statisticalRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", NumberFormat.getNumberInstance()));
statisticalRenderer.setBaseItemLabelsVisible(true);

int width = 1500;
int height = 400;

try {
    FileOutputStream fos = new FileOutputStream(new File("chart.png"));
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ChartUtilities.writeChartAsPNG(baos, chart, width, height);
    baos.writeTo(fos);
    baos.close();
    fos.close();

    fos = new FileOutputStream(new File("chartErrorBars.png"));
    baos = new ByteArrayOutputStream();
    ChartUtilities.writeChartAsPNG(baos, chartErrorBars, width, height);
    baos.writeTo(fos);
    baos.close();
    fos.close();

} catch (IOException e) {
    e.printStackTrace();
}

以及由该代码生成的两个图像。

带有值的简单示例 带有错误条的简单示例

垃圾神

StatisticalLineAndShapeRenderer当父LineAndShapeRenderer方法getItemShapeVisible()返回时显示标签true在下面的示例中,我避开了图表工厂,并使用了StatisticalLineAndShapeRenderer同时启用形状和线条的显式构造函数。

StatisticalLineAndShapeRenderer renderer
        = new StatisticalLineAndShapeRenderer(true, true);

有什么具体的原因可以避免ChartFactory吗?

尽管重新使用ChartFactory它是方便的,但让人想起在烤面包点鸡,握住鸡,再烤面包更重要的是,被丢弃 LineAndShapeRenderer的内容带有请求的工具提示和URL生成器,这可能使将来的维护者感到困惑。

有什么方法可以使形状保持禁用状态吗?

如您所建议,空Shape是有效的,例如

renderer.setSeriesShape(0, new Rectangle2D.Double(0, 0, 0, 0));

图像

import java.awt.Dimension;
import java.awt.EventQueue;
import java.text.NumberFormat;
import javax.swing.JFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.StatisticalLineAndShapeRenderer;
import org.jfree.data.statistics.DefaultStatisticalCategoryDataset;

/**
 * @see https://stackoverflow.com/a/38080778/230513
 */
public class Test {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        DefaultStatisticalCategoryDataset dataset
            = new DefaultStatisticalCategoryDataset();
        dataset.add(1, 0.1, "series", "A");
        dataset.add(2, 0.4, "series", "B");
        dataset.add(2, 0.2, "series", "C");

        CategoryAxis domain = new CategoryAxis();
        ValueAxis range = new NumberAxis();
        StatisticalLineAndShapeRenderer renderer
            = new StatisticalLineAndShapeRenderer(true, true);
        CategoryPlot plot = new CategoryPlot(dataset, domain, range, renderer);
        JFreeChart chart = new JFreeChart(
            "ErrorBars", JFreeChart.DEFAULT_TITLE_FONT, plot, false);
        renderer.setBaseItemLabelGenerator(
            new StandardCategoryItemLabelGenerator("{2}",
                NumberFormat.getNumberInstance()));
        renderer.setBaseItemLabelsVisible(true);
        renderer.setSeriesShape(0, new Rectangle2D.Double(0, 0, 0, 0));
        new StandardChartTheme("JFree").apply(chart);
        f.add(new ChartPanel(chart) {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(600, 300);
            }
        });

        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Test()::display);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在JFreeChart折线图中添加标签值和错误栏?

来自分类Dev

如何在高线图折线图的末尾添加标签

来自分类Dev

如何在D3折线图中添加交互式功能(折线和标签)?

来自分类Dev

如何在Shield UI JavaScript折线图中添加自定义标签

来自分类Dev

如何在JFree折线图中添加注释

来自分类Dev

如何在 Google 折线图中添加最小和最大阈值线

来自分类Dev

[SOLVED] ApexCharts.js:如何在折线图中为轴标签设置固定值

来自分类Dev

如何在折线图中的两个折线之间添加填充?

来自分类Dev

JFreeChart:如何在同一图表上绘制折线图和散点图

来自分类Dev

如何在折线图中仅显示24小时栏?

来自分类Dev

情节:如何在情节快速的折线图中更改图例的变量/标签名称?

来自分类Dev

如何在折线图中添加目标线-AChartEngine

来自分类Dev

如何在折线图中添加多种背景色

来自分类Dev

绘图:如何在绘图折线图中的特定点添加标记(python / pandas)

来自分类Dev

如何在R中的折线图中添加第二个x轴

来自分类Dev

如何在GD :: Graph :: linespoints折线图中添加垂直线?

来自分类Dev

如何在R ggplot折线图中添加背景阴影或主要刻度线?

来自分类Dev

如何在achartengine折线图中显示刷新Web服务值?

来自分类Dev

如何在Google折线图中以某个值停止绘制系列

来自分类Dev

如何在achartengine折线图中显示刷新Web服务值?

来自分类Dev

如何在简单的谷歌折线图中为不同的值范围使用不同的颜色?

来自分类Dev

如何在JavaFX折线图中删除图例

来自分类Dev

如何在谷歌折线图中制作虚线

来自分类Dev

如何在Google api折线图中禁用x轴和y轴线

来自分类Dev

如何在同一图表视图中创建散点图和折线图?

来自分类Dev

如何在双Y轴图中的ggvis中对齐条形图和折线图?

来自分类Dev

如何在双Y轴图中的ggvis中对齐条形图和折线图?

来自分类Dev

如何在我的 d3 折线图中获得线条和区域的样式?

来自分类Dev

jqplot折线图中的错误

Related 相关文章

  1. 1

    如何在JFreeChart折线图中添加标签值和错误栏?

  2. 2

    如何在高线图折线图的末尾添加标签

  3. 3

    如何在D3折线图中添加交互式功能(折线和标签)?

  4. 4

    如何在Shield UI JavaScript折线图中添加自定义标签

  5. 5

    如何在JFree折线图中添加注释

  6. 6

    如何在 Google 折线图中添加最小和最大阈值线

  7. 7

    [SOLVED] ApexCharts.js:如何在折线图中为轴标签设置固定值

  8. 8

    如何在折线图中的两个折线之间添加填充?

  9. 9

    JFreeChart:如何在同一图表上绘制折线图和散点图

  10. 10

    如何在折线图中仅显示24小时栏?

  11. 11

    情节:如何在情节快速的折线图中更改图例的变量/标签名称?

  12. 12

    如何在折线图中添加目标线-AChartEngine

  13. 13

    如何在折线图中添加多种背景色

  14. 14

    绘图:如何在绘图折线图中的特定点添加标记(python / pandas)

  15. 15

    如何在R中的折线图中添加第二个x轴

  16. 16

    如何在GD :: Graph :: linespoints折线图中添加垂直线?

  17. 17

    如何在R ggplot折线图中添加背景阴影或主要刻度线?

  18. 18

    如何在achartengine折线图中显示刷新Web服务值?

  19. 19

    如何在Google折线图中以某个值停止绘制系列

  20. 20

    如何在achartengine折线图中显示刷新Web服务值?

  21. 21

    如何在简单的谷歌折线图中为不同的值范围使用不同的颜色?

  22. 22

    如何在JavaFX折线图中删除图例

  23. 23

    如何在谷歌折线图中制作虚线

  24. 24

    如何在Google api折线图中禁用x轴和y轴线

  25. 25

    如何在同一图表视图中创建散点图和折线图?

  26. 26

    如何在双Y轴图中的ggvis中对齐条形图和折线图?

  27. 27

    如何在双Y轴图中的ggvis中对齐条形图和折线图?

  28. 28

    如何在我的 d3 折线图中获得线条和区域的样式?

  29. 29

    jqplot折线图中的错误

热门标签

归档