ps:
createDataset()是重新初始化一个数据的集合。网上对饼图更多的(基本上都)是生成图片的方式,那当然可以每次将全部流程重新跑一次,不过似乎*****,可不可以针对饼图也刷新数据集?我觉得肯定能实现,只是文档较少,很多人都不知道,只能期盼高人了=====
createDataset()是重新初始化一个数据的集合。网上对饼图更多的(基本上都)是生成图片的方式,那当然可以每次将全部流程重新跑一次,不过似乎*****,可不可以针对饼图也刷新数据集?我觉得肯定能实现,只是文档较少,很多人都不知道,只能期盼高人了=====
这个重新获得数据集之后,他的图应该还是要重新绘制的吧,这个流程也一样要走一遍的吧~~~
JFreeChart chart3 = ChartFactory.createPieChart3D( "水果产量图", // 图表标题
dataset1, true, // 是否显示图例
false,
false
);PiePlot3D plot=(PiePlot3D)chart3.getPlot();
plot.setDataset(dataset2);
piechart对应的都有PiePlot3D 和PiePlot
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.PolarItemRenderer;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.urls.CategoryURLGenerator;
import org.jfree.chart.urls.StandardCategoryURLGenerator;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DatasetChangeEvent;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;public class TestRediantu {
public static void main(String[] args) throws IOException
{
DefaultPieDataset dataset1 = new DefaultPieDataset();
dataset1.setValue("苹果",100);
dataset1.setValue("梨子",200);
dataset1.setValue("葡萄",300);
dataset1.setValue("香蕉",400);
dataset1.setValue("荔枝",500); JFreeChart chart3 = ChartFactory.createPieChart3D( "水果产量图", // 图表标题
dataset1, true, // 是否显示图例
false,
false
);
FileOutputStream fos_jpg = null; try {
fos_jpg = new FileOutputStream("D:\\fruit.jpg");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ChartUtilities.writeChartAsJPEG(fos_jpg, chart3, 400, 500);
fos_jpg.close();
} catch (IOException e) {
e.printStackTrace();
}
FileOutputStream fos_jpg1= new FileOutputStream("D:\\fruit1.jpg");
DefaultPieDataset dataset2 = new DefaultPieDataset();
dataset1.setValue("苹果1",100);
dataset1.setValue("梨子1",200);
dataset1.setValue("葡萄1",300);
dataset1.setValue("香蕉1",400);
dataset1.setValue("荔枝1",500);
PiePlot3D plot=(PiePlot3D)chart3.getPlot();
// plot.setDataset(dataset2);
plot.datasetChanged(new DatasetChangeEvent(plot, dataset2));
ChartUtilities.writeChartAsJPEG(fos_jpg1, chart3, 400, 500);
}
}以上代码你可以做参考,我 plot.datasetChanged(new DatasetChangeEvent(plot, dataset2));
这样后,两个dataset都生成到图上了。。现在只要再把第一个图的dataset去掉就应该对了
dataset1.setValue("苹果1",100);
dataset1.setValue("梨子1",200);
dataset1.setValue("葡萄1",300);
dataset1.setValue("香蕉1",400);
dataset1.setValue("荔枝1",500);
没有给dataset2 加东西,加到dataset1上去了。。现在把代码改一下,完全实现了你要的效果package com.testchart;import java.awt.Color;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.PolarItemRenderer;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.urls.CategoryURLGenerator;
import org.jfree.chart.urls.StandardCategoryURLGenerator;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DatasetChangeEvent;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;public class TestRediantu {
public static void main(String[] args) throws IOException
{
DefaultPieDataset dataset1 = new DefaultPieDataset();
dataset1.setValue("苹果",100);
dataset1.setValue("梨子",200);
dataset1.setValue("葡萄",300);
dataset1.setValue("香蕉",400);
dataset1.setValue("荔枝",500); JFreeChart chart3 = ChartFactory.createPieChart3D( "水果产量图", // 图表标题
dataset1, true, // 是否显示图例
false,
false
);
FileOutputStream fos_jpg = null; try {
fos_jpg = new FileOutputStream("D:\\fruit.jpg");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ChartUtilities.writeChartAsJPEG(fos_jpg, chart3, 400, 500);
fos_jpg.close();
} catch (IOException e) {
e.printStackTrace();
}
FileOutputStream fos_jpg1= new FileOutputStream("D:\\fruit1.jpg");
DefaultPieDataset dataset2 = new DefaultPieDataset();
dataset2.setValue("苹果1",100);
dataset2.setValue("梨子1",200);
dataset2.setValue("葡萄1",300);
dataset2.setValue("香蕉1",400);
dataset2.setValue("荔枝1",500);
PiePlot3D plot=(PiePlot3D)chart3.getPlot();
plot.setDataset(dataset2);
// plot.datasetChanged(new DatasetChangeEvent(plot, dataset2));
ChartUtilities.writeChartAsJPEG(fos_jpg1, chart3, 400, 500);
}
}为了比较方便,我分别在D盘生成了2张图片,供你比较,我用的版本为1.0
你的方法我去试试,不过应该不会有问题 呵呵 当时我对JFreeChart了解的不多,网上资料也千篇一律,情况不一样,以为也必须像柱图那样找到setDataset()的方法,不过失败了(看来还是有的,只是我们没找到),最后想到只修改某一Key值的Value,结果也是可以的:
Plot plot = jfreechart.getPlot();
PiePlot pieplot = (PiePlot)plot;
PieDataset categorydataset = pieplot.getDataset();
DefaultPieDataset defaultcategorydataset = (DefaultPieDataset)categorydataset;
for (int i = 0; i < 5; i++) {
final double value = 100.0 * Math.random();
defaultcategorydataset.setValue("Section " + i, value);
}
。应该是修改单个Key的value后,也激发了JFreeChart的监听事件。
你这个方法是我当初要找的方法,等待中竟也找到了另一种实现方法,看来有时是思路给局限了,再次多谢ee4456!! 废话不说了,结贴给分 呵呵