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;
}
}
图表 - 柱形图
最新推荐文章于 2022-08-17 23:22:06 发布