总结:我尝试过像泡泡点这样的东西,并用标记大小弄乱,但两者都不能在实际网格单位中设置半径。气泡图=%和标记=点(忽略网格)
如何在半径为网格单位的图表中添加圆圈?!
-----老----- 我已经查找了如何在气泡图中更改气泡的大小,显然第二个Y值应该控制大小...除了它绝对没有。
我无法使用标记大小作为解决方法,因为大小需要以正确的单位而不是像素。
唯一设法改变大小的是最小和最大尺寸值...但我无法准确控制尺寸(更不用说那将是非常愚蠢的)。
没有代码,因为没有特殊的代码或设置,应该很容易复制。
编辑: 刚刚意识到气泡尺寸是基于其他气泡尺寸而不是网格。这是一个很大的问题,因为我需要一个半径为网格单位的圆。它也需要独处。
答案 0 :(得分:1)
我需要一个半径为网格单位的圆圈
MSChart中有3个坐标系:
ChartArea
和InnerPlotPosition
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 );
}
大小以数据值单位给出。要绘制形状,我们需要转换为像素;为此,有轴功能。
请注意,它不是一个完美的圆,因为轴没有相同的比例。当然,人们可以很容易地选择两个值的最大值或最小值。
我在特定点周围绘制圆圈。位置和大小将随图表本身移动和缩放。
要在另一个位置绘制,只需计算它,例如从我已经做过的价值观来看......