JAVA集成echars生成折线图

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>

#### 3.java代码部分


###### 1.将下载的js文件的完整路径定义成常量,方便使用(注意不同环境,存放的位置可能不同,需要进行修改)



//windows
private static final String JSpath = "F:/openSource/echars/echarts-convert/echarts-convert1.js";

//linux
//private static final String JSpath = "/usr/local/echars/echarts-convert/echarts-convert1.js";

###### 2.根据Echars生成图片的方法(这里的循环是为了将线条数据进行组装)



public String createPngByEchars(List<Map<String, Object>> lines, Map<String, Object> property) throws Exception {
MetricsMonitor metricsMonitor = new MetricsMonitor();
List<List> list = new ArrayList<>();

    for (Map<String, Object> line : lines) {
        List<Map<String, Object>> valueData = (List<Map<String, Object>>) line.get("valueData");
        List<PmsMetricsMonitorIndexVO> monitorIndexVOList = new ArrayList<>();
        for (Map<String, Object> map : valueData) {
            PmsMetricsMonitorIndexVO vo = new PmsMetricsMonitorIndexVO();
            vo.setCurrentTimeStr(map.get("watchTime").toString());
            if (map.get("value") == null) {
                vo.setTechDeliDura(null);
            } else {
                vo.setTechDeliDura(new BigDecimal(map.get("value").toString()));
            }
            monitorIndexVOList.add(vo);
        }
        list.add(monitorIndexVOList);
    }

    metricsMonitor.setMetricsMonitorList(list);
    Option option = getTechDeliDuraOption(metricsMonitor, lines, property);

    return generateEChart(new Gson().toJson(option),property);
}

参数说明:lines中有线条的一些规格如:线条颜色,线条粗细等等,每条线的点位数据则在其中使用data进行数组存放
property中存放着图表的名称,Y轴的最大最小值等属性信息


###### 3.配置图表的属性和样式



public static Option getTechDeliDuraOption(MetricsMonitor
metricsMonitor, List<Map<String, Object>> lines, Map<String, Object> property) {
List<List> metricsMonitorList = metricsMonitor.getMetricsMonitorList();
Option optionTechDeliDura = new Option();

    // 设置标题
    Title title = new Title();
    title.setText(property.get("name").toString());
    title.setTextAlign(X.left);
    optionTechDeliDura.setTitle(title);

    // 设置提示框
    optionTechDeliDura.tooltip().trigger(Trigger.axis);
    // 设置图例
    Legend legend = new Legend();
    List<Object> legendData = new ArrayList<>();
    for (Map<String, Object> line : lines) {
        legendData.add(line.get("point").toString());
    }
    //这里不设置图例的位置信息,会出现图例和标题重合的问题
    legend.setX("right");
    legend.setY("top");
    legend.setOrient(Orient.horizontal);
    optionTechDeliDura.setLegend(legend);

    // 设置x轴
    CategoryAxis xAxis = new CategoryAxis();
    xAxis.setType(AxisType.category);
    xAxis.setBoundaryGap(false);
    List<Object> xAxisData = new ArrayList<>();
    //获取上一段代码存的线条的X轴数据
    for (PmsMetricsMonitorIndexVO vo : metricsMonitorList.get(0)) {
        xAxisData.add(vo.getCurrentTimeStr());
    }
    xAxis.setData(xAxisData);
    AxisLabel axisLabel = new AxisLabel();
    //配置X轴数据的倾斜角度,使X轴有更多空间展示数据
    axisLabel.setRotate(45);
    xAxis.setAxisLabel(axisLabel);
    List<Axis> axisListX = new ArrayList<>();
    axisListX.add(xAxis);
    optionTechDeliDura.setxAxis(axisListX);

    // 设置y轴
    AxisLabel axisLabel2 = new AxisLabel();
    axisLabel2.setFormatter("{value} " + lines.get(0).get("unit")); // 替换 "单位" 为您想要的单位
    ValueAxis yAxis = new ValueAxis();
    yAxis.setType(AxisType.value);
    //配置Y轴的最大最小值
    yAxis.setMax(new BigDecimal(property.get("valueMax").toString()).intValue());
    yAxis.setMin(new BigDecimal(property.get("valueMin").toString()).intValue());
    List<Axis> axisListY = new ArrayList<>();
    axisListY.add(yAxis);
    optionTechDeliDura.setyAxis(axisListY);

    //定义整个图片的宽和高
    Grid grid = new Grid();
    grid.setWidth(900);
    grid.setHeight(400);
    optionTechDeliDura.setGrid(grid);


    Label lineLabel = new Label();
    //这个配置是绘制出来的线条上,每个点位需不需要展示数据信息
    lineLabel.setShow(false);
    lineLabel.setPosition(Position.top);

    //绘制线条,定义线条的颜色,粗细等属性
    for (int i = 0; i < metricsMonitorList.size(); i++) {
        Line lineTechDeliDura = new Line();
        List<Object> techDeliDuraData = new ArrayList<>();
        for (PmsMetricsMonitorIndexVO vo : metricsMonitorList.get(i)) {
            if (vo.getTechDeliDura() != null) {
                lineTechDeliDura.setType(SeriesType.line);
                lineTechDeliDura.setName(lines.get(i).get("point").toString());
                lineTechDeliDura.itemStyle().normal().color(lines.get(i).get("color").toString());
                                    lineTechDeliDura.itemStyle().normal().lineStyle()
                                        .width(Integer.parseInt(lines.get(i).get("blod").toString())); 
                techDeliDuraData.add(vo.getTechDeliDura());
            } else {
                techDeliDuraData.add("-");
            }
            lineTechDeliDura.setData(techDeliDuraData);
            lineTechDeliDura.itemStyle().normal().label(lineLabel);
            lineTechDeliDura.setShowAllSymbol(true);
            optionTechDeliDura.series(lineTechDeliDura);
        }
    }

    return optionTechDeliDura;
}

###### 4.创建生成图片需要的json文件



public static String writeFile(String options) {
//todo 不同环境,位置不同
//String dataPath = “/usr/local/echars/picture/” + UUID.randomUUID().toString().substring(0, 8) + “.json”;
String dataPath = “C:/Users/asus/Desktop/test/” + UUID.randomUUID().toString().substring(0, 8) + “.json”;
try {
File writename = new File(dataPath); // 相对路径,如果没有则要建立一个新的output.txt文件
if (!writename.exists()) { //文件不存在则创建文件,先创建目录
File dir = new File(writename.getParent());
dir.mkdirs();
writename.createNewFile(); // 创建新文件
}
BufferedWriter out = new BufferedWriter(new FileWriter(writename));
out.write(options); // \r\n即为换行
out.flush(); // 把缓存区内容压入文件
out.close(); // 最后记得关闭文件
} catch (IOException e) {
e.printStackTrace();
}
return dataPath;
}


 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/dcdffccb5c6cccc3abe946935b317027.png)

![img](https://img-blog.csdnimg.cn/img_convert/66d09229c63657f3cd1acadea48e151f.png)

![img](https://img-blog.csdnimg.cn/img_convert/7abf56acc9d8ea6b4a04168bd77ff654.png)

![img](https://img-blog.csdnimg.cn/img_convert/c420a12e37868511310eae33af35e64e.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

43c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

![](https://img-blog.csdnimg.cn/img_convert/378bf8052c67822cdb9337340ed9f0a1.jpeg)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值