2015-10-17 60 views
2

我想知道如何獲得(具體),只是我使用OxyPlot繪製的散點圖的x座標。從OxyPlot ScatterPlot獲取數據點

//user clicks on graph line data... 
//x-coordinate gets assigned to variable 
int x = ... 

我正在使用winforms。

編輯:

private void plotView_Click(object sender, EventArgs e){ 
     plotView.ActualModel.Series[0].MouseDown += (s, e0) => 
     { 
      if (e0.ChangedButton != OxyMouseButton.Left) 
       return; 
      else 
       pointx = (int)e0.HitTestResult.NearestHitPoint.X; 
     }; 
    } 

工作代碼:

 s0.MouseDown += (s, e0) => 
     { 
      if (e0.ChangedButton == OxyMouseButton.Left) 
      { 
       var item = e0.HitTestResult.Item as ScatterPoint; 
       if (item != null) 
       { 
        pointx = (int)item.X; 
       } 
      } 
     }; 

回答

1

您可以將鼠標按下事件爲您的系列,像這樣:

var model = new PlotModel { Title = "Test Mouse Events" }; 

var s1 = new LineSeries(); 
model.Series.Add(s1); 

double x; 

s1.MouseDown += (s, e) => 
      { 
       x = e.Position.X; 
      }; 

從他們的示例代碼改編髮現這裏:https://github.com/oxyplot/oxyplot/blob/09fc7c50e080f702315a51af57a70d7a47024040/Source/Examples/ExampleLibrary/Examples/MouseEventExamples.cs

這裏證明:http://resources.oxyplot.org/examplebrowser/ =>向下滾動鼠標事件

編輯:我發現你從X得到的位置是屏幕座標,你必須轉換爲找到正確的軸點,像這樣:

x = (s as LineSeries).InverseTransform(e0.Position).X; 
+0

雖然我需要在這個鼠標點擊事件中,當我這樣做時,我得到一個錯誤,說'e'不能在此範圍內聲明,因此我將它重命名爲'e0'。當我這樣做時,我總是得到一個零。我該如何解決? – John

+0

也許試着讓int x成爲double值,這樣它就不會將任何double值截斷爲0.除此之外,您可以編輯您的代碼,我可以看看您正在做什麼。 – Zachary

+0

哦,如果你正在尋找點擊的實際座標(而不是像我可能假設的點),請執行:「e0.Position.X」 – Zachary