C#我想在我画号的坐标轴上绘制电压-时间曲线,应该怎么做

C#我在form上放置了groupbox,groupbox上放置了picturebox,picturebox里面绘制了坐标轴,然后我有一串电压值,我想在这个坐标轴上画电压... C#我在form上放置了groupbox,groupbox上放置了picturebox,picturebox里面绘制了坐标轴,然后我有一串电压值,我想在这个坐标轴上画电压-时间曲线,应该怎么做,怎么让这串电压值和时间联系起来,怎么绘制,怎么显示 展开
 我来答
shuibiyy
2016-05-30 · TA获得超过1724个赞
知道小有建树答主
回答量:446
采纳率:100%
帮助的人:142万
展开全部
/// <summary>
/// 制作折线图类
/// </summary>
/// <param name="x">中心点x值</param>
/// <param name="y">中心点y值</param>
/// <param name="xylength">x,y轴长度</param>
/// <param name="xString">x轴说明</param>
/// <param name="yString">y轴说明</param>
/// <param name="xInfo">x数据</param>
/// <param name="yInfo">y数据</param>
/// <param name="maxPoint">取y轴最大数据</param>

public Bitmap CreateLine(float x, float y, float xylength, string xString, string yString, string[] xInfo, float[] yInfo, float maxPoint)
{
Bitmap bitmap = new Bitmap(this.Width, this.Height);//定义画布
Graphics g = Graphics.FromImage(bitmap);
g.Clear(Color.White);

PointF p = new PointF(x, y);//中心点
PointF[] xpt = new PointF[3] { new PointF(p.X + xylength + 15, p.Y), new PointF(p.X + xylength, p.Y - 8), new PointF(p.X + xylength, p.Y + 8) };//x轴三角形
PointF[] ypt = new PointF[3] { new PointF(p.X, p.Y - xylength - 15), new PointF(p.X - 8, p.Y - xylength), new PointF(p.X + 8, p.Y - xylength) };//y轴三角形

//x
g.DrawLine(Pens.Black, p.X, p.Y, p.X + xylength, p.Y);
g.DrawPolygon(Pens.Black, xpt);
g.FillPolygon(Brushes.Black, xpt);
g.DrawString(xString, new Font("宋体", 8), new SolidBrush(Color.Red), p.X + xylength + 10, p.Y + 10);

//y
g.DrawLine(Pens.Black, p.X, p.Y - xylength, p.X, p.Y);
g.DrawPolygon(Pens.Black, ypt);
g.FillPolygon(Brushes.Black, ypt);
g.DrawString(yString, new Font("宋体", 8), new SolidBrush(Color.Red), p.X - 40, p.Y - xylength - 30);
//像素点
int point = (int)(p.Y / xInfo.Length);

int ypoint = 0;
if (maxPoint.ToString().Substring(0, 1) == "1")
{
ypoint = 10;
}
else
{
int sale = Convert.ToInt32(maxPoint);
int length = sale.ToString().Length;
string max = maxPoint.ToString().Substring(0, 1);
string cz = "1";
for (int a = 1; a < length; a++)
{
cz += "0";
max += "0";
}
maxPoint = Convert.ToSingle(cz) + Convert.ToSingle(max);
ypoint = (int)(maxPoint / Convert.ToSingle(cz));

}

//画Y刻度
for (int kd = 1; kd <= ypoint; kd++)
{
float kdy = p.Y - (360 / maxPoint) * (maxPoint / ypoint * kd);
g.DrawString(Convert.ToString(maxPoint / ypoint * kd), new Font("宋体", 8), Brushes.Black, p.X - 40, kdy - 5);
g.DrawLine(Pens.Black, p.X - 12, kdy, p.X, kdy);
}

for (int i = 0; i < xInfo.Length; i++)
{

//画x轴项目
g.DrawString(xInfo[i], new Font("宋体", 8), Brushes.Black, new PointF(p.X + i * point - 5, p.Y + 5));

g.DrawEllipse(Pens.Black, p.X + i * point - 1.5f, p.Y - 360 / maxPoint * yInfo[i], 3, 3);
g.FillEllipse(new SolidBrush(Color.Black), p.X + i * point - 1.5f, p.Y - 360 / maxPoint * yInfo[i], 3, 3);

//画数值
g.DrawString(yInfo[i].ToString(), new Font("宋体", 8), Brushes.Black, p.X + i * point, p.Y - 360 / maxPoint * yInfo[i]);
//画折线
if (i + 1 < xInfo.Length)
g.DrawLine(Pens.Red, p.X + i * point, p.Y - 360 / maxPoint * yInfo[i], p.X + (i + 1) * point, p.Y - 360 / maxPoint * yInfo[i + 1]);
}
return bitmap;
}
使用
string[] date=new string[10]; //时间数据
float[] values=new float[10]; // 电压数据
pictureBox1.Image = CreateLine(50, H, H - 25, "时间", "电压, date, values, (float)ret.maxValue);


另外可以使用Series控件
东莞大凡
2024-11-14 广告
标定板认准大凡光学科技,专业生产研发厂家,专业从事光学影像测量仪,光学投影测量仪.光学三维测量仪,光学二维测量仪,光学二维测量仪,光学三维测量仪,光学二维测量仪.的研发生产销售。东莞市大凡光学科技有限公司创立于 2018 年,公司总部坐落于... 点击进入详情页
本回答由东莞大凡提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式