对于ngx-charts折线图,它显示折线图,但数据点没有点。
如果将鼠标悬停在数据点上,它将显示数据点的圆点以及标签工具提示。
我喜欢这样的折线图,以便始终用点显示所有数据点。
我需要您帮助如何在ngx-charts折线图中的数据点上显示点
以下是ngx图https://github.com/kedmenecr/cinnamon-angular5-with-ngx-charts
的示例这是ngx-chart libary的源代码。 https://github.com/swimlane/ngx-charts
谢谢。
答案 0 :(得分:2)
如果有人仍然需要此功能,我可以使用非超级干净的解决方案来解决此功能,但到目前为止它没有副作用:
定制服务在划线图上绘制点:
import { Injectable } from '@angular/core';
@Injectable()
export class CustomLinerChartService {
/**
* custom: override SVG to have the dots display all the time over the liner chart
* since it's not supported anymore from ngx chart
*/
showDots(chart) {
let index = 0;
const paths = chart.chartElement.nativeElement.getElementsByClassName(
'line-series'
);
const color = chart.chartElement.nativeElement.getElementsByClassName(
'line-highlight'
);
for (let path of paths) {
const chrtColor = color[index].getAttribute('ng-reflect-fill');
const pathElement = path.getElementsByTagName('path')[0];
const pathAttributes = {
'marker-start': `url(#dot${index})`,
'marker-mid': `url(#dot${index})`,
'marker-end': `url(#dot${index})`
};
this.createMarker(chart, chrtColor, index);
this.setAttributes(pathElement, pathAttributes);
index += 1;
}
}
/**
* create marker
*
*/
createMarker(chart, color, index) {
const svg = chart.chartElement.nativeElement.getElementsByTagName('svg');
var marker = document.createElementNS(
'http://www.w3.org/2000/svg',
'marker'
);
var circle = document.createElementNS(
'http://www.w3.org/2000/svg',
'circle'
);
svg[0].getElementsByTagName('defs')[0].append(marker);
marker.append(circle);
const m = svg[0].getElementsByTagName('marker')[0];
const c = svg[0].getElementsByTagName('circle')[0];
const markerAttributes = {
id: `dot${index}`,
viewBox: '0 0 10 10',
refX: 5,
refY: 5,
markerWidth: 5,
markerHeight: 5
};
const circleAttributes = {
cx: 5,
cy: 5,
r: 5,
fill: color
};
m.append(circle);
this.setAttributes(m, markerAttributes);
this.setAttributes(c, circleAttributes);
}
/**
* set multiple attributes
*/
setAttributes(element, attributes) {
for (const key in attributes) {
element.setAttribute(key, attributes[key]);
}
}
}
,并在视图初始化之后将数据设置为图表调用:
@ViewChild('chart') chart: any;
ngAfterViewInit() {
this.customLinerChartService.showDots(this.chart);
}
确保图表上有参考文献:
<ngx-charts-line-chart #chart>
更新
您不能依靠ng-reflect-fill
类,因为它只是增加了开发的气氛,因此insted提供了您的颜色作为数组,并基于例如索引进行了选择