2011-09-05 20 views
0

我有多個系列(面積和地塊)的圖表。 Area系列的'xField'爲'timeStamp','yField'爲'價格'。劇情繫列的'xField'爲'timeStamp',沒有'yField'....!我可以定位劇情繫列,但我沒有相應的'yField'值嗎?我可以指定一個默認值到「yField」(說「10」爲所有...?)軟硬度:定位繪圖系列項目

這是我最初創建我的AreaChart。此時,我不知道是否要呈現事件,因此我不打算在這一點上創建一個「情節系列」。

//Note: 'AreaSeries' and 'PlotSeries' have different dataproviders 
var areaChart:AreaChart = new AreaChart(); 
areaChart.width = width; 
areaChart.height = height; 
areaChart.showDataTips = true; 

var vAxis:LinearAxis = new LinearAxis(); 
if(vAxisLblFunction != null){ 
    vAxis.labelFunction = vAxisLblFunction; 
    areaChart.verticalAxis = vAxis; 
} 

var hAxis:CategoryAxis = new CategoryAxis(); 
hAxis.categoryField = "timeStamp"; 
areaChart.horizontalAxis = hAxis; 
areaChart.horizontalAxisRenderer = createHAxisRenderer(hAxis); 

var areaChartSeries:AreaSeries = new AreaSeries(); 
areaChartSeries.yField = "price"; 
areaChartSeries.displayName = "Stock Price"; 
areaChartSeries.setStyle("form", "segment"); 

var chartStroke:Stroke = new Stroke(); 
chartStroke.color = 0xFF0000; 
chartStroke.weight = CHART_STROKE_WEIGHT; 

var chartColor:SolidColor = new SolidColor(); 
chartColor.alpha = CHART_ALPHA; 
chartColor.color = 0x000000; 
areaChartSeries.setStyle("areaStroke", chartStroke); 
areaChartSeries.setStyle("areaFill", chartColor); 
chartSeriesArr.push(areaChartSeries); 

現在,在運行期間,我想根據需要繪製一些事件。

var evtSer:PlotSeries = new PlotSeries(); 
evtSer.dataProvider = devEventsAC; //Assume that I get the 'eventsDataProvider' somehow at run-time 
evtSer.xField = "timeStamp"; //Notice there is no 'yField' to map here. 
//evtSer.dataFunction = eventSerDataFunc; //Tried with a 'dataFunction' assigning default value of '10' to the 'yField' 

var fillColor:SolidColor = new SolidColor(); 
fillColor.color = 0xA933DC; 
fillColor.alpha = 0.8; 
evtSer.setStyle("fill", fillColor); 

var strokeColor:SolidColorStroke = new SolidColorStroke(); 
strokeColor.color = 0x9494B8; 
strokeColor.weight = 1; 
evtSer.setStyle("stroke", strokeColor); 
var chartSeriesArr:Array = trendPanel.areaChart.series; 
chartSeriesArr.push(evtSer); 
trendPanel.areaChart.series = chartSeriesArr; 

所以,我的問題是,如何在沒有'yField'的情況下繪製'events'。有沒有一種方法可以使用該系列的'dataFunction'賦值'yField'值?

這裏是我的想法:

  1. 在「dataFunction的」我們得到的「系列」對象的引用。使用系列對象獲取圖表的「父」,然後獲取該圖表的系列數組。
  2. 現在,得到了「yField」值從資本家「AreaSeries」,並返回它作爲「yField」價值的「陰謀系列」。
  3. 但是,如果我有多個具有相同'yField'值的事件,那麼所有事件都有很好的可能性。 (首先,我不確定1 & 2是否可以在此工作...)

第二種方法是使用'CartesianDataCanvas'。再次,在這裏它需要我沒有的數據點(x,y)。

+0

我不知道我在理解你想要完成什麼。你有可能截圖或製作塗鴉或什麼來幫助你的問題嗎?某些代碼可能對您嘗試的內容有所幫助。 –

+0

@J_A_X,編輯我的問題與示例代碼。 – Ravi

+0

使用我上面提到的第一種方法,我沒有得到真正的'yValue',而是'yField',在這種情況下'價格'。這種卡住在這... – Ravi

回答

0

可以使用CartesianDataCanvas繪製使用數據座標圖上的東西。但是,如果你真的想用一個檢測PlotSeries到圖表上顯示時間的事件,您可以循環在你的數據提供程序,並添加一個屬性與您會在檢測PlotSeries用作yField默認值...

+0

通過dataProvider循環並添加默認值的想法似乎是一個簡單的解決方案。但是,這也需要在圖表中添加一個'verticalAxis'作爲默認值...不是嗎? – Ravi

+0

嗯,我不認爲它會:你可以使用你的AreaSeries值的範圍來處理默認值,並且同時影響到兩者。 – LoremIpsum

+0

不是。它沒有工作。正如我在我原來的文章中提到的那樣,使用該系列的'dataFunction',我爲'y'返回值'100'。但是,沒有任何東西被渲染 – Ravi