C# 利用MSChart控件
我有一个简单的线条图,我想通过在线条周围画一个矩形(理想情况下是一个透明的填充矩形…)来突出显示这个图形的一些部分。我不知道MS图表控件是否可以实现这一点?您的意思是:C# 利用MSChart控件,c#,charts,mschart,rectangles,C#,Charts,Mschart,Rectangles,我有一个简单的线条图,我想通过在线条周围画一个矩形(理想情况下是一个透明的填充矩形…)来突出显示这个图形的一些部分。我不知道MS图表控件是否可以实现这一点?您的意思是: using (Graphics g = Graphics.FromImage(pictureBox1.Image)) { using(Brush brush = new SolidBrush(your_color)) { g.FillRectangle(brush , x, y, width, h
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
using(Brush brush = new SolidBrush(your_color))
{
g.FillRectangle(brush , x, y, width, height);
}
}
或者你可以使用
Brush brush = new SolidBrush(Color.FromArgb(alpha, red, green, blue))
其中
alpha
从0变为255,因此alpha
的128值将提供50%不透明度。我建议您下载并查看注释部分。在这里,您将找到实现所述目标所需的所有文档:
private void AddRectangleAnnotation()
{
RectangleAnnotation annotation = new RectangleAnnotation();
annotation.AnchorDataPoint = Chart1.Series[0].Points[2];
annotation.Text = "I am a\nRectangleAnnotation";
annotation.ForeColor = Color.Black;
annotation.Font = new Font("Arial", 12);;
annotation.LineWidth = 2;
annotation.BackColor = Color.PaleYellow;
annotation.LineDashStyle = ChartDashStyle.Dash;
Chart1.Annotations.Add(annotation);
}
当你想在图表上画图时,你可以选择添加线性注释或矩形注释。如果你想要更多的控制,你可以使用图表的前画和后画事件。如果你能画画,那么你可以画任何东西。此外,使用此选项将使图表“打印”和“导出”看起来与绘制时相同。当图表在屏幕上的位置发生变化时,在上面涂鸦看起来会很有趣,所以一定要在上面画画 假设你有一张交易图表,你需要画一条线来说明你在哪里盈利,或者说你在哪里“做什么”,然后加上你想去的地方和你想去的地方的坐标 显示如何使用以下代码执行此操作(也可使用vb.net):
我的意思是使用控件System.Windows.Forms.DataVisualization.Charting.Chart并覆盖一个矩形。使用控件的后期事件。太棒了!您现在有没有办法偏移矩形,以使左下角成为定位点?最后,我没有使用AnchorOffset属性,因为行为是不连贯的(设置x偏移也会导致y偏移…??)。相反,我使用X和Y属性设置了位置,但没有锚定,这在我的例子中不是问题。您现在有没有办法偏移矩形,以使左下角成为锚定点我想你可以设定一个负八来实现这一点。
using System.Windows.Forms.DataVisualization.Charting;
...
private void chart1_PostPaint(object sender, System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs e)
{
if(sender is ChartArea)
{
ChartArea area = (ChartArea)sender;
if(area.Name == "Default")
{
// If Connection line is not checked return
if( !ConnectionLine.Checked )
return;
double max;
double min;
double xMax;
double xMin;
// Find Minimum and Maximum values
FindMaxMin( out max, out min, out xMax, out xMin );
// Get Graphics object from chart
Graphics graph = e.ChartGraphics.Graphics;
// Convert X and Y values to screen position
float pixelYMax = (float)e.ChartGraphics.GetPositionFromAxis("Default",AxisName.Y,max);
float pixelXMax = (float)e.ChartGraphics.GetPositionFromAxis("Default",AxisName.X,xMax);
float pixelYMin = (float)e.ChartGraphics.GetPositionFromAxis("Default",AxisName.Y,min);
float pixelXMin = (float)e.ChartGraphics.GetPositionFromAxis("Default",AxisName.X,xMin);
PointF point1 = PointF.Empty;
PointF point2 = PointF.Empty;
// Set Maximum and minimum points
point1.X = pixelXMax;
point1.Y = pixelYMax;
point2.X = pixelXMin;
point2.Y = pixelYMin;
// Convert relative coordinates to absolute coordinates.
point1 = e.ChartGraphics.GetAbsolutePoint(point1);
point2 = e.ChartGraphics.GetAbsolutePoint(point2);
// Draw connection line
graph.DrawLine(new Pen(Color.Yellow,3), point1,point2);
}
}
}
private void chart1_PrePaint(object sender, System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs e)
{
if(sender is ChartArea){
ChartArea area = (ChartArea)sender;
if(area.Name == "Default")
{
double max;
double min;
double xMax;
double xMin;
// Find Minimum and Maximum values
FindMaxMin( out max, out min, out xMax, out xMin );
// Get Graphics object from chart
Graphics graph = e.ChartGraphics.Graphics;
// Convert X and Y values to screen position
float pixelYMax = (float)e.ChartGraphics.GetPositionFromAxis("Default",AxisName.Y,max);
float pixelXMax = (float)e.ChartGraphics.GetPositionFromAxis("Default",AxisName.X,xMax);
float pixelYMin = (float)e.ChartGraphics.GetPositionFromAxis("Default",AxisName.Y,min);
float pixelXMin = (float)e.ChartGraphics.GetPositionFromAxis("Default",AxisName.X,xMin);
// Specify width of triangle
float width = 3;
// Set Maximum points
PointF [] points = new PointF[3];
points[0].X = pixelXMax - width;
points[0].Y = pixelYMax - width - 2;
points[1].X = pixelXMax + width;
points[1].Y = pixelYMax - width - 2;
points[2].X = pixelXMax;
points[2].Y = pixelYMax - 1;
// Convert relative coordinates to absolute coordinates.
points[0] = e.ChartGraphics.GetAbsolutePoint(points[0]);
points[1] = e.ChartGraphics.GetAbsolutePoint(points[1]);
points[2] = e.ChartGraphics.GetAbsolutePoint(points[2]);
// Draw Maximum trangle
graph.FillPolygon(new SolidBrush(Color.Red), points);
// Set Minimum points
points = new PointF[3];
points[0].X = pixelXMin - width;
points[0].Y = pixelYMin + width + 2;
points[1].X = pixelXMin + width;
points[1].Y = pixelYMin + width + 2;
points[2].X = pixelXMin;
points[2].Y = pixelYMin + 1;
// Convert relative coordinates to absolute coordinates.
points[0] = e.ChartGraphics.GetAbsolutePoint(points[0]);
points[1] = e.ChartGraphics.GetAbsolutePoint(points[1]);
points[2] = e.ChartGraphics.GetAbsolutePoint(points[2]);
// Draw Minimum triangle
graph.FillPolygon(new SolidBrush(Color.Blue), points);
}
}
}