一、截图

  

二、说明

  本篇博客主要是有三个亮点:

    ① 刻度标注在仪表盘标线外

    ② 仪表盘存在两个刻度值,分别是(正)0.5~1 和(负)-1~-0.5

    ③ 仪表盘内标注,分别是“超前”和“滞后”

三、代码

  html代码

 <nz-card style="position:absolute;width: 100%;height: 200px;background-color: #0e0b2a;border: solid 0px #0e0b2a;margin-top: 10px;color: white;padding: 0px;margin: 0px;" >
<p style="padding: 3px 10px;color: #8cc5fe;">{{title}}</p>
<div echarts [options]="option1" style="position: relative;left: 30px;/* height: 100%; */-webkit-tap-highlight-color: transparent;user-select: none;max-height: 180px;overflow-y: hidden;top: 0px;width: 100%;overflow-x: hidden;" class="demo-chart"></div>
</nz-card>

  ts代码

  

 import { Component, OnInit, Input, SimpleChanges } from '@angular/core';
import * as echarts from 'echarts';
import { EChartOption } from 'echarts'; @Component({
selector: 'app-powerfactor',
templateUrl: './powerfactor.component.html',
styleUrls: ['./powerfactor.component.css']
})
export class PowerfactorComponent implements OnInit { @Input() title;
@Input() newpower ;
@Input() min;
@Input() max;
@Input() splitNumber;
public option1:EChartOption ;
constructor() {
} ngOnInit() { this.setPowerData();
} ngOnChanges(changes: SimpleChanges): void {
if(parseFloat(this.newpower) >0.5){
this.newpower = -this.newpower;
}else{
//Do-nothing
}
this.setPowerData();
} //处理功率因数数据
producePowerData(sign){
const _self=this;
if((sign == 0) && (_self.newpower) && (parseFloat(_self.newpower)<0 )){
return _self.newpower;
}else if((sign == 1) && (_self.newpower) && (parseFloat(_self.newpower)>0 )){
return _self.newpower;
}else{
return 0;
}
} //处理显示指针
producePowerPointer(sign){
//sign,0代表'滞后',1代表'超前'
const _self = this;
if((sign == 0) && (parseFloat(_self.newpower) < 0)){
return true;
}else if((sign == 1) && (parseFloat(_self.newpower) > 0)){
return true;
}else{
return false;
}
} //绘图函数
setPowerData(){
let powerdata = 0;
if("--" == this.newpower){
powerdata = 0;
}else{
powerdata = this.newpower;
} this.option1 = {
series: [
//滞后表盘样式
{
type: "gauge",
center:["35%", "45%"], // 仪表位置 ,左右,上下
radius: "54%", //仪表大小
startAngle: -270, //开始角度
endAngle: -360, //结束角度
min:-1,
max:-0.5,
splitNumber:5,
axisLine: {
show: true,
lineStyle: { // 属性lineStyle控制线条样式
color: [
[0.02,'#f68d26'], // 100% 处的颜色
[1, '#3838d2'],
],
width: 12
}, },
splitLine: {
show: true,
lineStyle:{
opacity :0,
}
},
axisTick: {
show: false
},
axisLabel: {
show: true,
distance: -20,
color: '#333',
formatter: function(v){
switch (v+''){
case '-0.5': return '';
case '-0.6': return '';
case '-0.7': return '滞后';
case '-0.8': return '';
case '-0.9': return '';
case '1': return '';
default: return '';
}
}, },
itemStyle :{
color :'black'
},
pointer : { //指针样式
show:false,
length: '80%',
width :10,
itemStyle :{
color :'black'
} },
detail: {
show: false
}
},
//超前表盘样式
{
type: "gauge",
center:["35%", "45%"], // 仪表位置 ,左右,上下
radius: "54%", //仪表大小
startAngle: -180, //开始角度
endAngle: -270, //结束角度
min:0.5,
max:1,
splitNumber:5,
axisLine: {
show: true,
lineStyle: { // 属性lineStyle控制线条样式
color: [
[0.98,'#22a0f3'], // 100% 处的颜色
[1, '#f68d26'],
],
width: 12, }, },
splitLine: {
show: true,
lineStyle:{
opacity :0,
}
},
axisTick: {
show: false
},
axisLabel: {
show: true,
distance: -20,
color: '#22a0f3',
formatter: function(v){
switch (v+''){
case '0.5': return '';
case '0.6': return '';
case '0.7': return '超前';
case '0.8': return '';
case '0.9': return '';
case '1': return '';
default: return '';
}
}, },
itemStyle :{
color :'black'
},
pointer : { //指针样式
show:false,
length: '80%',
width :10,
itemStyle :{
color :'black'
} },
detail: {
show: false
}
},
{
type : "gauge",
center:["35%", "45%"], // 默认全局居中
radius : "86%",
startAngle: -270, //开始角度
endAngle: -360, //结束角度
min:-1,
max:-0.5,
splitNumber:5,
axisLine : {
show : false,
lineStyle : {
color:[ [0.02,'#f68d26'],[1,'#3740d5']],
width : 0
}
},
splitLine : {
show:false,
length : 30,
lineStyle : {
width : 2
}
},
axisTick : { //刻度线样式(及短线样式)
length : 20,
show:false,
},
axisLabel : { //文字样式(及“10”、“20”等文字样式)
color : "#405a74",
distance : -26, //文字离表盘的距离
fontSize:12,
formatter: function(v){
switch (v+''){
case '-0.5': return '0.5';
case '-0.6': return '';
case '-0.7': return '0.7';
case '-0.8': return '';
case '-0.9': return '0.9';
case '-1': return '1';
default: return '';
}
}, },
itemStyle :{
color :'#13b4eb'
},
pointer : { //指针样式
show: this.producePowerPointer(0),
length: '36%',
width :4, },
detail: {
show:this.producePowerPointer(0),
formatter:'{value}',
offsetCenter: [0, "36%"],
height:30,
textStyle: { // 其余属性默认使用全局文本样式,详见TEXTSTYLE
color: '#13b4eb',
fontSize : 26
},
},
data: [{
value:this.producePowerData(0),
// value: this.produceNegativePowerData(),
label: {
textStyle: {
fontSize: 12
}
}
}]
}, {
type : "gauge",
center:["35%", "45%"], // 默认全局居中
radius : "86%",
startAngle: -180, //开始角度
endAngle: -270, //结束角度
min:0.5,
max:1,
splitNumber:5,
axisLine : {
show : false,
lineStyle : { // 属性lineStyle控制线条样式
color:[ [0.98,'#3740d5'],[1,'#f68d26']],
width : 0//表盘宽度
}
},
splitLine : { //分割线样式(及10、20等长线样式)
show:false,
length : 30,
lineStyle : { // 属性lineStyle控制线条样式
width : 2
}
},
axisTick : { //刻度线样式(及短线样式)
length : 20,
show:false,
},
axisLabel : { //文字样式(及“10”、“20”等文字样式)
color : "#405a74",
distance : -26, //文字离表盘的距离
fontSize:12,
formatter: function(v){
switch (v+''){
case '0.5': return '0.5';
case '0.6': return '';
case '0.7': return '0.7';
case '0.8': return '';
case '0.9': return '0.9';
case '1': return '1';
default: return '';
}
}, },
itemStyle :{
color :'#13b4eb',
fontSize:12
},
pointer : { //指针样式
show:this.producePowerPointer(1),
length: '36%',
width :4, },
detail: {
show:this.producePowerPointer(1),
formatter:'{value}',
offsetCenter: [0, "36%"],
height:30,
textStyle: { // 其余属性默认使用全局文本样式,详见TEXTSTYLE
color: '#13b4eb',
fontSize : 26
},
},
data: [{
value:this.producePowerData(1),
label: {
textStyle: {
fontSize: 12
}
}
}]
}
]
};
} //处理颜色百分比方法
processColorPercent(){
const _self = this;
if(_self.newpower && _self.max){
let c_percent = _self.newpower/_self.max;
return c_percent;
}else{
let c_percent = 0;
return c_percent;
}
} }

  

功率因数cosφ仪表盘的更多相关文章

  1. 交流绕组 & 感应电机

    交流绕组 1. 为什么整距线圈产生的电动势最大? 整距时, 一个线圈的两根有效导体边之间相差180电角度, 线圈的节距因数为1, 线圈产生的电动势为单根导体边产生电动势的2倍, 为最大 2. 三相交流 ...

  2. IOS自定义仪表盘

      登录|注册     周海锋 的专栏 Objective-C/Cocos2d/Cocos2d-x/Php/JS       目录视图 摘要视图 订阅 2016软考项目经理实战班    学院周年礼-顶 ...

  3. WPF自定义控件(1)——仪表盘设计[1]

    0.小叙闲言 又接手一个新的项目了,再来一次上位机开发.网上有很多控件库,做仪表盘(gauge)的也不少,功能也很强大,但是个人觉得库很臃肿,自己就计划动手来写一个控件库,一是为学习,二是为了项目.下 ...

  4. [ucgui] 仪表盘函数

    /* 仪表盘 */ void DrawArcScale(void) { ; ; int i; ]; GUI_SetBkColor(GUI_WHITE); GUI_Clear(); GUI_SetPen ...

  5. C# GDI绘制仪表盘(纯代码实现)

    纯代码实现GDI绘制仪表盘,效果在代码下面. public partial class HalfDashboardUc : UserControl { /// <summary> /// ...

  6. 数学还勉强管用,用代码还能画个canvas 仪表盘(含完整代码)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 没事用html5 canvas画一个仪表盘自用,自适应的哦

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. C++制作电压表电流表仪表盘(vs2008)

    Meter类 Meter.h #if !defined(AFX_METER_H__D5802279_6502_4453_BE21_58604877AD39__INCLUDED_) #define AF ...

  9. canvas仿芝麻信用分仪表盘

    这是一个仿支付宝芝麻信用分的一个canvas,其实就是一个动画仪表盘. 首先, 上原图: 这个是在下支付宝上的截图,分低各位见笑了.然后看下我用canvas实现的效果图: <canvas id= ...

随机推荐

  1. Android-Java-子类实例化过程(内存图)

    案例一: package android.java.oop15; // 描述Person对象 class Person { // 构造方法就算不写 默认有一个隐式的无参构造方法:public Pers ...

  2. WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题

    WPF窗体中建有一个DataGrid,运行后修改各行数据,通过Update方法更新后台数据库.发现在数据库中,其中一列FAcctID(文本型)每次都会变为0,还有一列FDebit(货币型)不能更新,其 ...

  3. GC垃圾回收机制,iOS内存管理。

    问题: MRC中通过调用静态方法创建的新对象,不再使用时需要对其发送release消息吗? 不需要,因为约定静态方法创建的对象会自动将其放入自动释放池,即已对其发送autorelease消息,因此不可 ...

  4. Javascript百学不厌 - this

    最近看了一本书,让自己的野路子走走正规路线 方法调用模式: 方法:当一个函数被保存为对象的一个属性时,我们称它为一个方法. var obj = { fun1: function() {this} // ...

  5. Swift5 语言指南(三) 快速之旅

    传统表明,新语言中的第一个程序应在屏幕上打印“Hello,world!”字样.在Swift中,这可以在一行中完成: print("Hello, world!") // Prints ...

  6. centos部署flask

    1.先安装uwsgi pip install uwsgi 2.在你的项目根目录下创建一个配置文件uwsgiconfig.ini(uwsgi支持多种配置文件格式,xml,ini,json等) [uwsg ...

  7. .NET手记-HttpClient解析GB2312乱码问题

    最近为App的服务器端卸了个爬虫程序,输出结果时发现出现乱码现象,尝试使用了几个方案发现效果并不太好,最后发现了一个很简单的用法. var result = await client.GetByteA ...

  8. 详谈再论JAVA获取本机IP地址

    首先,你如果搜索“JAVA获取本机IP地址”,基本上搜到的资料全是无用的.比如这篇:http://www.cnblogs.com/zrui-xyu/p/5039551.html实际上的代码在复杂环境下 ...

  9. MLlib之NaiveBayes算法源码学习

    package org.apache.spark.mllib.classification import breeze.linalg.{DenseMatrix => BDM, DenseVect ...

  10. Java高并发情况下的锁机制优化

    本文主要讲并行优化的几种方式, 其结构如下: 锁优化 减少锁的持有时间 例如避免给整个方法加锁 1 public synchronized void syncMethod(){ 2 othercode ...