java中的柱状图,饼状图等
需要jar包:
jcommon-1.0.12.jar
jfreechart-1.0.8.jar
运行,看到路径下的图片,会生成对应的图。
package jfree;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
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.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.TextAnchor;
import org.jfree.util.Rotation;
public class Jfreechart {
//柱状图
public static void barCharts() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(300, "广州", "苹果");
dataset.addValue(200, "广州", "梨子");
dataset.addValue(500, "广州", "葡萄");
dataset.addValue(340, "广州", "芒果");
dataset.addValue(280, "广州", "荔枝");
dataset.addValue(null, "广州", "橘子");
/*以二维数组的形式
double [][]data=new double[][]{{672,766,223,540,126},{325,521,210,340,106},{332,256,523,240,526}};
String []rowKeys={"苹果","梨子","葡萄"};
String []columnKeys={"北京","上海","广州","武汉","深圳"};
CategoryDataset dataset=DatasetUtilities.createCategoryDataset(rowKeys, columnKeys,data);
*/
JFreeChart chart = ChartFactory.createBarChart3D("水果销售统计图", "水果", "销量", dataset, PlotOrientation.VERTICAL, //竖直显示
true, false, false);
//重新设置图标标题,改变字体
chart.setTitle(new TextTitle("水果销售统计", new Font("黑体", Font.BOLD, 20)));
//取得统计图标的第一个图例
LegendTitle legend = chart.getLegend(0);
//修改图例的字体,必须把显示图片设置为ture,否则会包空指针异常
legend.setItemFont(new Font("宋体", Font.BOLD, 20));
//获取柱状图的Plot对象
CategoryPlot plot = chart.getCategoryPlot();
//设定图表数据显示部分背景色
plot.setBackgroundPaint(Color.PINK);
//数据区的方向--用来控制数据时从左到右增长,还是从下到上增长的
plot.setOrientation(PlotOrientation.HORIZONTAL);
//分类轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)
plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
//分类轴网格是否可见(竖的分割线)
plot.setDomainGridlinesVisible(false);
//数据图例和数据区的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)
plot.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);
plot.setRangeGridlinesVisible(true);
//取得横轴
CategoryAxis categoryAxis = plot.getDomainAxis();
//设置横轴显示标签的字体
categoryAxis.setLabelFont(new Font("隶书", Font.BOLD, 20));
//分类标签以45度角倾斜
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
//分类标签显示的字体
categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 20));
//取得纵轴
NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
//设置纵轴显示标签的字体
numberAxis.setLabelFont(new Font("隶书", Font.BOLD, 20));
//数据轴是否反向(默认为false)
numberAxis.setInverted(false);
//数据轴的数据标签是否自动确定(默认为true)
numberAxis.setAutoTickUnitSelection(true);
//设置最高的一个柱与图片顶端的距离
numberAxis.setUpperMargin(0.2);
//numberAxis.setLowerMargin(0.2);
//设置显示小于最高一个柱的值100所有柱子,纵轴从柱子最大值-100开始显示
numberAxis.setFixedAutoRange(400);
//设置整数显示
numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
numberAxis.setNegativeArrowVisible(true);
//设置最大值
numberAxis.setUpperBound(1000);
//设置最小值,如果小于的话不显示
numberAxis.setLowerBound(150);
//设置百分比显示
//numberAxis.setNumberFormatOverride(new DecimalFormat("0%"));
//numberAxis.setNumberFormatOverride(new DecimalFormat("0.00%"));
//设置最小显示数,小于的话会显示在中间(正负)
//numberAxis.setAutoRangeMinimumSize(1);
plot.setNoDataMessage("没有使用数据");
plot.setNoDataMessagePaint(Color.blue);
//柱子对象
BarRenderer3D renderer = new BarRenderer3D();
//设置柱子的宽度
renderer.setMaximumBarWidth(0.05);
//设置柱子的高度
renderer.setMinimumBarLength(0.2);
//设置柱子的颜色
renderer.setSeriesPaint(0, Color.GREEN);
//设置每种水果代表的柱的 边框颜色
renderer.setSeriesOutlinePaint(0, Color.BLACK);
//设置柱子边框可见
renderer.setDrawBarOutline(true);
//设置柱子默认的边框颜色,必须设置边框可见才起效
renderer.setBaseOutlinePaint(Color.BLACK);
//设置柱子的纵横背景色
renderer.setWallPaint(Color.BLUE);
//设置平行柱的之间距离
renderer.setItemMargin(0.5);
//显示每个柱子的数值,并修改改数值的字体属性
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelFont(new Font("隶书", Font.BOLD, 22));
renderer.setBaseItemLabelsVisible(true);
//设置显示值的位置
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,
TextAnchor.BASELINE_CENTER));
renderer.setItemLabelAnchorOffset(12D);// 设置柱形图上的文字偏离值
//将修改后的属性值保存到图中,这一步很重要,否则上面对颜色的设置都无效
plot.setRenderer(renderer);
//设置柱子的透明度,0.8相当于80%的透明度
plot.setForegroundAlpha(0.8f);
drawToOut(chart);
}
//饼图
public static void pieCharts() {
//与柱状图和折线图不同
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("管理人员", 10.02D);
dataset.setValue("市场人员", 20.23D);
dataset.setValue("开发人员", 60.02D);
dataset.setValue("OEM人员", 10.02D);
dataset.setValue("其他人员", 5.11D);
//createPieChart 2D; createPieChart3D 3D
JFreeChart chart = ChartFactory.createPieChart("公司组织架构图", dataset, true, true, false);
//设置标题字体,为了防止中文乱码
chart.setTitle(new TextTitle("公司组织架构统计图", new Font("黑体", Font.ITALIC, 22)));
//取得统计图标的第一个图例
LegendTitle legend = chart.getLegend(0);
//修改图例的字体,必须把显示图片设置为ture,否则会包空指针异常
legend.setItemFont(new Font("宋体", Font.BOLD, 20));
//取得图表显示对象(与柱状图和折线图不同)
PiePlot plot = (PiePlot) chart.getPlot();
//设置区块标签的字体==为了防止中文乱码:必须设置字体
plot.setLabelFont(new Font("隶书", Font.BOLD, 22));
//图形边框颜色
plot.setBaseSectionOutlinePaint(Color.BLUE);
//图形边框粗细
plot.setBaseSectionOutlineStroke(new BasicStroke(0.5f));
//设置饼状图的绘制方向,可以按顺时针方向绘制,也可以按逆时针方向绘制
plot.setDirection(Rotation.ANTICLOCKWISE);//逆时针,Rotation.CLOCKWISE顺时针
//设置绘制角度(图形旋转角度)
plot.setStartAngle(70);
//设置突出显示的数据块
//plot.setExplodePercent(1, 0.5D);
//plot.setExplodePercent("One", 0.5D);
//扇区分离显示,对3D图不起效
plot.setExplodePercent(dataset.getKey(0), 0.1d);
//分类标签与图的连接线颜色
plot.setLabelLinkPaint(Color.BLUE);
//分类标签边框颜色
plot.setLabelOutlinePaint(Color.black);
//分类标签阴影颜色
plot.setLabelShadowPaint(Color.RED);
//指定分类饼的颜色
plot.setSectionPaint(1, Color.BLACK);
//饼状图标签显示百分比 :自定义,{0}表示选项,{1}表示数值,{2}表示所占比例,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}:{1}\r\n{2}", NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
//图例显示百分比
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={2}"));
//指定显示的拼图为:圆形(true),还是椭圆形(false)
plot.setCircular(true);
//没有数据的时候显示的内容
plot.setNoDataMessage("没有可用的数据...");
//设置鼠标悬停提示
plot.setToolTipGenerator(new StandardPieToolTipGenerator());
//设置热点链接
//plot.setURLGenerator(new StandardPieURLGenerator("detail.jsp"));
drawToOut(chart);
}
//折线图
public static void lineCharts() {
DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
dataSet.addValue(0.0, "冰箱", "1月");
dataSet.addValue(4.2, "冰箱", "2月");
dataSet.addValue(3.9, "冰箱", "3月");
dataSet.addValue(1.0, "彩电", "1月");
dataSet.addValue(5.2, "彩电", "2月");
dataSet.addValue(7.9, "彩电", "3月");
dataSet.addValue(2.0, "洗衣机", "1月");
dataSet.addValue(9.2, "洗衣机", "2月");
dataSet.addValue(8.9, "洗衣机", "3月");
JFreeChart chart = ChartFactory.createLineChart("折线图", "时间", "销售额(百万)", dataSet, PlotOrientation.VERTICAL,
true, true, false);
// 获取一个图例
LegendTitle legendTitle = chart.getLegend(0);
// 设置图例字体
legendTitle.setItemFont(new Font("宋体", Font.BOLD, 18));
CategoryPlot plot = (CategoryPlot) chart.getPlot();
// 取得横轴
CategoryAxis categoryAxis = plot.getDomainAxis();
// 设置横轴的字体
categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 18));
// 设置分类标签字体
categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12));
// 取得纵轴
NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
// 设置纵轴的字体
numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 14));
numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());//显示整数
CategoryItemRenderer xylineandshaperenderer = plot.getRenderer();
xylineandshaperenderer.setBaseItemLabelsVisible(true);
xylineandshaperenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE2,
TextAnchor.BASELINE_RIGHT));
xylineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
drawToOut(chart);
}
public static void drawToOut(JFreeChart chart) {
FileOutputStream fos;
try {
fos = new FileOutputStream("d://1.jpg");
ChartUtilities.writeChartAsJPEG(fos, chart, 1400, 800);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("成功");
}
public static void main(String[] args) {
// Jfreechart.barCharts();//柱状图
// Jfreechart.pieCharts();//饼状图
Jfreechart.lineCharts();
}
}