精华内容
下载资源
问答
  • 转载请注明出处:使用Origin绘制折线图(入门) 刚接触Origin,操作很是笨拙,各位大佬勿见笑! 一、目的 使用Origin绘制一幅类似于下图的中文版折线图。 二、Word中的数据表 三、操作 3.1 导入数据 把Word中的...

    转载请注明出处:使用Origin绘制折线图(入门)


    刚接触Origin,操作很是笨拙,各位大佬勿见笑!

    一、目的

    使用Origin绘制一幅类似于下图的中文版折线图。
    在这里插入图片描述


    二、Word中的数据表

    在这里插入图片描述


    三、操作

    3.1 导入数据

    把Word中的数据表复制到Excel中,再把Excel数据导入到Origin里。(或者直接在Origin中手动输入这些数据)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    数据导入成功,把项目另存为一个位置。
    在这里插入图片描述

    3.2 选中全部数据,右键“绘图”

    在这里插入图片描述
    在这里插入图片描述

    3.3 设置y轴

    双击y轴。

    3.3.1 修改y轴"刻度",点击应用。

    在这里插入图片描述

    3.3.2 修改y轴"刻度线标签",点击应用。

    在这里插入图片描述

    3.3.3 修改y轴"标题",点击应用。

    在这里插入图片描述

    3.3.4 修改y轴左轴"轴线和刻度线",点击应用。

    在这里插入图片描述

    3.3.5 修改y轴右轴"轴线和刻度线",点击应用。

    在这里插入图片描述
    最后点击"确定"。

    3.4 设置x轴

    双击x轴。

    3.4.1 修改x轴刻度。

    在这里插入图片描述

    3.4.2 修改x轴"刻度线标签"。

    在这里插入图片描述
    在这里插入图片描述

    3.4.3 修改x轴"标题"。

    在这里插入图片描述

    3.4.4 修改x轴"轴线和刻度线"。

    在这里插入图片描述
    在这里插入图片描述
    最后点击"确定"。

    3.5 修改图例

    双击图例。
    图中所有的数字,字体改为"Times New Roman"。

    3.5.1 修改图例名称

    在这里插入图片描述

    3.5.2 修改图例颜色

    双击折线图。
    在这里插入图片描述
    在这里插入图片描述
    并且启用"抗锯齿"。
    在这里插入图片描述

    3.6 给图添加标题

    点击文本工具,输入文字。
    在这里插入图片描述

    3.7 导出图片

    参考文章:Origin如何输出高清图片
    在这里插入图片描述
    在这里插入图片描述
    最终结果图:
    在这里插入图片描述

    展开全文
  • Word绘制折线,我们一般都用直线工具组成群组,但这种方法修改起来很麻烦。其实还有更简便的方法:先在绘图工具栏中选定“直线”工具,随意绘制一根直线。选定当前直线,单击绘图工具栏左侧的“绘图/编辑顶点”...

    在Word中绘制折线,我们一般都用直线工具组成群组,但这种方法修改起来很麻烦。其实还有更简便的方法:先在绘图工具栏中选定“直线”工具,随意绘制一根直线。选定当前直线,单击绘图工具栏左侧的“绘图/编辑顶点”命令,这时我们可以看到当前直线的端点xp系统下载由空心的小圆圈变成了实心的小黑点,这就表示进入了编辑顶点状态。光标移到直线上,此时光标会变成十字形,在直线上单击并拖动,即可形成一个顶点了。根据自己的需要不断单击拖动,就可以绘制出满意的折线了。要调整顶点,也很方便,折线上的每个顶点都是可以继续拖动调整的。如果要删除某个顶点的话,只要按住Ctrl键,在顶点上单击即可将之删除了。

    展开全文
  • 前言 这个项目是公司有新的需求,需要用java来绘制一些图表,但是自己...普通柱状图,堆叠柱状图,簇状柱状图,饼状图,散点图,折线图 其中柱状图和散点图加入了自定义颜色的功能 项目是jdk8+maven+lombok构建 代

    前言

    这个项目是公司有新的需求,需要用java来绘制一些图表,但是自己又完全没有搞过这一块,在实现功能的过程中,发现poi这块的针对word的官方文档并不是很详细,所有才有了这个博客的由来

    其中参考了很多国内外大佬的博文,里面也有一些代码是直接粘贴复制过来,稍加改动实现的,如果有侵权请联系我删除

    功能

    这里包含了使用java绘制word里面的

    普通柱状图,堆叠柱状图,簇状柱状图,饼状图,散点图,折线图

    其中柱状图和散点图加入了自定义颜色的功能

    项目是jdk8+maven+lombok构建

    代码本体

    依赖部分

    <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.2</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>4.1.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml-schemas</artifactId>
                <version>4.1.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>4.1.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-scratchpad</artifactId>
                <version>4.1.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-collections4</artifactId>
                <version>4.4</version>
            </dependency>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.13</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>1.19</version>
            </dependency>
            <dependency>
                <groupId>org.apache.xmlbeans</groupId>
                <artifactId>xmlbeans</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>ooxml-schemas</artifactId>
                <version>1.4</version>
            </dependency>
        </dependencies>

    WordUtil本体

    import com.lh.word.form.*;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.ss.util.CellReference;
    import org.apache.poi.util.Units;
    import org.apache.poi.xddf.usermodel.XDDFColor;
    import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
    import org.apache.poi.xddf.usermodel.XDDFSolidFillProperties;
    import org.apache.poi.xddf.usermodel.chart.*;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.apache.poi.xwpf.usermodel.*;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.*;
    
    /**
     * Copyright (C), 2006-2010, ChengDu ybya info. Co., Ltd.
     * FileName: WordUtils.java
     *
     * @author lh
     * @version 1.0.0
     * @Date 2021/02/02 16:04
     */
    public class WordUtils {
    
        /**
         * 获取图表对象
         *
         * @param document word对象
         * @param width    默认15
         * @param height   默认10
         * @return
         */
        public XWPFChart getChart(XWPFDocument document, Integer width, Integer height) throws IOException, InvalidFormatException {
            if (width == null) {
                width = 15;
            }
            if (height == null) {
                height = 10;
            }
            return document.createChart(width * Units.EMU_PER_CENTIMETER, height * Units.EMU_PER_CENTIMETER);
        }
    
        /**
         * 创建普通柱状图-簇状柱状图-堆叠柱状图
         *
         * @param chart        图表对象
         * @param barChartForm 数据对象
         */
        public void createBarChart(XWPFChart chart, BarChartForm barChartForm) throws Exception {
            String[] categories = barChartForm.getCategories();
            List<Double[]> tableData = barChartForm.getTableData();
            List<String> colorTitles = barChartForm.getColorTitles();
            String title = barChartForm.getTitle();
            if (colorTitles.size() != tableData.size()) {
                throw new Exception("颜色标题个数,必须和数组个数相同");
            }
            for (Double[] tableDatum : tableData) {
                if (tableDatum.length != categories.length) {
                    throw new Exception("每个数组的元素个数,必须和");
                }
            }
            // 设置标题
            chart.setTitleText(title);
            //标题覆盖
            chart.setTitleOverlay(false);
    
            // 处理对应的数据
            int numOfPoints = categories.length;
            String categoryDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 0, 0));
            XDDFDataSource<String> categoriesData = XDDFDataSourcesFactory.fromArray(categories, categoryDataRange, 0);
            List<XDDFChartData.Series> seriesList = new ArrayList<>();
    
            // 创建一些轴
            XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
            bottomAxis.setTitle(barChartForm.getBottomTitle());
            XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
            leftAxis.setTitle(barChartForm.getBottomTitle());
            leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
            leftAxis.setCrossBetween(AxisCrossBetween.BETWEEN);
            // 创建柱状图的类型
            XDDFChartData data = chart.createData(ChartTypes.BAR, bottomAxis, leftAxis);
            // 为图表添加数据
            for (int i = 0; i < tableData.size(); i++) {
                XDDFChartData.Series series = data.addSeries(categoriesData, XDDFDataSourcesFactory.fromArray(
                        tableData.get(i), chart.formatRange(new CellRangeAddress(1, numOfPoints, i, i))));
                seriesList.add(series);
            }
            for (int i = 0; i < seriesList.size(); i++) {
                seriesList.get(i).setTitle(colorTitles.get(i), setTitleInDataSheet(chart, colorTitles.get(i), 1));
            }
            // 指定为簇状柱状图
            if (tableData.size() > 1) {
                ((XDDFBarChartData) data).setBarGrouping(barChartForm.getGrouping());
                chart.getCTChart().getPlotArea().getBarChartArray(0).addNewOverlap().setVal(barChartForm.getNewOverlap());
            }
    
            // 指定系列颜色
            for (BarChartForm.ColorCheck colorCheck : barChartForm.getList()) {
                XDDFSolidFillProperties fillMarker = new XDDFSolidFillProperties(colorCheck.getXddfColor());
                XDDFShapeProperties propertiesMarker = new XDDFShapeProperties();
                // 给对象填充颜色属性
                propertiesMarker.setFillProperties(fillMarker);
                chart.getCTChart().getPlotArea().getBarChartArray(0).getSerArray(colorCheck.getNum()).addNewSpPr().set(propertiesMarker.getXmlObject());
            }
    
            ((XDDFBarChartData) data).setBarDirection(BarDirection.COL);
            // 设置多个柱子之间的间隔
            // 绘制图形数据
            chart.plot(data);
            // create legend
            XDDFChartLegend legend = chart.getOrAddLegend();
            legend.setPosition(LegendPosition.LEFT);
            legend.setOverlay(false);
    
    
        }
    
    
        /**
         * 创建折线图
         *
         * @param chart         图表对象
         * @param lineChartForm 数据对象
         */
        public void createLineChart(XWPFChart chart, LineChartForm lineChartForm) {
            // 标题
            chart.setTitleText(lineChartForm.getTitle());
            //标题覆盖
            chart.setTitleOverlay(false);
            //图例位置
            XDDFChartLegend legend = chart.getOrAddLegend();
            legend.setPosition(LegendPosition.TOP);
            //分类轴标(X轴),标题位置
            XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
            bottomAxis.setTitle(lineChartForm.getBottomTitle());
            //值(Y轴)轴,标题位置
            XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
            leftAxis.setTitle(lineChartForm.getLeftTitle());
            // 处理数据
            XDDFCategoryDataSource bottomDataSource = XDDFDataSourcesFactory.fromArray(lineChartForm.getBottomData());
            XDDFNumericalDataSource<Integer> leftDataSource = XDDFDataSourcesFactory.fromArray(lineChartForm.getLeftData());
    
            // 生成数据
            XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
    
            // 不自动生成颜色
            data.setVaryColors(lineChartForm.getVaryColors());
    
            //图表加载数据,折线1
            XDDFLineChartData.Series series = (XDDFLineChartData.Series) data.addSeries(bottomDataSource, leftDataSource);
    
            //是否弯曲
            series.setSmooth(lineChartForm.getSmooth());
    
            //设置标记样式
            series.setMarkerStyle(lineChartForm.getStyle());
    
            //绘制
            chart.plot(data);
        }
    
        /**
         * 创建散点图
         *
         * @param chart            图表对象
         * @param scatterChartForm 数据对象
         */
        public void createScatterChart(XWPFChart chart, ScatterChartForm scatterChartForm) {
            // 标题
            chart.setTitleText(scatterChartForm.getTitle());
            //标题覆盖
            chart.setTitleOverlay(false);
            //图例位置
            XDDFChartLegend legend = chart.getOrAddLegend();
            legend.setPosition(LegendPosition.TOP);
            //分类轴标(X轴),标题位置
            XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
            bottomAxis.setTitle(scatterChartForm.getBottomTitle());
            //值(Y轴)轴,标题位置
            XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
            leftAxis.setTitle(scatterChartForm.getLeftTitle());
            XDDFScatterChartData data = null;
            for (int i = 0; i < scatterChartForm.getLists().size(); i++) {
                // 处理数据
                XDDFNumericalDataSource bottomDataSource = XDDFDataSourcesFactory.fromArray(scatterChartForm.getLists().get(i).getBottomData());
                XDDFNumericalDataSource<Integer> leftDataSource = XDDFDataSourcesFactory.fromArray(scatterChartForm.getLists().get(i).getLeftData());
                // 生成数据
                if (data == null) {
                    data = (XDDFScatterChartData) chart.createData(ChartTypes.SCATTER, bottomAxis, leftAxis);
                    // 是否自动生成颜色
                    data.setVaryColors(false);
                }
    
                //图表加载数据,折线1
                XDDFScatterChartData.Series series = (XDDFScatterChartData.Series) data.addSeries(bottomDataSource, leftDataSource);
                //设置标记样式
                series.setMarkerStyle(scatterChartForm.getStyle());
                series.setMarkerSize(scatterChartForm.getMarkerSize());
                // 设置系列标题
                series.setTitle(scatterChartForm.getLists().get(i).getTitle(), null);
                // 去除连接线
                chart.getCTChart().getPlotArea().getScatterChartArray(0).getSerArray(i).addNewSpPr().addNewLn().addNewNoFill();
                if (scatterChartForm.getLists().get(i).getXddfColor() != null) {
                    // 创建一个设置对象
                    XDDFSolidFillProperties fillMarker = new XDDFSolidFillProperties(scatterChartForm.getLists().get(i).getXddfColor());
                    XDDFShapeProperties propertiesMarker = new XDDFShapeProperties();
                    // 给对象填充颜色属性
                    propertiesMarker.setFillProperties(fillMarker);
                    // 修改系列颜色
                    chart.getCTChart().getPlotArea().getScatterChartArray(0).getSerArray(i).getMarker()
                            .addNewSpPr().set(propertiesMarker.getXmlObject());
                }
            }
    
            //绘制
            chart.plot(data);
    
    
        }
    
        /**
         * 创建饼状图
         *
         * @param chart        图表对象
         * @param pieChartForm 数据对象
         */
        public void createPieChart(XWPFChart chart, PieChartForm pieChartForm) {
            // 标题
            chart.setTitleText(pieChartForm.getTitle());
            //标题覆盖
            chart.setTitleOverlay(false);
            //图例位置
            XDDFChartLegend legend = chart.getOrAddLegend();
            legend.setPosition(LegendPosition.TOP);
            // 处理数据
            XDDFCategoryDataSource bottomDataSource = XDDFDataSourcesFactory.fromArray(pieChartForm.getBottomData());
            XDDFNumericalDataSource<Integer> leftDataSource = XDDFDataSourcesFactory.fromArray(pieChartForm.getLeftData());
    
            // 生成数据
            XDDFChartData data = chart.createData(ChartTypes.PIE, null, null);
            // 自动生成颜色
            data.setVaryColors(false);
    
            //图表加载数据
            XDDFChartData.Series series = data.addSeries(bottomDataSource, leftDataSource);
    
            //绘制
            chart.plot(data);
        }
    
        /**
         * 添加word中的标记数据 标记方式为 ${text}
         *
         * @param document word对象
         * @param textMap  需要替换的信息集合
         */
        public void changeParagraphText(XWPFDocument document, Map<String, String> textMap) {
            //获取段落集合
            List<XWPFParagraph> paragraphs = document.getParagraphs();
            for (XWPFParagraph paragraph : paragraphs) {
                //判断此段落时候需要进行替换
                String text = paragraph.getText();
                if (checkText(text)) {
                    List<XWPFRun> runs = paragraph.getRuns();
                    for (XWPFRun run : runs) {
                        //替换模板原来位置
                        run.setText(changeValue(run.toString(), textMap), 0);
                    }
                }
            }
        }
    
        /**
         * 替换表格中标记的数据 标记方式为 ${text}
         * 这里有个奇怪的问题 输入${}符号的时候需要把输入法切换到中文
         * ${}中间不能用数字,不能有下划线
         *
         * @param document word对象
         * @param textMap  需要替换的信息集合
         */
        public void changeTableText(XWPFDocument document, List<Map<String, String>> tableTextList) {
            //获取表格对象集合
            List<XWPFTable> tables = document.getTables();
            for (int i = 0; i < tables.size(); i++) {
                Map<String, String> textMap = tableTextList.get(i);
                //只处理行数大于等于2的表格
                XWPFTable table = tables.get(i);
                if (table.getRows().size() > 1) {
                    //判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入
                    if (checkText(table.getText())) {
                        List<XWPFTableRow> rows = table.getRows();
                        //遍历表格,并替换模板
                        eachTable(rows, textMap);
                    }
                }
            }
        }
    
        /**
         * 复制表头,插入行数据,这里的样式和表头一样
         *
         * @param document word对象
         * @param list     集合个数和word中的表格个数必须相同
         */
        public void copyHeaderInsertText(XWPFDocument document, List<TableForm> list) {
            //获取表格对象集合
            List<XWPFTable> tables = document.getTables();
            // 循环word中的所有表格
            for (int k = 0; k < tables.size(); k++) {
                // 获取单个表格
                XWPFTable table = tables.get(k);
                // 获取要替换的数据
                TableForm tableForm = list.get(k);
                Integer headerIndex = tableForm.getStartLine();
                List<String[]> tableList = tableForm.getData();
                if (null == tableList) {
                    return;
                }
                XWPFTableRow copyRow = table.getRow(headerIndex);
                List<XWPFTableCell> cellList = copyRow.getTableCells();
                if (null == cellList) {
                    break;
                }
                //遍历要添加的数据的list
                for (int i = 0; i < tableList.size(); i++) {
                    //插入一行
                    XWPFTableRow targetRow = table.insertNewTableRow(headerIndex + 1 + i);
                    //复制行属性
                    targetRow.getCtRow().setTrPr(copyRow.getCtRow().getTrPr());
    
                    String[] strings = tableList.get(i);
                    for (int j = 0; j < strings.length; j++) {
                        XWPFTableCell sourceCell = cellList.get(j);
                        //插入一个单元格
                        XWPFTableCell targetCell = targetRow.addNewTableCell();
                        //复制列属性
                        targetCell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr());
                        targetCell.setText(strings[j]);
                    }
                }
            }
        }
    
        public static void main(String[] args) {
    //        try (XWPFDocument document = new XWPFDocument(new FileInputStream("D:\\FreeMarker.docx"))) {
    //            WordUtils wordUtils = new WordUtils();
    //            Map<String, String> paragraphMap = new HashMap<>();
    //            paragraphMap.put("number", "10000");
    //            paragraphMap.put("date", "2020-03-25");
    //            wordUtils.changeParagraphText(document, paragraphMap);
    //
    //            List<Map<String, String>> tableTextList = new ArrayList<>();
    //            Map<String, String> tableMap = new HashMap<>();
    //            tableMap.put("name", "赵云");
    //            tableMap.put("sexual", "男");
    //            tableMap.put("birthday", "2020-01-01");
    //            tableMap.put("identify", "123456789");
    //            tableMap.put("phone", "18377776666");
    //            tableMap.put("address", "王者荣耀");
    //            tableMap.put("domicile", "中国-腾讯");
    //            tableMap.put("QQ", "是");
    //            tableMap.put("chat", "是");
    //            tableMap.put("blog", "是");
    //            tableTextList.add(tableMap);
    //            Map<String, String> tableMap2 = new HashMap<>();
    //            tableMap2.put("spring", "sony的名称");
    //            tableTextList.add(tableMap2);
    //            wordUtils.changeTableText(document, tableTextList);
    //
    //            List<TableForm> list = new ArrayList<>();
    //            TableForm tableForm = new TableForm();
    //            tableForm.setStartLine(7);
    //            tableForm.getData().add(new String[]{"露娜", "女", "野友", "666", "6660"});
    //            tableForm.getData().add(new String[]{"鲁班", "男", "射友", "222", "2220"});
    //            tableForm.getData().add(new String[]{"程咬金", "男", "肉友", "999", "9990"});
    //            tableForm.getData().add(new String[]{"太乙真人", "男", "辅友", "111", "1110"});
    //            tableForm.getData().add(new String[]{"貂蝉", "女", "法友", "888", "8880"});
    //            list.add(tableForm);
    //            TableForm tableForm2 = new TableForm();
    //            tableForm2.setStartLine(1);
    //            tableForm2.getData().add(new String[]{"18581588710", "蜘蛛侠", "100"});
    //            tableForm2.getData().add(new String[]{"18581588710", "战神", "200"});
    //            list.add(tableForm2);
    //            wordUtils.copyHeaderInsertText(document,list);
    //            try (FileOutputStream fileOut = new FileOutputStream("CreateWordXDDFChart.docx")) {
    //                document.write(fileOut);
    //            }
    //        } catch (Exception e) {
    //
    //        }
    
    
    //        try (XWPFDocument document = new XWPFDocument()) {
    //            WordUtils wordUtils = new WordUtils();
    //            XWPFChart chart = wordUtils.getChart(document, null, null);
    //            PieChartForm pieChartForm = new PieChartForm();
    //            pieChartForm.setTitle("标题");
    //            pieChartForm.setBottomData(new String[]{"俄罗斯", "加拿大", "美国", "中国", "巴西", "澳大利亚", "印度"});
    //            pieChartForm.setLeftData(new Integer[]{17098242, 9984670, 9826675, 9596961, 8514877, 7741220, 3287263});
    //            wordUtils.createPieChart(chart, pieChartForm);
    //            try (FileOutputStream fileOut = new FileOutputStream("CreateWordXDDFChart.docx")) {
    //                document.write(fileOut);
    //            }
    //        } catch (Exception e) {
    //
    //        }
    
    //
    //        try (XWPFDocument document = new XWPFDocument()) {
    //            WordUtils wordUtils = new WordUtils();
    //            XWPFChart chart = wordUtils.getChart(document, null, null);
    //            ScatterChartForm scatterChartForm = new ScatterChartForm();
    //            scatterChartForm.setTitle("测试");
    //            scatterChartForm.setBottomTitle("X轴");
    //            scatterChartForm.setLeftTitle("Y轴");
    //            scatterChartForm.setStyle(MarkerStyle.CIRCLE);
    //            scatterChartForm.setMarkerSize((short) 10);
    //            scatterChartForm.setVaryColors(false);
    //
    //            ScatterChartForm.AreaData areaData = new ScatterChartForm.AreaData();
    //            areaData.setBottomData(new Integer[]{1, 2, 3, 4, 5, 8, 7});
    //            areaData.setLeftData(new Integer[]{5, 5, 5, 4, 5, 6, 7});
    //            areaData.setTitle("测试1");
    //            scatterChartForm.getLists().add(areaData);
    //
    //            ScatterChartForm.AreaData areaData2 = new ScatterChartForm.AreaData();
    //            areaData2.setBottomData(new Integer[]{6,9});
    //            areaData2.setLeftData(new Integer[]{1,9});
    //            areaData2.setXddfColor(XDDFColor.from(new byte[]{(byte)0xFF, (byte)0xE1, (byte)0xFF}));
    //            areaData2.setTitle("测试2");
    //            scatterChartForm.getLists().add(areaData2);
    //            wordUtils.createScatterChart(chart, scatterChartForm);
    //
    //            try (FileOutputStream fileOut = new FileOutputStream("CreateWordXDDFChart.docx")) {
    //                document.write(fileOut);
    //            }
    //        } catch (Exception e) {
    //
    //        }
    
    //        try (XWPFDocument document = new XWPFDocument()) {
    //            WordUtils wordUtils = new WordUtils();
    //            XWPFChart chart = wordUtils.getChart(document, null, null);
    //            LineChartForm lineChartForm = new LineChartForm();
    //            lineChartForm.setTitle("测试");
    //            lineChartForm.setBottomTitle("X轴");
    //            lineChartForm.setLeftTitle("Y轴");
    //            lineChartForm.setStyle(MarkerStyle.STAR);
    //            lineChartForm.setMarkerSize((short) 6);
    //            lineChartForm.setSmooth(false);
    //            lineChartForm.setVaryColors(false);
    //            lineChartForm.setBottomData(new String[] {"俄罗斯","加拿大","美国","中国","巴西","澳大利亚","印度"});
    //            lineChartForm.setLeftData(new Integer[] {17098242,9984670,9826675,9596961,8514877,7741220,3287263});
    //            wordUtils.createLineChart(chart, lineChartForm);
    //            try (FileOutputStream fileOut = new FileOutputStream("CreateWordXDDFChart.docx")) {
    //                document.write(fileOut);
    //            }
    //        } catch (Exception e) {
    //
    //        }
    
    
            try (XWPFDocument document = new XWPFDocument()) {
                WordUtils wordUtils = new WordUtils();
                XWPFChart chart = wordUtils.getChart(document, null, null);
                String[] categories = new String[]{"Lang 1", "Lang 2", "Lang 3"};
                Double[] valuesA = new Double[]{10d, 20d, 30d};
                Double[] valuesB = new Double[]{15d, 25d, 35d};
                Double[] valuesC = new Double[]{10d, 8d, 20d};
                List<Double[]> list = new ArrayList<>();
                list.add(valuesA);
                list.add(valuesB);
                list.add(valuesC);
                BarChartForm barChartForm = new BarChartForm();
                barChartForm.setTitle("测试");
                barChartForm.setCategories(categories);
                barChartForm.setTableData(list);
                barChartForm.setColorTitles(Arrays.asList("a", "b", "c"));
                barChartForm.setGrouping(BarGrouping.STACKED);
                barChartForm.setNewOverlap((byte) 100);
    
                BarChartForm.ColorCheck colorCheck = new BarChartForm.ColorCheck();
                colorCheck.setXddfColor(XDDFColor.from(new byte[]{(byte) 0xFF, (byte) 0x33, (byte) 0x00}));
                colorCheck.setNum(0);
                barChartForm.getList().add(colorCheck);
    
                BarChartForm.ColorCheck colorCheck2 = new BarChartForm.ColorCheck();
                colorCheck2.setXddfColor(XDDFColor.from(new byte[]{(byte) 0x91, (byte) 0x2C, (byte) 0xEE}));
                colorCheck2.setNum(1);
                barChartForm.getList().add(colorCheck2);
    
                BarChartForm.ColorCheck colorCheck3 = new BarChartForm.ColorCheck();
                colorCheck3.setXddfColor(XDDFColor.from(new byte[]{(byte) 0x00, (byte) 0x00, (byte) 0x80}));
                colorCheck3.setNum(2);
                barChartForm.getList().add(colorCheck3);
    
    
                wordUtils.createBarChart(chart, barChartForm);
                try (FileOutputStream fileOut = new FileOutputStream("CreateWordXDDFChart.docx")) {
                    document.write(fileOut);
                }
            } catch (Exception e) {
    
            }
        }
    
        /**
         * 判断文本中时候包含$
         *
         * @param text 文本
         * @return 包含返回true, 不包含返回false
         */
        public static boolean checkText(String text) {
            boolean check = false;
            if (text.indexOf("$") != -1) {
                check = true;
            }
            return check;
        }
    
        /**
         * 匹配传入信息集合与模板
         *
         * @param value   模板需要替换的区域
         * @param textMap 传入信息集合
         * @return 模板需要替换区域信息集合对应值
         */
        public static String changeValue(String value, Map<String, String> textMap) {
            Set<Map.Entry<String, String>> textSets = textMap.entrySet();
            for (Map.Entry<String, String> textSet : textSets) {
                //匹配模板与替换值 格式${key}
                String key = "${" + textSet.getKey() + "}";
                if (value.indexOf(key) != -1) {
                    value = textSet.getValue();
                }
            }
            //模板未匹配到区域替换为空
            if (checkText(value)) {
                value = "";
            }
            return value;
        }
    
        /**
         * 遍历表格,并替换模板
         *
         * @param rows    表格行对象
         * @param textMap 需要替换的信息集合
         */
        public static void eachTable(List<XWPFTableRow> rows, Map<String, String> textMap) {
            for (XWPFTableRow row : rows) {
                List<XWPFTableCell> cells = row.getTableCells();
                for (XWPFTableCell cell : cells) {
                    //判断单元格是否需要替换
                    if (checkText(cell.getText())) {
                        List<XWPFParagraph> paragraphs = cell.getParagraphs();
                        for (XWPFParagraph paragraph : paragraphs) {
                            List<XWPFRun> runs = paragraph.getRuns();
                            for (XWPFRun run : runs) {
                                run.setText(changeValue(run.toString(), textMap), 0);
                            }
                        }
                    }
                }
            }
        }
    
        static CellReference setTitleInDataSheet(XWPFChart chart, String title, int column) throws Exception {
            XSSFWorkbook workbook = chart.getWorkbook();
            XSSFSheet sheet = workbook.getSheetAt(0);
            XSSFRow row = sheet.getRow(0);
            if (row == null)
                row = sheet.createRow(0);
            XSSFCell cell = row.getCell(column);
            if (cell == null)
                cell = row.createCell(column);
            cell.setCellValue(title);
            return new CellReference(sheet.getSheetName(), 0, column, true, true);
        }
    }

    其中里面的一些Form类我没有在博客中贴出来,需要可自行在下面的github中下载

    gitHub地址

     

    展开全文
  • 折线图 当数据分类非常多,用柱状图描述时会眼花缭乱的时候就可以选择折线图啦。 而且,用折线图更能容易第表现出来数据的增长...现将所有的数据搞成一列,并且用该列数据直接绘制折线图(注意,中间要留这两个空位置,

    折线图

    当数据分类非常多,用柱状图描述时会眼花缭乱的时候就可以选择折线图啦。
    而且,用折线图更能容易第表现出来数据的增长与否。
    常见的错误:
    在这里插入图片描述
    那么可以年份文本化之后再进行折线图的绘制。文本化的方法,输入两个自动填充即可。
    在这里插入图片描述
    将图片可以直接粘贴到word中,切忌截图后粘贴。
    双坐标折线图:
    可以直接调节坐标轴的最小值最大值来调节坐曲线在整个图形上的位置,以确保达到我们想要的结果。
    在这里插入图片描述
    如何绘制这样的折线图:柱状图顶端的折线图
    在这里插入图片描述
    现将所有的数据搞成一列,并且用该列数据直接绘制折线图(注意,中间要留这两个空位置,用来分开两个柱子)
    1.添加两组数据并将其中的一组数据用面积图进行填充。
    2.然后将坐标轴设置一下即可。

    散点图

    在这里插入图片描述
    散点图同样可以用Matlab中的plot函数进行绘制。
    1.选中数据直接绘制图形
    在这里插入图片描述
    2.调整坐标轴的范围大小即可。
    在这里插入图片描述
    3.也可以再加上趋势线来添加趋势线(回归先)
    在这里插入图片描述
    带有标记的散点图的绘制:
    首先将数据预处理成这个样子:(将两种数据分开)。
    在这里插入图片描述
    之后选中数据绘制散点图即可。
    在这里插入图片描述

    箱线图

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  •  上午完成了JFreeChart绘制饼图、折线图两种。整体上感觉JFreeChart功能还是比较强大的,只是没有很好的文档,官方网站上的是要收费的。网上找了一些,也只是基本的,然后雷同事也给了我一个word文档,这些基本上也...
  • 30.词云图(Word cloud) 30.1.Example 1: Basic word cloud 31.3D绘图 31.1.在3D图上绘制2D数据 31.2.3D 散点图 (scatterplot) 31.3.3D surface (color map) ...相对柱状图,折线图,饼图等等用来显示数值数
  • poi_word_utils 使用poi绘制word图表以及表格...这里包含了投影普通柱状图堆叠柱状图簇状柱状图折线图饼状图散点图 其中柱状图和散点图加入了自定义颜色的功能在WordUtil类中main方法里面,基本上包含了所有的测试用例
  • 用JFreeChart绘制图表,可以绘制二维柱状图、三维柱状图、折线图、以及饼图,网上也有很多关于JFreeChart绘制图像的源码,但是还是需要自己去总结一下这个过程。 对于图表并不陌生,office word中我们对数据进行...
  • 本书以实例的方式讲解了用Excel制作各种图表以及用Word绘制表格的许多操作方法和技巧。全书共分13章,第1章和第2章主要介绍图表的创建与编辑的基础操作;第3章至第9章分别介绍了柱形图、条形图、折线图、 XY散点图、...
  • 本实例对这两个问题进行了有效的解决,同时结合第三方开源类库itext详细介绍了导出一维2D/3D的饼状图,柱状图和折线图分别到word, pdf和html文件,和导出二维2D/3D的饼状图,柱状图和折线图分别到word,pdf和ht
  • 报表导出涉及的重要问题:无论是针对饼状图,柱状图,还是折线图,现在报表上显示的都是数据的名称, 根据实际需求,导出的报表饼状图上显示的应该是百分比,柱状图和折线图报表显示的应该是数据数量. 重点:1.通过Plot的...
  • CPU动态折线图 QtDataVisualization 柱状图3D 太阳磁场线 余弦波3D PyQtGraph 鼠标获取X轴坐标 禁止右键点击功能、鼠标滚轮,添加滚动条等功能 工具类 滚动区相关 Animation 窗口淡入淡出 右键菜单动画 ...
  • 基于SpringMVC annotation 的图形验证码

    热门讨论 2011-12-08 21:08:28
    // 绘制一个填色矩形 // 画一条折线 BasicStroke bs = new BasicStroke(2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL); // 创建一个供画笔选择线条粗细的对象 g2d.setStroke(bs); // 改变线条的粗细 g....
  • 实例253 在ListView控件中绘制底纹 实例254 在列表视图中拖动视图项 实例255 使ListView控件中的选择项高亮显示 实例256 制作带复选框的ListView控件 11.7 选择类控件应用 实例257 利用选择控件实现权限设置 ...
  • 实例253 在ListView控件中绘制底纹 实例254 在列表视图中拖动视图项 实例255 使ListView控件中的选择项高亮显示 实例256 制作带复选框的ListView控件 11.7 选择类控件应用 实例257 利用选择控件实现权限设置 ...
  • 实例253 在ListView控件中绘制底纹 实例254 在列表视图中拖动视图项 实例255 使ListView控件中的选择项高亮显示 实例256 制作带复选框的ListView控件 11.7 选择类控件应用 实例257 利用选择控件实现权限设置 ...
  • 主要内容有C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据...Word互操作、高效应用Excel、基本图形绘制、图像处理技术、常用图表应用、动画处理技术、音频与视频控制...
  • 主要内容有C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据...Word互操作、高效应用Excel、基本图形绘制、图像处理技术、常用图表应用、动画处理技术、音频与视频控制...
  • 实例074 绘制家谱——用ASP.NET创建类文件 114 实例075 定制家族权力——设置成员访问的权限 116 实例076 展现家族——实例化类对象 118 实例077 家族成员——类的成员字段 120 实例078 家族行为——类的成员方法 ...
  • 实例074 绘制家谱——用ASP.NET创建类文件 114 实例075 定制家族权力——设置成员访问的权限 116 实例076 展现家族——实例化类对象 118 实例077 家族成员——类的成员字段 120 实例078 家族行为——类的成员方法 ...
  • 实例074 绘制家谱——用ASP.NET创建类文件 114 实例075 定制家族权力——设置成员访问的权限 116 实例076 展现家族——实例化类对象 118 实例077 家族成员——类的成员字段 120 实例078 家族行为——类的成员方法 ...
  • 2.3.12 在折线图或面积图中添加垂直线 53 2.3.13 添加涨/跌柱线到图表中 54 2.3.14 使用误差线显示可接受的偏差 55 2.4 设置数据系列的格式 55 2.5 使用“格式”选项卡 56 2.5.1 将文本转换为艺术字 56 ...
  • 2.3.12 在折线图或面积图中添加垂直线 53 2.3.13 添加涨/跌柱线到图表中 54 2.3.14 使用误差线显示可接受的偏差 55 2.4 设置数据系列的格式 55 2.5 使用“格式”选项卡 56 2.5.1 将文本转换为艺术字 56 ...
  • 2.3.12 在折线图或面积图中添加垂直线 53 2.3.13 添加涨/跌柱线到图表中 54 2.3.14 使用误差线显示可接受的偏差 55 2.4 设置数据系列的格式 55 2.5 使用“格式”选项卡 56 2.5.1 将文本转换为艺术字 56 ...
  • 2.3.12 在折线图或面积图中添加垂直线 53 2.3.13 添加涨/跌柱线到图表中 54 2.3.14 使用误差线显示可接受的偏差 55 2.4 设置数据系列的格式 55 2.5 使用“格式”选项卡 56 2.5.1 将文本转换为艺术字 56 ...
  • 2.3.12 在折线图或面积图中添加垂直线 53 2.3.13 添加涨/跌柱线到图表中 54 2.3.14 使用误差线显示可接受的偏差 55 2.4 设置数据系列的格式 55 2.5 使用“格式”选项卡 56 2.5.1 将文本转换为艺术字 56 ...
  • 2.3.12 在折线图或面积图中添加垂直线 53 2.3.13 添加涨/跌柱线到图表中 54 2.3.14 使用误差线显示可接受的偏差 55 2.4 设置数据系列的格式 55 2.5 使用“格式”选项卡 56 2.5.1 将文本转换为艺术字 56 ...

空空如也

空空如也

1 2 3 4
收藏数 78
精华内容 31
关键字:

word绘制折线图