<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)