11

如何以编程方式从 java 生成饼图?我有一些由程序处理的数据,然后我想创建一个具有饼图的图像文件(PNG、GIF 等)。有没有一个图书馆可以做到这一点,或者至少我可以用它来做到这一点?

或者,使用将在 JFrame 中绘制饼图然后以某种方式自动截屏的库会更好吗?

4

3 回答 3

8

您可以使用XChart库,这是一个非常轻量且直接的 Java 图表库。以下代码将创建一个饼图。您还可以右键单击图表并保存为不同的位图类型,包括 PNG、JPG、BMP、SVG、EPS 和 PDF。免责声明,我是 XChart 库的主要开发者。

public class PieChartDemo {

  public static void main(String[] args) throws IOException {

    // Create Chart
    PieChart chart = new PieChartBuilder().width(800).height(600).title("My Pie Chart").theme(ChartTheme.GGPlot2).build();

    // Customize Chart
    chart.getStyler().setLegendVisible(false);
    chart.getStyler().setAnnotationType(AnnotationType.LabelAndPercentage);
    chart.getStyler().setAnnotationDistance(1.15);
    chart.getStyler().setPlotContentSize(.7);
    chart.getStyler().setStartAngleInDegrees(90);

    // Series
    chart.addSeries("Prague", 2);
    chart.addSeries("Dresden", 4);
    chart.addSeries("Munich", 34);
    chart.addSeries("Hamburg", 22);
    chart.addSeries("Berlin", 29);

    // Show it
    new SwingWrapper(chart).displayChart();

    // Save it
    BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.PNG);

    // or save it in high-res
    BitmapEncoder.saveBitmapWithDPI(chart, "./Sample_Chart_300_DPI", BitmapFormat.PNG, 300);
  }

}

在此处输入图像描述

于 2016-06-13T22:52:51.097 回答
6

JFreeChart可以生成饼图可以将生成的图表保存为 JPEG 格式。这是一个如何执行此操作的示例。这是一个3D 示例

开发人员指南中提供了更多示例和文档。

其他生成饼图的图表库:

于 2012-12-01T19:48:22.907 回答
4

这是一个很好的,不需要使用任何第三方库

==============================

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

import javax.swing.JComponent;
import javax.swing.JFrame;

class Slice {
   double value;
   Color color;
   public Slice(double value, Color color) {  
      this.value = value;
      this.color = color;
   }
}
class PieChart3 extends JComponent {
   Slice[] slices = { new Slice(5, Color.black), 
   new Slice(33, Color.green),
   new Slice(20, Color.yellow), new Slice(15, Color.red) };
   PieChart3() {}
   public void paint(Graphics g) {
      drawPie((Graphics2D) g, getBounds(), slices);
   }
   void drawPie(Graphics2D g, Rectangle area, Slice[] slices) {
      double total = 0.0D;
      for (int i = 0; i < slices.length; i++) {
         total += slices[i].value;
      }
      double curValue = 0.0D;
      int startAngle = 0;
      for (int i = 0; i < slices.length; i++) {
         startAngle = (int) (curValue * 360 / total);
         int arcAngle = (int) (slices[i].value * 360 / total);
         g.setColor(slices[i].color);
         g.fillArc(area.x, area.y, area.width, area.height, 
         startAngle, arcAngle);
         curValue += slices[i].value;
      }
   }
于 2013-06-25T20:25:17.797 回答