[英]Oxyplot - edit the left-click label in a LineSeries
我正在Oxyplot中绘制一些不同的LineSeries(在C#中,使用Windows窗体),它们的范围都有很大不同。 为了使每个系列仍然可见,我将所有值缩放到从0到1的范围。当然,这里的问题是,该系列的实际值不再显示了,所以我想知道是否有可能更改显示DataPoint的X和Y值的左键单击事件以解决此问题。 如果可能的话,我希望这样做,以便当用户单击数据点时,显示的Y值将被缩放回原始值,而图形仍保持按比例缩小。
例如,我有一个Na +值,范围从130到150,然后将其缩放到0和1。但是当用户单击一个数据点时,我希望它显示Y = 140而不是0.5。 由于每个LineSeries都有不同的缩放比例,因此这也意味着我必须分别编辑每个系列的标签。
是的,在当前版本中可能会发生这种情况吗? 提前致谢!
编辑:我想通了,请参阅下面的答案!
我不确定是否应该回答自己的问题,但最终还是弄清楚了。 因此,无论如何,事实证明我无法访问所需的任何属性,因此我只是为数据点创建了自己的类,并为缩放值添加了一个属性。 事实证明,跟踪器能够显示数据点的其他属性,但是标准数据点仅具有X和Y。然后,我修改了TrackerFormatString以显示缩放值,而不是实际值。
public class MeasurePoint : IDataPointProvider
{
public MeasurePoint(double x, double y, double scale)
{
X = x; Y = y; Scale = scale;
}
public double X { get; set; }
public double Y { get; set; }
public double Scale { get; set; }
public DataPoint GetDataPoint()
{
return new DataPoint(X, Y);
}
}
那就是我创建的类,这就是我最终处理这些要点的方式。
var points = new MeasurePoint[Y.Count - 1];
for (int i = 0; i < Y.Count; i++)
{
points[i] = new MeasurePoint(DateTimeAxis.ToDouble(X[i]), Y[i], Y[i]*scale);
}
Series.ItemsSource = points;
Series.TrackerFormatString = "{0}\n{2}\n{Scale}";
缩放比例是在绘制之前我将这些值除以的因子,TrackerFormatString是系列名称{0},而{2}是X值。
效果很好!
您不能直接更改显示的数据,但是可以像这样在oxyplot中监听mousedown事件:
var model= new PlotModel();
model.MouseDown += Model_MouseDown;
private void Model_MouseDown(object sender, OxyMouseDownEventArgs e)
{
var controller = sender as PlotController;
var position = e.HitTestResult;
}
使用position
值,您可以计算回实际值并将其显示在其他位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.