Javaから円グラフをプログラムで生成するにはどうすればよいですか? プログラムによって処理されるデータがあり、円グラフを含む画像ファイル (PNG、GIF など) を作成したいと考えています。これを行うライブラリ、または少なくともこれを行うために使用できるライブラリはありますか?
あるいは、JFrame で円グラフを描画し、何らかの方法でそれらを自動的にスクリーンショットするライブラリを使用する方がよいでしょうか?
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);
}
}
JFreeChartは円グラフを生成し、結果のグラフをJPEG形式で保存できます。これを行う方法の例を次に示します。これが3Dの例です。
開発者ガイドには、さらに多くの例とドキュメントがあります。
ピエチャートを生成する他のチャートライブラリ:
これは良いものです。サードパーティのライブラリを使用する必要はありません
=============================
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;
}
}