下载
下载SDK:
配置环境变量
下载JFreechart:
将压缩包解压,解压后导包:
将jfreechart-1.0.1.jar和jcommon-1.0.0.jar文件的完整路径添加
饼图(Pie Chart)
在饼图中,每个扇区的弧长与其代表的数量成比例。
package Data_Vis;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import javax.swing.*;
public class Pie_chart extends ApplicationFrame {
public Pie_chart(String title) {
super(title);
setContentPane(panel());
}
/**创建数据集
* */
public static PieDataset dataset(){
DefaultPieDataset dataset=new DefaultPieDataset();
dataset.setValue("果汁",15.58);
dataset.setValue("即饮茶",7.91);
dataset.setValue("包装饮用水",26.92);
dataset.setValue("碳酸饮料",35.28);
dataset.setValue("其他",14.32);
return dataset;
}
/**创建表
* */
public static JFreeChart chart(PieDataset dataset) {
JFreeChart chart = ChartFactory.createPieChart(
"全球软饮料产品结构", //标题
dataset, //数据
true, //包含图例
true,
false
);
return chart;
}
/**图容器
* */
public static JPanel panel(){
JFreeChart chart=chart(dataset());
return new ChartPanel(chart);
}
public static void main(String[] args) {
Pie_chart demo=new Pie_chart("产品结构");
demo.setSize(560,370);
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);//设置可视化
}
}
效果:
条形图( Bar Chart)
条形图使用不同的方向(水平或垂直)条形来显示各种类别的比较。 图表的一个轴(域轴)显示正在比较的特定域,另一个轴(范围轴)表示离散值。
笔记本属性评分 名称\属性 价格 CPU 内存 Acer 4 5 6 Dell 8 9 10 HP 6 8 6
package Data_Vis;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class Bar_chart extends ApplicationFrame {
public Bar_chart(String appTitle,String chartTitle) {
super(appTitle);
JFreeChart barChart= ChartFactory.createBarChart(
chartTitle,
"Category",
"Score",
createDataset(),
PlotOrientation.VERTICAL,
true,true,false
);
ChartPanel chartPanel=new ChartPanel(barChart);
chartPanel.setPreferredSize(new java.awt.Dimension(560,370));
setContentPane(chartPanel);
}
//创建数据集
private CategoryDataset createDataset(){
final String Acer="Acer";
final String HP="HP";
final String Dell="Dell";
final String price="price";
final String cpu="cpu";
final String memory="memory";
final DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(4,Acer,price);
dataset.addValue(5,Acer,cpu);
dataset.addValue(6,Acer,memory);
dataset.addValue(8,Dell,price);
dataset.addValue(9,Dell,cpu);
dataset.addValue(10,Dell,memory);
dataset.addValue(6,HP,price);
dataset.addValue(8,HP,cpu);
dataset.addValue(6,HP,memory);
return dataset;
}
public static void main(String[] args) {
Bar_chart chart=new Bar_chart("Computer Quality-Price Ratio","which brand you prefer?");
chart.pack();
RefineryUtilities.centerFrameOnScreen(chart);
chart.setVisible(true);
}
}
效果:
JPEG图像创建:
package Data_Vis;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import java.io.File;
public class Barchart {
public static void main(String[] args) throws Exception {
final String Acer="Acer";
final String HP="HP";
final String Dell="Dell";
final String price="price";
final String cpu="cpu";
final String memory="memory";
final DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(4,Acer,price);
dataset.addValue(5,Acer,cpu);
dataset.addValue(6,Acer,memory);
dataset.addValue(8,Dell,price);
dataset.addValue(9,Dell,cpu);
dataset.addValue(10,Dell,memory);
dataset.addValue(6,HP,price);
dataset.addValue(8,HP,cpu);
dataset.addValue(6,HP,memory);
JFreeChart barChart= ChartFactory.createBarChart(
"which brand you prefer?",
"Category",
"Score",
dataset,
PlotOrientation.VERTICAL,
true,true,false
);
File chart=new File("BarChart.jpeg");
ChartUtilities.saveChartAsJPEG(chart,barChart,640,480);
}
}
其他图表也可以生成除此之外的其他图片格式。
折线图( Line Chart)
折线图或折线图将信息显示为由直线段连接的一系列数据点(标记)。 折线图显示数据在相同时间频率下的变化情况。
年份 | 苹果数量 |
---|---|
1 | 50 |
3 | 70 |
5 | 150 |
7 | 130 |
9 | 170 |
package Data_Vis;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class Line_chart extends ApplicationFrame {
public static final String tree="AppleTree";
public Line_chart(String AppTitle,String chartTitle) {
super(AppTitle);
JFreeChart lineChart= ChartFactory.createLineChart(
chartTitle,
"Year",
"Number",
createDataset(),
PlotOrientation.VERTICAL,
true,true,false
);
ChartPanel chartPanel=new ChartPanel(lineChart);
chartPanel.setPreferredSize(new java.awt.Dimension(560,360));
setContentPane(chartPanel);
}
private DefaultCategoryDataset createDataset( ) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset( );
dataset.addValue( 50 , tree , "1" );
dataset.addValue( 70 , tree , "3" );
dataset.addValue( 150 , tree , "5" );
dataset.addValue( 130 , tree , "7" );
dataset.addValue( 170 , tree , "9" );
return dataset;
}
public static void main(String[] args) {
Line_chart chart=new Line_chart("Apples - Year","Apple Number");
chart.pack();
RefineryUtilities.centerFrameOnScreen(chart);
chart.setVisible(true);
}
}
XY图表( XY Chart)
XY图表(散点图)基于一个由X和Y值列表组成的数据系列。 每个值对(X,Y)是坐标系中的一个点。 这里,一个值确定水平(X)位置,另一个确定垂直(Y)位置。
不同品牌电脑性价比(性能x,价格y) HP Dell Acer 5,5 4,5 6,6 7,6 2,4 4,6 7,8 8,7 10,9
package Data_Vis;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import java.awt.*;
public class XYLine_Chart extends ApplicationFrame {
public XYLine_Chart(String applicationTitle, String chartTitle ) {
super(applicationTitle);
JFreeChart xylineChart = ChartFactory.createXYLineChart(
chartTitle ,
"Category" ,
"Score" ,
createDataset() ,
PlotOrientation.VERTICAL ,
true , true , false);
ChartPanel chartPanel = new ChartPanel( xylineChart );
chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 367 ) );
final XYPlot plot = xylineChart.getXYPlot( );
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer( );
renderer.setSeriesPaint( 0 , Color.RED );
renderer.setSeriesPaint( 1 , Color.GREEN );
renderer.setSeriesPaint( 2 , Color.black );
renderer.setSeriesStroke( 0 , new BasicStroke( 4.0f ) );
renderer.setSeriesStroke( 1 , new BasicStroke( 3.0f ) );//线条粗细
renderer.setSeriesStroke( 2 , new BasicStroke( 2.0f ) );
plot.setRenderer( renderer );
setContentPane( chartPanel );
}
//创建数据集
private XYDataset createDataset( ) {
final XYSeries HP = new XYSeries( "HP" );
HP.add( 5 , 5 );
HP.add( 7 , 6 );
HP.add( 7 , 8 );
final XYSeries Dell = new XYSeries( "Dell" );
Dell.add( 4 , 5);
Dell.add( 2 , 4 );
Dell.add( 8, 7 );
final XYSeries Acer = new XYSeries( "Acer" );
Acer.add( 6, 6);
Acer.add( 4 , 6 );
Acer.add( 10, 9 );
final XYSeriesCollection dataset = new XYSeriesCollection( );
dataset.addSeries(HP );
dataset.addSeries( Dell );
dataset.addSeries( Acer );
return dataset;
}
public static void main( String[ ] args ) {
XYLine_Chart chart = new XYLine_Chart("Chart",
"Quality-Price Ratio");
chart.pack( );
RefineryUtilities.centerFrameOnScreen( chart );
chart.setVisible( true );
}
}
效果: