在图表中以图表单位 C# 显示半径的圆
Display circle in chart with radius in chart units C#
总结:我已经尝试过诸如气泡点之类的东西和乱用标记大小,但都不能在实际的网格单位中设置半径。气泡图=% 和标记=点(忽略网格)
如何在我的图表中添加一个半径为网格单位的圆?!
-----旧-----
我查看了如何更改气泡图中气泡的大小,显然第二个 Y 值应该控制大小......除了它什么都不做。
我不能使用标记大小作为解决方法,因为大小需要使用正确的单位而不是像素。
唯一能够改变大小的是最小和最大大小值...但我无法用它来准确控制大小(更不用说那会很愚蠢)。
没有代码,因为没有特殊代码或设置,应该很容易复制。
编辑:
刚刚意识到气泡大小是基于其他气泡大小而不是网格。这是一个大问题,因为我需要一个半径为网格单位的圆。它也需要一个人。
I need a circle that has a radius in grid units
MSChart中有3种坐标系:
- 数据值
某些区域的 - 百分比,最显着的是
ChartArea
和 InnerPlotPosition
Chart 控件的 - Pixels
ClientArea
我假设 网格单位 是指数据值,它也用于显示网格线和刻度。
要创建圆形或其他形状,您可以添加一个 PolygonAnnotation
和一个包含椭圆的 GraphicsPath
,或者简单地添加一个 EllipseAnnotation
.
或者您可以画圆。画法如下:
private void chart_PrePaint(object sender, ChartPaintEventArgs e)
{
ChartArea ca = chart.ChartAreas[0];
Axis ax = ca.AxisX;
Axis ay = ca.AxisY;
Series s = chart.Series[0];
DataPoint dpCenter = s.Points[22];
dpCenter.MarkerStyle = MarkerStyle.Circle;
double xVal = dpCenter.XValue;
double yVal = dpCenter.YValues[0];
double rad = 2; // <<<<<= radius in values
float xRad = (float)(ax.ValueToPixelPosition(0) - ax.ValueToPixelPosition(rad));
float yRad = (float)(ay.ValueToPixelPosition(0) - ay.ValueToPixelPosition(rad));
float xc = (float)ax.ValueToPixelPosition(xVal);
float yc = (float)ay.ValueToPixelPosition(yVal);
Rectangle r = Rectangle.Round(new RectangleF(xc - xRad, yc - yRad,
xRad * 2, yRad * 2));
e.ChartGraphics.Graphics.DrawEllipse(Pens.Red, r );
}
大小以数据值单位给出。要绘制形状,我们需要将其转换为像素;为此,有轴函数。
请注意,这不是一个完美的圆,因为坐标轴的刻度不同。当然,可以很容易地选择两个值的最大值或最小值。
我围绕特定点画圆。位置和大小将随图表本身移动和缩放。
要在另一个位置绘制,只需计算它,例如就像我已经做的那样来自价值观..
总结:我已经尝试过诸如气泡点之类的东西和乱用标记大小,但都不能在实际的网格单位中设置半径。气泡图=% 和标记=点(忽略网格)
如何在我的图表中添加一个半径为网格单位的圆?!
-----旧----- 我查看了如何更改气泡图中气泡的大小,显然第二个 Y 值应该控制大小......除了它什么都不做。
我不能使用标记大小作为解决方法,因为大小需要使用正确的单位而不是像素。
唯一能够改变大小的是最小和最大大小值...但我无法用它来准确控制大小(更不用说那会很愚蠢)。
没有代码,因为没有特殊代码或设置,应该很容易复制。
编辑: 刚刚意识到气泡大小是基于其他气泡大小而不是网格。这是一个大问题,因为我需要一个半径为网格单位的圆。它也需要一个人。
I need a circle that has a radius in grid units
MSChart中有3种坐标系:
- 数据值 某些区域的
- 百分比,最显着的是
ChartArea
和InnerPlotPosition
Chart 控件的 - Pixels
ClientArea
我假设 网格单位 是指数据值,它也用于显示网格线和刻度。
要创建圆形或其他形状,您可以添加一个 PolygonAnnotation
和一个包含椭圆的 GraphicsPath
,或者简单地添加一个 EllipseAnnotation
.
或者您可以画圆。画法如下:
private void chart_PrePaint(object sender, ChartPaintEventArgs e)
{
ChartArea ca = chart.ChartAreas[0];
Axis ax = ca.AxisX;
Axis ay = ca.AxisY;
Series s = chart.Series[0];
DataPoint dpCenter = s.Points[22];
dpCenter.MarkerStyle = MarkerStyle.Circle;
double xVal = dpCenter.XValue;
double yVal = dpCenter.YValues[0];
double rad = 2; // <<<<<= radius in values
float xRad = (float)(ax.ValueToPixelPosition(0) - ax.ValueToPixelPosition(rad));
float yRad = (float)(ay.ValueToPixelPosition(0) - ay.ValueToPixelPosition(rad));
float xc = (float)ax.ValueToPixelPosition(xVal);
float yc = (float)ay.ValueToPixelPosition(yVal);
Rectangle r = Rectangle.Round(new RectangleF(xc - xRad, yc - yRad,
xRad * 2, yRad * 2));
e.ChartGraphics.Graphics.DrawEllipse(Pens.Red, r );
}
大小以数据值单位给出。要绘制形状,我们需要将其转换为像素;为此,有轴函数。
请注意,这不是一个完美的圆,因为坐标轴的刻度不同。当然,可以很容易地选择两个值的最大值或最小值。
我围绕特定点画圆。位置和大小将随图表本身移动和缩放。
要在另一个位置绘制,只需计算它,例如就像我已经做的那样来自价值观..