图表 - 柱形图

package api.chart;

import java.awt.Color;
import java.awt.Font;
import java.io.File;

import javax.imageio.ImageIO;

import com.fr.base.CoreDecimalFormat;
import com.fr.base.Formula;
import com.fr.base.TextFormat;
import com.fr.base.background.ColorBackground;
import com.fr.base.background.ImageBackground;
import com.fr.chart.base.AttrBorder;
import com.fr.chart.base.AttrChangeConfig;
import com.fr.chart.base.AttrChangeType;
import com.fr.chart.base.ChartConstants;
import com.fr.chart.base.TextAttr;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.chartattr.ChartCommonCondition;
import com.fr.chart.chartdata.OneValueCDDefinition;
import com.fr.chart.chartglyph.ConditionAttr;
import com.fr.chart.chartglyph.DataSheet;
import com.fr.chart.chartglyph.GeneralInfo;
import com.fr.data.DataConstants;
import com.fr.data.condition.JoinCondition;
import com.fr.data.condition.ListCondition;
import com.fr.data.core.Compare;
import com.fr.data.impl.DBTableData;
import com.fr.data.impl.NameDatabaseConnection;
import com.fr.data.impl.NameTableData;
import com.fr.data.util.function.SumFunction;
import com.fr.general.FRFont;
import com.fr.io.TemplateWorkBookIO;
import com.fr.main.impl.WorkBook;
import com.fr.plugin.chart.attr.axis.VanChartAlertValue;
import com.fr.plugin.chart.attr.axis.VanChartAxis;
import com.fr.plugin.chart.attr.axis.VanChartCustomIntervalBackground;
import com.fr.plugin.chart.attr.axis.VanChartTimeAxis;
import com.fr.plugin.chart.attr.axis.VanChartValueAxis;
import com.fr.plugin.chart.base.AttrSeriesImageBackground;
import com.fr.plugin.chart.base.AttrSeriesStackAndAxis;
import com.fr.plugin.chart.base.AttrTooltip;
import com.fr.plugin.chart.base.AttrTooltipContent;
import com.fr.plugin.chart.base.TrendLineType;
import com.fr.plugin.chart.base.VanChartAttrTrendLine;
import com.fr.plugin.chart.base.VanChartConstants;
import com.fr.plugin.chart.base.VanChartZoom;
import com.fr.plugin.chart.base.format.AttrTooltipCategoryFormat;
import com.fr.plugin.chart.base.format.AttrTooltipChangedPercentFormat;
import com.fr.plugin.chart.base.format.AttrTooltipChangedValueFormat;
import com.fr.plugin.chart.base.format.AttrTooltipPercentFormat;
import com.fr.plugin.chart.base.format.AttrTooltipSeriesFormat;
import com.fr.plugin.chart.base.format.AttrTooltipSummaryValueFormat;
import com.fr.plugin.chart.base.format.AttrTooltipValueFormat;
import com.fr.plugin.chart.column.VanChartColumnPlot;
import com.fr.plugin.chart.type.AxisLabelDisplay;
import com.fr.plugin.chart.type.AxisTickLineType;
import com.fr.plugin.chart.type.GradientType;
import com.fr.plugin.chart.type.LineType;
import com.fr.plugin.chart.type.TimeType;
import com.fr.plugin.chart.type.VanChartPlotType;
import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.report.cell.DefaultTemplateCellElement;
import com.fr.report.worksheet.WorkSheet;
import com.fr.stable.Constants;

import api.ServerConnector;

/**
 * 图表 - 柱形图
 * 
 * @author Administrator
 */
public class ColumnChart {

	public static void main(String[] args) {
		/*
		 * 图表容器
		 * 普通报表 ChartCollection
		 * 聚合报表 PolyChartBlock
		 * 决策报表 ChartEditor
		 */
		try {
			ServerConnector.remote();

			WorkBook workbook = new WorkBook();

			// 数据库查询
			DBTableData db = new DBTableData(new NameDatabaseConnection("FRDemo"), "select * from 销量");
			workbook.putTableData("ds1", db);

			WorkSheet sheet = new WorkSheet();
			ChartCollection cc = new ChartCollection();
			cc.addNamedChart("柱形图", getChart());

			// 切换方式
			AttrChangeConfig change = new AttrChangeConfig();
			// 按钮
			change.setChangeType(AttrChangeType.BUTTON);
			change.setButtonColor(Color.BLUE);
			change.setStyleAttr(new TextAttr(FRFont.getInstance("楷体", Font.BOLD, 13)));
			// 轮播
			change.setChangeType(AttrChangeType.CAROUSEL);
			change.setShowArrow(true);
			change.setTimeInterval(5);
			change.setCarouselColor(Color.GREEN);
			// cc.setChangeConfigAttr(change);

			sheet.addCellElement(new DefaultTemplateCellElement(0, 0, 8, 20, cc));

			workbook.addReport(0, "图表", sheet);

			TemplateWorkBookIO.writeTemplateWorkBook(workbook, "柱形图.cpt");
		} catch (Exception e) {
			e.printStackTrace();
		}
		ServerConnector.disconnect();
	}

	/**
	 * 柱形图
	 * 
	 * @return
	 */
	public static VanChart getChart() throws Exception {
		/*
		 * 格式
		 * CoreDecimalFormat - 数字、货币、百分比、科学计数
		 * FineDateFormat - 日期、时间
		 * TextFormat - 文本
		 * 常规不设置
		 */
		// 值
		AttrTooltipValueFormat valueFormat = new AttrTooltipValueFormat();
		valueFormat.setEnable(true);
		valueFormat.setFormat(new CoreDecimalFormat("#0"));
		// 百分比
		AttrTooltipPercentFormat percentFormat = new AttrTooltipPercentFormat();
		percentFormat.setEnable(true);
		percentFormat.setFormat(CoreDecimalFormat.getPercentInstance());
		// 分类名
		AttrTooltipCategoryFormat categoryFormat = new AttrTooltipCategoryFormat();
		categoryFormat.setEnable(true);
		categoryFormat.setFormat(TextFormat.getInstance());
		// 系列名
		AttrTooltipSeriesFormat seriesFormat = new AttrTooltipSeriesFormat();
		seriesFormat.setEnable(true);
		seriesFormat.setFormat(TextFormat.getInstance());
		// 变化百分比
		AttrTooltipChangedPercentFormat changedPercentFormat = new AttrTooltipChangedPercentFormat();
		changedPercentFormat.setEnable(true);
		changedPercentFormat.setFormat(CoreDecimalFormat.getPercentInstance());
		// 变化值
		AttrTooltipChangedValueFormat changedValueFormat = new AttrTooltipChangedValueFormat();
		changedValueFormat.setEnable(true);
		changedValueFormat.setFormat(new CoreDecimalFormat("#0"));
		// 汇总值
		AttrTooltipSummaryValueFormat summaryFormat = new AttrTooltipSummaryValueFormat();
		summaryFormat.setEnable(true);
		summaryFormat.setFormat(new CoreDecimalFormat("#0"));
		//

		/*
		 * 图表容器
		 * 设置 工具栏、缩放、主题、数据、标题、背景、动画、监控刷新
		 */
		VanChart chart = new VanChart();
		/*
		 * 图表绘制类
		 * 设置 提示、标签、条件显示、图例、系列
		 */
		VanChartColumnPlot plot = new VanChartColumnPlot();

		/*
		 * 类型
		 */
		plot.setVanChartPlotType(VanChartPlotType.CUSTOM);

		/*
		 * 数据
		 */
		OneValueCDDefinition data = new OneValueCDDefinition();
		// 数据集来源 - 数据集
		data.setTableData(new NameTableData("ds1"));
		// 分类
		data.setCategoryName("销售员");
		// 系列名使用 - 字段值
		// 系列名
		data.setSeriesColumnName("产品类型");
		// 值
		data.setValueColumnName("销量");
		// 汇总方式
		data.setDataFunction(new SumFunction());

		/*
		 * 系列
		 */
		// 颜色
		plot.getGradientStyle().setGradientType(GradientType.AUTO);
		// plot.getGradientStyle().setGradientType(GradientType.CUSTOM);
		// plot.getGradientStyle().setGradientType(GradientType.NONE);
		plot.getGradientStyle().setStartColor(Color.yellow);
		plot.getGradientStyle().setEndColor(Color.red);
		plot.getPlotFillStyle().setColorStyle(ChartConstants.COLOR_DEFAULT); // 预定义颜色
		// plot.getPlotFillStyle().setColorStyle(ChartConstants.COLOR_ACC); // 自定义组合色
		// plot.getPlotFillStyle().setColorStyle(ChartConstants.COLOR_GRADIENT); // 自定义渐变色
		// plot.getPlotFillStyle().setColorList(Arrays.asList(new Color[] { Color.green, Color.blue, Color.yellow, Color.red }));
		plot.getPlotFillStyle().setFillStyleName("热情");
		// 样式
		plot.setFixedWidth(true);
		plot.setColumnWidth(14);
		plot.setSeriesOverlapPercent(21);
		plot.setCategoryIntervalPercent(22);
		plot.setFilledWithImage(true);
		AttrSeriesImageBackground img = new AttrSeriesImageBackground();
		img.setSeriesBackground(new ImageBackground(ImageIO.read(new File("d:/系统.bmp"))));
		plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(img);
		// 边框
		AttrBorder attrBorder = new AttrBorder();
		attrBorder.setAutoColor(false);
		attrBorder.setBorderColor(Color.YELLOW);
		attrBorder.setBorderStyle(Constants.LINE_THIN);
		attrBorder.setRoundBorder(true);
		attrBorder.setRoundRadius(4);
		plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(attrBorder);
		VanChartAttrTrendLine trendLine = new VanChartAttrTrendLine();
		// 堆积和坐标轴
		ConditionAttr c = new ConditionAttr();
		c.setName("堆积和坐标轴1");
		AttrSeriesStackAndAxis sa = new AttrSeriesStackAndAxis();
		sa.setXAxisIndex(1);
		sa.setYAxisIndex(0);
		sa.setStacked(false);
		sa.setPercentStacked(true);
		c.addDataSeriesCondition(sa);
		ListCondition conds = new ListCondition();
		conds.addCondition(new ChartCommonCondition("SERIES_NAME", new Compare(Compare.ENDS_WITH, "e")));
		conds.addJoinCondition(new JoinCondition(DataConstants.AND,
				new ListCondition(java.util.Arrays.asList(new JoinCondition[] {
						new JoinCondition(DataConstants.AND,
								new ChartCommonCondition("SERIES_NAME", new Compare(Compare.EQUALS, "1"))),
						new JoinCondition(DataConstants.OR,
								new ChartCommonCondition("SERIES_NAME", new Compare(Compare.EQUALS, "2")))
				}))));
		c.setCondition(conds);
		plot.getStackAndAxisCondition().addConditionAttr(c);
		// 趋势线
		trendLine.setTrendLineName("trend_line");
		trendLine.getLineStyleInfo().getAttrLineStyle().setLineType(LineType.SOLID);
		trendLine.getLineStyleInfo().getAttrLineStyle().setLineWidth(3.3);
		trendLine.getLineStyleInfo().getAttrLineColor().setSeriesColor(Color.red);
		trendLine.setTrendLineType(TrendLineType.LOG);
		trendLine.setPrePeriod(1);
		trendLine.setAfterPeriod(2);
		plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(trendLine);

		/*
		 * 坐标轴
		 */
		// 分类坐标轴
		VanChartAxis x1 = plot.getXAxisList().get(0);
		x1.setAxisName("x1");
		// 标题
		x1.setShowAxisTitle(true);
		x1.getTitle().setTextObject("title");
		x1.setTitleUseHtml(true);
		x1.getTitle().setPosition(Constants.LEFT);
		x1.getTitle().getTextAttr()
				.setFRFont(FRFont.getInstance("黑体", Font.BOLD | Font.ITALIC, 13, Color.yellow));
		x1.getTitle().getTextAttr().setRotation(-35);
		// 标签
		x1.setShowAxisLabel(true);
		x1.setLabelDisplay(AxisLabelDisplay.INTERVAL);
		x1.getTextAttr().setFRFont(FRFont.getInstance("楷体", Font.BOLD, 11, Color.blue));
		x1.setAutoLabelGap(false);
		x1.setLabelIntervalNumber(new Formula("2"));
		// 轴线样式
		x1.setAxisStyle(Constants.LINE_CHART_MED_ARROW);
		x1.setAxisColor(Color.pink);
		x1.setMainTickLine(AxisTickLineType.TICK_LINE_NONE);
		x1.setSecTickLine(AxisTickLineType.TICK_LINE_NONE);
		// 位置
		x1.setPosition(VanChartConstants.AXIS_VERTICAL_ZERO);
		x1.setAxisReversed(true);
		// 显示策略
		x1.setLimitSize(true);
		x1.setMaxHeight(20);
		// 格式
		x1.setCommonValueFormat(false);
		x1.setFormat(new CoreDecimalFormat("#0.00"));
		x1.getHtmlLabel().setCustomText("function(){ return 123; }");
		x1.getHtmlLabel().setUseHtml(true);
		x1.getHtmlLabel().setCustomWidth(true);
		x1.getHtmlLabel().setWidth("45");
		x1.getHtmlLabel().setCustomHeight(true);
		x1.getHtmlLabel().setHeight("55");

		// 时间坐标轴
		VanChartTimeAxis x2 = new VanChartTimeAxis();
		x2.setAxisName("x2");
		// 标签
		x2.setShowAxisLabel(true);
		x2.setAutoLabelGap(false);
		x2.setLabelIntervalNumber(new Formula("2"));
		// 值定义
		x2.setCustomMinValue(true);
		x2.setMinValue(new Formula("2020-01-01"));
		x2.setCustomMaxValue(true);
		x2.setMaxValue(new Formula("2021-01-01"));
		x2.setMainUnit(new Formula("2"));
		x2.setSecUnit(new Formula("3"));
		x2.setMainType(TimeType.TIME_DAY);
		x2.setSecondType(TimeType.TIME_MONTH);
		plot.getXAxisList().add(x2);

		// 值坐标轴
		VanChartValueAxis y = (VanChartValueAxis) plot.getYAxisList().get(0);
		y.setPosition(Constants.BOTTOM);
		// 值定义
		y.setLog(true);
		y.setLogBase(new Formula("10.1"));

		/*
		 * 数据表
		 */
		DataSheet dataSheet = plot.getDataSheet();
		dataSheet.setVisible(true);
		dataSheet.setFormat(new CoreDecimalFormat("#0.0%"));
		dataSheet.setFont(FRFont.getInstance("楷体", Font.BOLD | Font.ITALIC, 13, Color.green));
		dataSheet.setBorderStyle(Constants.LINE_THICK);
		dataSheet.setBorderColor(Color.yellow);

		/*
		 * 背景
		 */
		// 图表区
		chart.setBorderStyle(Constants.LINE_THICK);
		chart.setBorderColor(Color.red);
		chart.setRoundRadius(3);
		chart.setBackground(ColorBackground.getInstance(Color.yellow));
		chart.setAlpha(.65f);
		chart.setShadow(true);
		// 绘图区
		plot.setBorderStyle(Constants.LINE_THIN);
		plot.setBorderColor(Color.green);
		plot.setRoundRadius(5);
		plot.setBackground(ColorBackground.getInstance(Color.blue));
		plot.setAlpha(.56f);
		plot.setShadow(false);
		plot.getXAxisList().get(0).setGridLineType(LineType.DASHED);
		plot.getXAxisList().get(0).setMainGridColor(Color.red);
		plot.getYAxisList().get(0).setGridLineType(LineType.SOLID);
		plot.getYAxisList().get(0).setMainGridColor(Color.green);
		// 警戒线
		VanChartAlertValue alert = new VanChartAlertValue();
		alert.setAlertPaneSelectName("警戒线1");
		alert.setAlertContent("50");
		alert.getLineStyle().setLineType(LineType.SOLID);
		alert.getLineStyle().setLineWidth(1.2);
		alert.getLineColor().setSeriesColor(Color.black);
		alert.setAlertPosition(Constants.BOTTOM);
		alert.setAlertContent("alert_x");
		alert.setAlertFont(FRFont.getInstance().applyName("黑体").applySize(12).applyForeground(Color.green));
		plot.getXAxisList().get(1).getAlertValues().add(alert);
		// 间隔
		plot.setIsDefaultIntervalBackground(true);
		plot.getXAxisList().get(0).setDefaultIntervalBackgroundColor(Color.CYAN);
		plot.getYAxisList().get(0).setDefaultIntervalBackgroundColor(Color.MAGENTA);
		plot.setIsDefaultIntervalBackground(false);
		VanChartCustomIntervalBackground inter = new VanChartCustomIntervalBackground();
		inter.setCustomIntervalBackgroundSelectName("间隔1");
		inter.setAxisNamesArray(new String[] { "ddd" });
		inter.setFromFormula(new Formula("1"));
		inter.setToFormula(new Formula("10"));
		inter.setBackgroundColor(Color.blue);
		inter.setAlpha(.55);
		plot.getYAxisList().get(0).getCustomIntervalBackgroundArray().add(inter);

		/*
		 * 提示
		 */
		AttrTooltip tooltip = new AttrTooltip();
		tooltip.setCustom(true);
		// 使用数据点提示
		tooltip.setEnable(true);
		// 通用
		AttrTooltipContent tooltipContent = tooltip.getContent();
		tooltipContent.setCommon(true);
		tooltipContent.setValueFormat(valueFormat);
		// 样式
		tooltip.setTextAttr(new TextAttr(FRFont.getInstance("楷体", Font.BOLD, 12)));
		GeneralInfo gi = tooltip.getGeneralInfo();
		// 边框
		gi.setBorderStyle(Constants.LINE_THICK);
		gi.setBorderColor(Color.BLACK);
		gi.setRoundBorder(true);
		gi.setRoundRadius(10);
		// 背景
		gi.setBackground(ColorBackground.getInstance(Color.YELLOW));
		gi.setAlpha(.7f);
		gi.setShadow(false);
		// 显示策略
		tooltip.setFollowMouse(true);
		tooltip.setShowMutiSeries(true);
		plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(tooltip);

		/*
		 * 特效
		 */
		// 翻转
		plot.setAxisRotation(false);
		// 缩放
		VanChartZoom zoom = new VanChartZoom();
		zoom.setZoomVisible(true);
		zoom.setZoomResize(false);
		zoom.setFrom(1);
		zoom.setTo(2);
		zoom.setZoomType(VanChartConstants.ZOOM_TYPE_Y);
		chart.setVanChartZoom(zoom);

		chart.setPlot(plot);
		return chart;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值