我需要在C#中实现一个简单的绘图组件(WPF更精确)。我所拥有的是包含时间(X轴)和值(两种双重类型)的数据样本集合。
我有一个固定尺寸(宽度x高度)的绘图画布和可以在其上绘制的DrawLine方法/函数。我现在面临的问题是如何绘制图表以使其自动缩放?换句话说,如何将我的样本映射到Width x Height画布上的实际像素?
答案 0 :(得分:0)
可能有效的一种hacky方法是使用Viewbox
控件。此控件将缩放其内容的呈现以适合可用的大小。但是,这可能会导致您的线条和标签看起来太粗或太薄。
然而,你可能会采用的更合理的方法是如何在一定程度上计算绘制图形的方法。为此,请计算给定轴上的值范围(例如,Y轴值可能介于0到100之间)。计算出该轴上的可用绘图空间(例如,您的画布可能有400像素的高度)。绘制图形时,您的Y轴“比例因子”为<available space> / <data range>
- 或者,在这种情况下为4
。
你的画布'坐标从左上角的零开始,所以,为了计算给定数据点的Y位置,你可以像这样计算:
double availableSpace = 400.0; // the size of your canvas
double dataRange = 100.0; // the range of your values
double scaleFactor = availableSpace / dataRange;
double currentValue = 42.0; // the value we're trying to plot
double plottableY = availableSpace - (currentValue * scaleFactor); // the position on screen to draw at
plottableY
的值是您用于在画布上绘制此点的y坐标。
(显然,这段代码需要在您的绘图方法中展开,这样您就不会重新计算每个点的所有值,但它会演示数学运算。)