需要逻辑来确定标记的大小基于点计数,间隔和图表面积
本文关键字:于点计 表面积 | 更新日期: 2023-09-27 18:11:57
我正在绘制xy点图。我需要根据图表面积,总xy点计数和X轴和Y轴上点之间的最小间隔来选择标记大小,使点不会相互重叠。
目前我正在这样做:
int marginWidth = chart1.Size.Width;
int marginHeight = chart1.Size.Height;
chart1.Series[0].MarkerSize = (((marginWidth * marginHeight) / (marginWidth + marginHeight)) /18)
18只是大约100个xy点的校准值。但显然,当点计数增加时,需要减小标记大小以获得更好的可见性。
谁能给我一个逻辑吗?
我看到了一个"简单"的解决方案:根据您的数据设置标记大小。所以你应该写chart1.Series[0]而不是18。Count之类的=)
试试这个(计算两个标记之间的距离)Markersize =距离
//chart object PrePaint event...
private void chart1_PrePaint(object sender, ChartPaintEventArgs e)
{
//get the PixelPosition of first Marker
double X1 = chart1.ChartAreas[0].AxisX.ValueToPixelPosition(1); //X
double Y1 = chart1.ChartAreas[0].AxisY.ValueToPixelPosition(1); //Y
//get the PixelPosition of second Marker(X-Axis)
double X2 = chart1.ChartAreas[0].AxisX.ValueToPixelPosition(2); //X
double Y2 = chart1.ChartAreas[0].AxisY.ValueToPixelPosition(1); //Y
//get the PixelPosition of second Marker(Y-Axis)
double X3 = chart1.ChartAreas[0].AxisX.ValueToPixelPosition(1); //X
double Y3 = chart1.ChartAreas[0].AxisY.ValueToPixelPosition(2); //Y
//Calculate the Distance by Pythagoras (c² = a² + b²)
//=> a² = (X1 - X2)² && b² = (Y1-Y2)²
//Sorry is in german but the video explain
//http://matheguru.com/lineare-algebra/224-abstand-zwischen-zwei-punkten.html
double disctanceX = Math.Sqrt(Math.Pow(X1 - X2, 2) + Math.Pow(Y1 - Y2, 2));
double disctanceY = Math.Sqrt(Math.Pow(X1 - X3, 2) + Math.Pow(Y1 - Y3, 2));
//limit the marker at smaller value
if (disctanceX < disctanceY)
{
//cut the decimals other routines are possible
chart1.Series[0].MarkerSize = (int) Math.Ceiling(disctanceX);
}
else
{
chart1.Series[0].MarkerSize = (int) Math.Ceiling(disctanceY);
}
}