추악한 솔루션을 찾으려고했지만 운이 없다. 포인터가 데이터 포인트 바로 위에있을 때뿐만 아니라 마우스 포인터가 차트의 임의 지점에있을 때 데이터 팁을 표시하려고합니다.마우스가 데이터 포인트를 가리킬 때뿐만 아니라 마우스를 끌 때 데이터 팁 표시
0
A
답변
0
아마 당신이 찾고있는 대답은 아니지만 Axis 시각화 프레임 워크를 사용하면 훨씬 쉽게 사용자 정의하고 추가/수정 할 수있는 기능을 발견했습니다.
http://www.axiis.org/
0
저는 앞으로도이 프로젝트를 진행하려고합니다. 아직도 노력하고있어. 아래 코드는 문제에 대한 해결책을 제공합니다.
<fx:Declarations>
<mx:SeriesInterpolate id="interp" elementOffset="10"
duration="200" minimumElementDuration="10" />
<mx:SolidColorStroke id="st" color="#92D050" weight="8" />
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.charts.ChartItem;
import mx.charts.chartClasses.Series;
import mx.charts.series.items.LineSeriesItem;
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
private var dummyGeneratorTimer:Timer;
private var dummyUpdateTimer:Timer;
private static const DATA_INTERVAL:int = 600;//8;
private static const ARRAY_SIZE:int = 500;
private var chartIndex:int = 0;
[Bindable]
private var chartData:ArrayCollection = new ArrayCollection([
{ Time: 1, parameter1: 2200, parameter2: 1700, parameter3: 1500, parameter4: 1300, parameter5: 1100, parameter6:900 },
{ Time: 2, parameter1: 1900, parameter2: 1600, parameter3: 1450, parameter4: 1200, parameter5: 1000, parameter6:800 },
{ Time: 3, parameter1: 1900, parameter2: 1700, parameter3: 1500, parameter4: 1300, parameter5: 1100, parameter6:900 },
{ Time: 4, parameter1: 1900, parameter2: 1600, parameter3: 1450, parameter4: 1200, parameter5: 1000, parameter6:800 },
{ Time: 5, parameter1: 1900, parameter2: 1750, parameter3: 1500, parameter4: 1300, parameter5: 1100, parameter6:900 },
{ Time: 5, parameter1: 1900, parameter2: 1600, parameter3: 1400, parameter4: 1200, parameter5: 1000, parameter6:800 },
{ Time: 7, parameter1: 1900, parameter2: 1700, parameter3: 1500, parameter4: 1300, parameter5: 1000, parameter6:900 },
{ Time: 8, parameter1: 1900, parameter2: 1600, parameter3: 1600, parameter4: 1200, parameter5: 1100, parameter6:800 },
{ Time: 9, parameter1: 1900, parameter2: 1800, parameter3: 1400, parameter4: 1300, parameter5: 1000, parameter6:900 },
{ Time: 10, parameter1: 1900, parameter2: 1600, parameter3: 1500, parameter4: 1200, parameter5: 1000, parameter6:800 },
{ Time: 11, parameter1: 1900, parameter2: 1700, parameter3: 1400, parameter4: 1300, parameter5: 1100, parameter6:900 },
{ Time: 12, parameter1: 1900, parameter2: 1600, parameter3: 1400, parameter4: 1200, parameter5: 1000, parameter6:800 },
{ Time: 13, parameter1: 1900, parameter2: 1600, parameter3: 1500, parameter4: 1300, parameter5: 1100, parameter6:900 },
{ Time: 14, parameter1: 1900, parameter2: 1700, parameter3: 1400, parameter4: 1200, parameter5: 1000, parameter6:800 },
{ Time: 15, parameter1: 1900, parameter2: 1600, parameter3: 1500, parameter4: 1300, parameter5: 1100, parameter6:900 },
{ Time: 16, parameter1: 1900, parameter2: 1700, parameter3: 1400, parameter4: 1200, parameter5: 1000, parameter6:800 },
{ Time: 17, parameter1: 1900, parameter2: 1600, parameter3: 1500, parameter4: 1300, parameter5: 1100, parameter6:900 }]);
protected function application1_initializeHandler(event:FlexEvent):void
{
dummyGeneratorTimer = new Timer(DATA_INTERVAL); // 8 millisecond
}
private var count:Number = 17;
private function populateData(event:TimerEvent):void
{
var obj:Object = new Object();
obj.Time= (++count).toString();
obj.parameter1= randomRange(1900,1900);
obj.parameter2= randomRange(1600,1700);
obj.parameter3= randomRange(1400,1500);
obj.parameter4= randomRange(1200,1300);
obj.parameter5= randomRange(1000,1100);
obj.parameter6= randomRange(800,900);
chartData.refresh();
chartData.addItem(obj);
linechart.width += 10;
}
private function randomRange(minNum:Number, maxNum:Number):Number
{
return (Math.round(Math.random() * (maxNum - minNum + 1)) + minNum);
}
protected function scope_clickHandler(event:MouseEvent):void
{
if(scopeBtn.label == 'Scope1'){
scopeBtn.label = 'Stop Scope';
dummyGeneratorTimer.addEventListener(TimerEvent.TIMER, populateData,false,0,true);
dummyGeneratorTimer.start();
}
else{
scopeBtn.label = 'Scope1';
dummyGeneratorTimer.stop();
dummyGeneratorTimer.removeEventListener(TimerEvent.TIMER, populateData,false);
}
}
private var activeSeries:LineSeries;
private var activePoint:LineSeriesItem;
/* protected function linechart_itemMouseMoveHandler(event:ChartItemEvent):void
{
// TODO Auto-generated method stub
if(event.hitData && event.hitData.element is LineSeries){
activeSeries = event.hitData.element as LineSeries;
activePoint = (event.hitData.chartItem as LineSeriesItem);
var tmpArr:Array = activeSeries.dataTransform.invertTransform(linechart.mouseX, linechart.mouseY);
for(var i:int=0;i<tmpArr.length;i++){
trace("i:"+tmpArr[i]);
}
}
}*/
private function dataTipHandler(event:MouseEvent):void {
var leftPoint:Point = new Point(linechart.mouseX,0);
//leftPoint = event.target.localToGlobal(leftPoint);
//leftPoint = linechart.localToContent(leftPoint);
//var rightPoint:Point = new Point(chart.mouseX,0);
var leftArr:Array = lineSeries.localToData(leftPoint);
var series:Series;
var item:ChartItem;
for each(var s:Series in linechart.series){
// initialize/empty dataTipItems of all series.
s.dataTipItems = [];
series = s;
item = series.items[leftArr[0]-3];
if(item != null)
series.dataTipItems.push(item);
}
linechart.showAllDataTips = true;
}
]]>
</fx:Script>
<s:Button id="scopeBtn" label="Scope1" click="scope_clickHandler(event)"/>
<!--<s:Button id="update" label="update" click="update_clickHandler()"/>-->
</s의
: 레이아웃> ->
<s:layout>
<s:HorizontalLayout horizontalAlign="right"
paddingLeft="10" paddingRight="10"
paddingTop="10" paddingBottom="10"/>
</s:layout>
<!--<s:HSlider change="drawData()" liveDragging="true" value="50" id="quadBoundary" minimum="-200" maximum="200" width="100%" /> -->
<mx:LineChart id="linechart" color="0xffffff" height="100%" width="100%" cacheAsBitmap="true" cachePolicy="on"
showDataTips="true" dataProvider="{chartData}" fontFamily="Arial" fontSize="20" seriesFilters="[]"
gutterLeft="40" gutterTop="0" paddingTop="0"
dataTipRenderer="MyDataTip" mouseMove="dataTipHandler(event)">
<!-- mouseSensitivity="20" dataTipMode="multiple" showAllDataTips="false" itemMouseDown="linechart_itemMouseMoveHandler(event)" -->
<mx:backgroundElements>
<mx:GridLines id="gridLines" gridDirection="vertical" cacheAsBitmap="true" cachePolicy="on"
verticalTickAligned="true"> <!--verticalChangeCount="1"-->
<mx:verticalStroke>
<s:SolidColorStroke color="0xffffff"
weight="0"
alpha="0.5" />
</mx:verticalStroke>
<!-- <mx:horizontalStroke>
Set alpha to 0 so stroke isn't visible.
<mx:SolidColorStroke color="0x000000"
weight="0"
alpha="0.0" />
</mx:horizontalStroke>
<mx:horizontalFill>
<mx:SolidColor color="0x000000"
alpha="0.1" />
</mx:horizontalFill>-->
</mx:GridLines>
<!--<dataShapes:DataDrawingCanvas id="canvas" includeInRanges="true"/>
-> ->
<mx:horizontalAxis>
<!--<mx:LinearAxis id="h1" autoAdjust="true"/>-->
<mx:CategoryAxis id="h1" categoryField="Time"/>
<!--<mx:DateTimeAxis id="h1" autoAdjust="true" displayLocalTime="true" interval="11" />-->
</mx:horizontalAxis>
<mx:verticalAxis>
<mx:LinearAxis id="v1" baseAtZero="false" autoAdjust="false" alignLabelsToInterval="false"/>
</mx:verticalAxis>
<mx:verticalAxisRenderers>
<mx:AxisRenderer placement="right" axis="{v1}" showLine="true" showLabels="true" visible="true"/>
</mx:verticalAxisRenderers>
<!-- horizontal axis renderer -->
<mx:horizontalAxisRenderers>
<mx:AxisRenderer axis="{h1}" minorTickPlacement="none" minorTickLength="3"
canDropLabels="false">
<mx:minorTickStroke>
<s:SolidColorStroke color="#BBCCDD" weight="2"/>
</mx:minorTickStroke>
</mx:AxisRenderer>
<!--
<charts:ScrollableAxisRenderer axis="{h1}" id="scrollAxis" tickPlacement="none" placement="bottom"
labelGap="3" scrollBarThemeColor="blue" />
-->
</mx:horizontalAxisRenderers>
<mx:series>
<!-- <mx:LineSeries yField="parameter1" showDataEffect="{interp}" form="step" sortOnXField="false" displayName="Parameter1"
verticalAxis="{v1}" horizontalAxis="{h1}" cacheAsBitmap="true" cachePolicy="on"
itemRenderer="mx.charts.renderers.CircleItemRenderer" radius="5">
<mx:lineStroke>
<s:SolidColorStroke color="#C05046" weight="3" alpha="0.9" />
</mx:lineStroke>
</mx:LineSeries>-->
<components:MyLineSeries id="lineSeries" xField="Time" yField="parameter1" displayName="parameter1" form="segment" showDataEffect="{interp}"
verticalAxis="{v1}" horizontalAxis="{h1}" cacheAsBitmap="true" cachePolicy="on"
lineStroke="{st}" itemRenderer="mx.charts.renderers.ShadowBoxItemRenderer">
<components:lineSegmentRenderer>
<fx:Component>
<dashedLine:DashedLineRenderer pattern="[20,20,5,20]"/>
</fx:Component>
</components:lineSegmentRenderer>
</components:MyLineSeries>
<mx:LineSeries xField="Time" yField="parameter2" showDataEffect="{interp}" form="curve" displayName="Parameter2" verticalAxis="{v1}" horizontalAxis="{h1}"
cacheAsBitmap="true" cachePolicy="on" itemRenderer="mx.charts.renderers.CircleItemRenderer">
<mx:lineStroke>
<s:SolidColorStroke color="#036CBA" weight="3" alpha="0.9" />
</mx:lineStroke>
</mx:LineSeries>
<mx:LineSeries xField="Time" yField="parameter3" showDataEffect="{interp}" form="step" displayName="Parameter3" verticalAxis="{v1}" horizontalAxis="{h1}"
cacheAsBitmap="true" cachePolicy="on" itemRenderer="mx.charts.renderers.CrossItemRenderer">
<mx:lineStroke>
<s:SolidColorStroke color="#9DBB61" weight="3" alpha="0.9" />
</mx:lineStroke>
</mx:LineSeries>
<mx:LineSeries xField="Time" yField="parameter4" showDataEffect="{interp}" form="curve" displayName="Parameter4" verticalAxis="{v1}" horizontalAxis="{h1}"
cacheAsBitmap="true" cachePolicy="on" itemRenderer="mx.charts.renderers.DiamondItemRenderer" radius="5">
<mx:lineStroke>
<s:SolidColorStroke color="#4BACC6" weight="3" alpha="0.9" />
</mx:lineStroke>
</mx:LineSeries>
<mx:LineSeries xField="Time" yField="parameter5" showDataEffect="{interp}" form="curve" displayName="Parameter5" verticalAxis="{v1}" horizontalAxis="{h1}"
cacheAsBitmap="true" cachePolicy="on" itemRenderer="mx.charts.renderers.TriangleItemRenderer">
<mx:lineStroke>
<s:SolidColorStroke color="#ED9853" weight="3" alpha="0.9" />
</mx:lineStroke>
</mx:LineSeries>
<mx:LineSeries xField="Time" yField="parameter6" showDataEffect="{interp}" form="curve" displayName="Parameter6" verticalAxis="{v1}" horizontalAxis="{h1}"
cacheAsBitmap="true" cachePolicy="on" itemRenderer="mx.charts.renderers.BoxItemRenderer"
legendMarkerRenderer="mx.charts.renderers.TriangleItemRenderer">
<mx:lineStroke>
<s:SolidColorStroke color="#7030A0" weight="3" alpha="0.9" />
</mx:lineStroke>
</mx:LineSeries>
</mx:series>
<mx:annotationElements>
<local:RangeSelector id="rs"/>
</mx:annotationElements>
</mx:LineChart>
<mx:Legend dataProvider="{linechart}" color="0xffffff"/>
</s:SkinnableContainer>
관련 문제
- 1. 항상 데이터 팁 표시
- 2. 마우스를 놓을 때뿐만 아니라 슬라이더가 움직이는 동안 actionListener를 호출하려면 어떻게해야합니까?
- 3. CSS : 다른 div가 마우스를 가리킬 때 div 표시
- 4. 스프라이트 배경 이미지가 마우스를 가리킬 때 뒤처집니다
- 5. ActionScript 특정 영역을 가리킬 때 표시 단추
- 6. jQuery fade li 요소가 마우스를 가리킬 때 순환합니다.
- 7. Google 시각화 : 데이터 포인트를 계속 표시합니다.
- 8. 데이터 포인트를 그룹으로 구분 하시겠습니까?
- 9. 데이터 캐싱 기술/팁/AppFabric
- 10. 마우스가 팁 위에있을 때 jquery.qtip2 툴팁이 숨기는 것을 어떻게 방지합니까?
- 11. 마우스가 특정 텍스트 위에있을 때 팁 창 제공
- 12. Firefox에서 마우스를 끌 때 텍스트 선택을 방지하는 방법은 무엇입니까?
- 13. Java2d : 마우스를 끌 때 선택 창을 표시하는 옵션
- 14. 주어진 데이터 포인트를 사용하여 RTree를 구성하는 방법
- 15. jqplot에 월별 데이터 표시
- 16. NUnit이 이론에서 제네릭을 사용할 때 데이터 포인트를 무시하는 이유
- 17. 많은 수의 데이터 포인트를 저장 하시겠습니까?
- 18. 사용자가 마우스를 클릭 한 다음 마우스를 끌 때 깨끗하게 캡처 할 수 있습니까?
- 19. 레일즈는 레코드를 편집 할 때뿐만 아니라 생성 할 때 이벤트를 보냅니 까?
- 20. X, Y 데이터 포인트를 표시하는 ASP 차트 컨트롤 호버 이벤트
- 21. GridView는 BoundFields뿐만 아니라 완전한 데이터 소스를 보여줍니다.
- 22. 아키텍처 팁 : 비즈니스 로직/데이터 액세스
- 23. DataGridView에서 관련 데이터 표시
- 24. Excel에서 XML 데이터 표시
- 25. 호버에있는 테이블의 추가 데이터 표시
- 26. NSTableView 보장 데이터 표시
- 27. Winforms ToolStripSplitButton은 회색 선으로 표시되며, 마우스를 가리킬 때만 나타납니다.
- 28. Google 차트 - 포인트에 데이터 주석 표시 - 대화 형 라인 차트
- 29. 데이터 집합을 사용하여 GridView에 데이터 표시
- 30. 데이터 테이블 또는 데이터 세트의 테이블 표시
일부 코드보기; 이것을 성취하려고 시도한 것을 설명하십시오. – JeffryHouser