gpt4 book ai didi

extjs - 突出显示 extjs4 折线图的一部分

转载 作者:行者123 更新时间:2023-12-04 21:46:48 24 4
gpt4 key购买 nike

下面的 extjs 4.1.1a 代码是折线图的一个工作示例。现在我需要在给定的最小和最大时间戳上突出显示该图表的一部分。

{'xtype' : 'chart',
'store' : 'ChartData',
'height' : '100%',
'width' : '100%',
'legend' : {'position' : top},
'axes': [{
'title': 'Power',
'type': 'Numeric',
'position': 'left',
'fields': ['power']
},{
'title': 'Timestamp',
'type': 'Numeric',
'position': 'bottom',
'fields': ['timestamp'],
'minorTickSteps': 3
}],
'series': [{
'type': 'line',
'fill': true,
'axis' : 'left',
'xField': 'timestamp',
'yField': 'power'
}]}

我搜索了 sencha 论坛,没有发现任何特别符合我要求的内容。
现在,我设法使用自定义渲染器更改折线图上点的颜色。
'renderer': function(sprite, record, attr, index, store) {
var item = store.getAt(index);
if(item != undefined && (item.get('timestamp') < startdate || item.get('timestamp') > enddate)){
return Ext.apply(attr, {'fill': '#00cc00', 'stroke-width': 3, 'radius': 4});
}else{
return Ext.apply(attr, {'fill': '#ff0000', 'stroke-width': 3, 'radius': 4});
}}

但是我还没有找到改变线下颜色的方法。
对此有何建议?

更新 - 现在工作正常

我根据科伦坡给出的答案实现了一个解决方案。
doCustomDrawing: function () {: function (p){
var me = this, chart = me.chart;
if(chart.rendered){
var series = chart.series.items[0];
if (me.groupChain != null) {
me.groupChain.destroy();
me.groupChain = null;
}
me.groupChain = Ext.create('Ext.draw.CompositeSprite', {
surface: chart.surface
});
if(series != null && series.items != null){
var surface = chart.surface;
var pathV = 'M';
var first = true;
// need first and last x cooridnate
var mX = 0,hX = 0;
Ext.each(series.items, function(item){
var storeItem = item.storeItem,
pointX = item.point[0],
pointY = item.point[1];
// based on given startdate and enddate start collection path coordinates
if(!(storeItem.get('timestamp') < startdate || storeItem.get('timestamp') > enddate)){
if(hX<pointX){
hX = pointX;
}
if(first){
first = false;
mX = pointX;
pathV+= + pointX + ' ' + pointY;
}else{
pathV+= ' L' + pointX + ' ' + pointY;
}
}
});
var sprite = Ext.create('Ext.draw.Sprite', {
type: 'path',
fill: '#f00',
surface: surface,
// to draw a sprite with the area below the line we need the y coordinate of the x axe which is in my case items[1]
path : pathV + ' L'+ hX + ' ' + chart.axes.items[1].y + ' L'+ mX + ' ' + chart.axes.items[1].y + 'z'
});
me.groupChain.add(sprite);
me.groupChain.show(true);
}
}}

这看起来真的很好,并且达到了我希望的效果 如果您调整容器大小,新 Sprite 从图表中清除。再次前往科伦坡。

最佳答案

这是可以实现的。这是我将如何做到的。

1.为afterrender添加监听器事件 series .

listeners: {
afterrender: function (p) {
this.doCustomDrawing();
},
scope: me
}

2. 创建一个 CompositeSprite
doCustomDrawing: function () {
var me = this, chart = me.chart;

if (chart.rendered) {
var series = chart.series.items[0];
if (me.groupChain != null) {
me.groupChain.destroy();
me.groupChain = null;
}

me.groupChain = Ext.create('Ext.draw.CompositeSprite', {
surface: chart.surface
});

// Draw hilight here
Ext.each(series.items, function (item) {
var storeItem = item.storeItem,
pointX = item.point[0],
pointY = item.point[1];

//TODO: Create your new line sprite using pointX and pointY
// and add it to CompositeSprite me.groupChain


});

me.groupChain.show(true);
}
},

关于extjs - 突出显示 extjs4 折线图的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13254593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com