ngx-echarts响应式图表
一、代码
html代码
<!-- html -->
<nz-card style="background-color: #0e0b2a;border: 0px;color: #8cc5fe;min-height: 180px;width: 100%;height: 100%;">
<div style="padding: 4px 12px;height: 200px;">
<label>
{{title}}
</label>
<div echarts id="powerline" [options]="option" (chartInit)="onChartInit($event)" [loading]="isLoading" [loadingOpts]="loadingOpts" [autoResize]="'true'" style="position: relative;left: 4px;-webkit-tap-highlight-color: transparent;user-select: none;overflow-y: hidden;width: 100%;height: 100%;" class="demo-chart"></div>
</div>
</nz-card>
ts代码
import { Component, OnInit, Input, SimpleChanges, HostListener, ElementRef } from '@angular/core';
import * as echarts from 'echarts';
import { fromEvent } from 'rxjs'; @Component({
selector: 'app-powerline',
templateUrl: './powerline.component.html',
styleUrls: ['./powerline.component.css']
})
export class PowerlineComponent implements OnInit {
@Input() title:string;
@Input() value:any; public option:any;
public echartsInstance: any; //时间轴
private timeline_data:any;
//功率曲线轴
private power_data:any; //自定义监听事件
private pageResize:any;
constructor(private el:ElementRef) {
//监听窗口resize事件,调用重绘图表方法,重新绘图
this.pageResize = fromEvent(window, 'resize').subscribe(() => {
this.resizeChart();
});
} //ngx-echarts初始化,获得图表实例
onChartInit(event) {
this.echartsInstance = event;
} //重新绘制图表
resizeChart() {
if (this.echartsInstance) {
this.echartsInstance.resize();
}
} ngOnInit() { } ngOnChanges(changes: SimpleChanges): void {
// this.power_data = this.processPowerLineData();
this.option = {
title: {
text: '',
},
tooltip: {
trigger: 'axis'
},
legend: {
data:['功率'],
bottom :10,
},
grid:{
x:35,
y:25,
x2:30,
y2:50,
borderWidth:1
},
toolbox: {
show: false,
feature: {
magicType: {show: false, type: ['stack', 'tiled']},
saveAsImage: {show: false}
}
},
xAxis: {
name:'时间',
type: 'category',
nameGap :6,
nameTextStyle :{
color :'#364c64',
},
boundaryGap: false,
axisLine :{
show:true,
lineStyle :{
color:'#083b73',
width :0,
//shadowOffsetY :10,
},
},
axisTick :{
show:false,
},
splitLine :{
show:false,
},
axisLabel:{
color :'#364c64' , },
data: this.processTimeLineData(),
},
yAxis: [{
type: 'value',
name:'功率(KW)',
max:1000,
nameTextStyle :{
color :'#364c64',
},
axisLine :{
show:true,
lineStyle :{
color:'#19193f',
width :2,
//shadowOffsetY :10,
},
},
axisTick :{
show:false,
},
splitLine :{
show:false,
},
axisLabel:{
color :'#364c64' ,
margin:35,
textStyle: {
align:'left',
// baseline:'left',
// left:-40,
} }, },{
type: 'value',
name:'',
max:2500,
axisLine :{
show:true,
lineStyle :{
color:'#19193f',
width :2,
},
},
axisTick :{
show:false,
},
splitLine :{
show:false,
},
axisLabel:{
color :'#22a0f3' , }, }],
series: [{
name: '功率',
type: 'line',
symbol: 'none',
itemStyle :{
show: false,
color :'#22a0f3',
borderWidth :1,
},
lineStyle :{
color:'#22a0f3',
//type:'dashed',
},
smooth: true,
data:this.processPowerLineData(),
// data:this.power_data,
// data: [300, 590, 350, 790, 360, 550, 450,300, 590, 350, 790,300, 590, 350, 790, 360, 550, 450,300, 590, 350,300, 590,580]
}]
}; } //处理功率曲线时间轴数组
processTimeLineData(){
const _self=this;
_self.timeline_data = [];
if(_self.value){
if(0 != _self.value.length){
_self.value.map(
item =>{
let tem_a = item.time;
if(tem_a.length ==1){
tem_a = "0" + item.time + ":00";
}else if(tem_a.length == 2){
tem_a = item.time + ":00";
}else{
tem_a = item.time + ":00";
}
// parseInt(item.tem_a)
_self.timeline_data.push(tem_a);
}
)
}else{
_self.timeline_data = ['00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00',"24:00"];
}
}else{
_self.timeline_data = ['00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00',"24:00"];
}
return _self.timeline_data;
} //处理功率曲线数据数组
processPowerLineData(){
const _self=this;
_self.power_data = [];
if(_self.value){
if(0 != _self.value.length){
_self.value.map(
item =>{
_self.power_data.push(parseInt(item.powerp)) ;
}
)
}else{
_self.power_data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
}
}else{
_self.power_data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
}
return _self.power_data;
} ngOnDestroy(): void {
//销毁功率因数曲线的订阅事件
if(this.pageResize){
this.pageResize.unsubscribe();
}
} }
二、截图
改变窗口大小前:
改变窗口大小后:
三、说明
注意:ngx-echarts想要图表能够随着窗口大小自适应,有两个关键点:
① 容纳图表的容器支持自适应
② 监听窗口的resize事件,当监听到变化时候,重新绘制图表
ngx-echarts响应式图表的更多相关文章
- echarts 响应式布局
<body> <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="width: ...
- 【译】用 Chart.js 做漂亮的响应式表单
数据包围着我们.虽然搜索引擎和其他应用都对基于文本方式表示的数据偏爱有加,但人们发现可视化是更容易理解的一种方式.今年初,SitePoint 发表了 Aurelio 的文章< Chart.js简 ...
- 怎样把echarts图表做成响应式的
如果想要把echarts图表给做成响应式的那么就应该用rem 单位,给图表的外围容器设置rem 单位,然后调用jquery 的resize方法,$(window).resize(function(){ ...
- Echarts多个图表响应式以及其他问题
1.限制柱状图的宽度(自适应的柱子很大) barMaxWidth:30//设置柱状最大的宽度 2.设置y轴的label标签显示(单位 元 转 万) axisLabel: { formatte ...
- 基于 Vue + Element 的响应式后台模板
项目地址 https://github.com/caochangkui/vue-element-responsive-demo 主要功能 响应式侧边栏 面包屑导航(结合router.js) 路由动效 ...
- Metronic – 超赞!基于 Bootstrap 的响应式后台管理模板
Metronic 是一套精美的响应式后台管理模板,基于强大的 Twitter Bootstrap 框架实现.Metronic 拥有简洁优雅的 Metro UI 风格界面,6 种颜色可选,76 个模板页 ...
- Android响应式界面开发要点
现在很多项目需要到达同一个Apk既可以在Phone上跑也尅在tablet上跑,即界面要适应不同尺寸和类型的需要而自动调整.这个即为响应式设计.在web开发商响应式设计已经是个常谈的内容了,而对于and ...
- [译] Swift 的响应式编程
原文 https://github.com/bboyfeiyu/iOS-tech-frontier/blob/master/issue-3/Swift的响应式编程.md 原文链接 : Reactiv ...
- echarts生成的图表大小怎么随屏幕的大小改变自适应
最近在做图表,记录一下用到的知识点,当做自己的日记吧,会不断添加新内容 1,echarts生成的图表大小怎么随屏幕的大小改变自适应? this.chart.setOption(this.options ...
随机推荐
- 连接SSH服务器的脚本,自动发送用户名和密码
利用expect 自动输入用户名和密码 脚本如下 #!/usr/bin/expect # connect ssh server set timeout 30 spawn ssh -l user_nam ...
- Presto + Superset 数据仓库及BI
基于Presto和superset搭建数据分析平台. Presto可以作为数据仓库,能够连接多种数据库和NoSql,同时查询性能很高: Superset提供了Presto连接,方便数据可视化和dash ...
- 札记:Property动画
简介 Android 3.0 (API level 11)引入了属性动画系统,它是一个完善的框架,可以用来对几乎任何对象进行动画.只需要指定要动画的对象属性,动画时长,属性值区间等,无论对像是否在屏幕 ...
- Java学习笔记33(集合框架七:Collections工具类)
数组有工具类,方面操作数组 集合也有工具类:Collections 常用方法示例: package demo; import java.util.ArrayList; import java.util ...
- python中匿名函数lambda
简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命 名一个函数的场合下使用,也就是指匿名函数. 先看它的几个用法: map( lambda x: x*x, [y f ...
- windows中的常用Dos命令
# __切换盘符目录__ E/D: # 从C盘切换到E盘或者D盘# __切换到指定文件夹下__cd folder_name(指定文件夹名--相对/绝对路径)cd .. # 返回上一级目录cd / # ...
- [Leetcode]59.螺旋矩阵Ⅱ
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, ...
- 可能比文档还详细--VueRouter完全指北
可能比文档还详细--VueRouter完全指北 前言 关于标题,应该算不上是标题党,因为内容真的很多很长很全面.主要是在官网的基础上又详细总结,举例了很多东西.确保所有新人都能理解!所以实际上很多东西 ...
- Xamarin.Android 使用 Encoding.GetEncoding("GB2312") 报错解决方案
问题描述:使用byte转换成汉字编码格式,debug模式下可以正常运行,但是release模式下就会出现死机问题. 排除过程:最开始不知道是编码格式转换错误,于是把相关代码块注释掉,然后进行relea ...
- java中的字符、字符串及数字之间的转换(转)
一.string 和int之间的转换 1.string转换成int :Integer.valueOf("12") 2.int转换成string : String.valueOf( ...