using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace DrawChart
{
public partial class DrawChart : UserControl
{
#region 构造函数
public DrawChart()
{
InitializeComponent();
DrawBackGround();
}
#endregion
#region 相关属性设置
private string strTitleName = "";
/// <summary>
/// 设置直方图名称
/// </summary>
[Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("设置直方图名称")]
public string My_TitleName
{
get { return strTitleName; }
set
{
strTitleName = value;
lblTitle.Text = strTitleName;
}
}
private int colorDesign = 0;
/// <summary>
/// 设置设计直方图背景色
/// </summary>
[Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("设置静态设计直方图背景色")]
public int My_DesignColor
{
get { return colorDesign; }
set
{
colorDesign = value;
DrawBackGround();
}
}
private int colorActual = 0;
/// <summary>
/// 绘图颜色
/// </summary>
[Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("设置实际作图直方图背景色")]
public int My_ActualColor
{
get { return colorActual; }
set
{
colorActual = value;
}
}
private bool bolUp = true;
/// <summary>
/// 绘制直方图模式 true 防沙模式;false 酸化模式
/// </summary>
[Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("绘制直方图模式 true 防沙模式;false 酸化模式")]
public bool My_DrawChartWithUp
{
get { return bolUp; }
set
{
bolUp = value;
}
}
#endregion
#region 作图属性
private float fltDesignData = 0F;
/// <summary>
/// 设置设计值
/// </summary>
[Bindable(true), Category("作图属性"), DefaultValue(""), Description("设置设计值")]
public float My_DesignData
{
get { return fltDesignData; }
set
{
fltDesignData = value;
lblDesign.Text = "设计:"+fltDesignData.ToString();
}
}
private float fltActualData = 0F;
/// <summary>
/// 设置实际值
/// </summary>
[Bindable(true), Category("作图属性"), DefaultValue(""), Description("设置实际值")]
public float My_ActualData
{
get { return fltActualData; }
set
{
fltActualData = value;
if (bolUp)
{
SetRealTimeData(fltActualData.ToString());
DrawRealTimeChart(GetRectF(fltActualData));
}
else
{
if (fltActualData < fltDesignData)
{
SetRealTimeData(Convert.ToString((fltDesignData - fltActualData)));
DrawRealTimeChart(GetRectF(fltDesignData - fltActualData));
}
else
{
SetRealTimeData("0");
}
}
}
}
#endregion
#region 私有变量
private Color colorFrame = Color.Cyan;//边框颜色 默认
private delegate void SetImageToPnl(Image img1);//委托方法
private delegate void SetRealData(string strRealTimeData);//设置实时数据
#endregion
#region 私有方法
#region 初始化背景图片
private void DrawBackGround()
{
Image img = new Bitmap(pnlChart.Width, pnlChart.Height);
using (Graphics g =Graphics.FromImage(img))
{
//画矩形
g.DrawRectangle(new Pen(Brushes.Cyan,1.9F), new Rectangle(2, 2, (pnlChart.Width - 4) / 2, pnlChart.Height - 6));
//填充矩形
SolidBrush bh = new SolidBrush(ColorTranslator.FromOle(colorDesign));
g.FillRectangle(bh, new Rectangle(3, 3, (pnlChart.Width - 4) / 2 - 2, pnlChart.Height - 7));
//画边框
g.DrawLine(new Pen(Brushes.Cyan, 1.9F), new Point((pnlChart.Width - 4) / 2 + 2, pnlChart.Height - 4), new Point(pnlChart.Width - 4, pnlChart.Height - 4));
g.Dispose();
}
SetBackGroundImage(img);
}
#endregion
#region 重绘
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
DrawRealTimeChart(GetRectF(fltActualData));
}
#endregion
#region 实时绘制柱状图
private void DrawRealTimeChart(RectangleF rtf)
{
try
{
using (Graphics g = pnlChart.CreateGraphics())
{
SolidBrush bh = new SolidBrush(ColorTranslator.FromOle(colorActual));
SolidBrush bhWithe = new SolidBrush(Color.White);
g.FillRectangle(bhWithe, new RectangleF((float)(pnlChart.Width - 4) / 2 + 2, 4, (float)(pnlChart.Width - 4) / 2, (float)(pnlChart.Height - 8)));
g.FillRectangle(bh, rtf);
g.Dispose();
}
}
catch
{ }
}
#endregion
#region 计算填充矩形
private RectangleF GetRectF(float fltData)
{
RectangleF rtf = new RectangleF();
float fltTemp = (pnlChart.Height - 8) / fltDesignData;
if (fltActualData <= 0)
{
rtf = new RectangleF(0F, 0F, 0F, 0F);
}
else if (fltActualData > 0 && fltActualData < fltDesignData)
{
rtf = new RectangleF((float)(pnlChart.Width - 4) / 2+2, (float)(pnlChart.Height - 4 - fltData * fltTemp), (float)(pnlChart.Width - 4) / 2-2,fltTemp*fltData-0.8F);
}
else if (fltActualData > fltDesignData)
{
rtf = new RectangleF((float)(pnlChart.Width - 4) / 2+2, 4, (float)(pnlChart.Width - 4) / 2-2, (float)(pnlChart.Height - 8.8F));
}
return rtf;
}
#endregion
#region 托管方法
private void SetBackGroundImage(Image img)
{
if (pnlChart.InvokeRequired)
{
SetImageToPnl stp = new SetImageToPnl(SetBackGroundImage);
Invoke(stp, new object[] { img });
}
else
pnlChart.BackgroundImage = img;
}
private void SetRealTimeData(string str)
{
if (lblActual.InvokeRequired)
{
SetRealData stp = new SetRealData(SetRealTimeData);
Invoke(stp, new object[] { str });
}
else
lblActual.Text = "Actual:"+str;
}
#endregion
#endregion
#region 私有事件 绘图区域Size改变时 触发重绘事件
private void pnlChart_SizeChanged(object sender, EventArgs e)
{
DrawBackGround();
}
#endregion
#region 当绘图区域失去焦点时 触发重绘事件
private void pnlChart_Paint(object sender, PaintEventArgs e)
{
DrawRealTimeChart(GetRectF(fltActualData));
}
#endregion
}
}
分享到:
相关推荐
这个是配合SPC质量分析一块用的,单独用也没问题,可以传入相应需要绘图的数据点,就能画出图形 注:使用时需要先建一个image图片,指定图片路径,绘图时图片路径与image中指定图片路径一致就能在网页中显示图形。...
在Asp.NET中,WebChart控件是一种强大的工具,用于创建动态、交互式的图表,包括直方图和饼图。本实例将详细讲解如何利用WebChart控件在VS2005开发环境下实现这两种常见的数据可视化图形。 首先,我们要了解Web...
在计算机视觉领域,直方图是一种非常重要的图像分析工具,它可以帮助我们理解图像色彩分布的情况。本主题将深入探讨如何在C#环境中利用OpenCV库(通过EMGU CV的接口)来绘制HSV颜色空间的直方图,以实现图像增强的...
标题中提到的"C# winform chart 饼图 直方图"指的是在C#的WinForm应用程序中使用图表控件来实现饼图和直方图的图形展示。WinForm是.NET Framework提供的一个用于创建桌面应用程序的框架,它允许开发者使用各种控件,...
在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序,包括数据可视化软件。...通过学习这个项目,开发者不仅可以掌握直方图的绘制技巧,还能进一步提升在.NET Framework下进行图形编程的能力。
这个名为“医院科室病人管理,C#画直方图”的解决方案提供了一种利用C#编程语言实现的系统,旨在帮助医院更有效地进行数据可视化和科室病人的管理工作。以下是这个项目所涉及的主要知识点: 一、医院信息管理 1. ...
在.NET框架中,Chart控件是一个强大的工具,用于可视化各种数据类型,包括直方图和折线图。本文将深入探讨如何使用C#语言和Chart控件来展示一组或多组数据,并实现3D模式。 首先,`Chart`控件是Windows Forms应用...
为了绘制直方图,我们需要先计算数据的分布,然后根据分布信息在窗口上画出一个个矩形。而对于折线图,我们需要确定数据点的位置,并用线条将它们连接起来。 在提供的资源中,...
C#绘制直方图 饼图 曲线图,单数据直方图取最前两列,第一列为横轴每列名称,第二列为值。多数据直方图第一列为横轴父项名称,然后依次取前一列为横轴每列名称,后一列为值。曲线图取第一列为横轴每列名称,往后每...
首先,茎叶图(Stem-and-Leaf Plot)是一种简化版的直方图,它将数据分成两部分:茎(主要数字)和叶(次要数字)。这种图有助于快速识别数据的分布和模式,尤其是对于小到中等规模的数据集。在ASP.NET中,我们可以...
平时我们只对一组数据做直方图统计,这样我们只要直接画直方图就可以了。 但有时候我们同时画多组数据的直方图(比如说我大一到大四跑大学城内环的用时的分布),大一到大四用不同颜色的直方图,显示在一张图上,...
5. 图像分析:可以计算图像的统计信息,如平均像素值、直方图等,用于图像识别和分析。还能检测图像的特征,如轮廓、文本、线条等。 6. 文本处理:可以将文本添加到图像上,支持自定义字体、大小、位置和旋转。同时...
OxyPlot提供了一套丰富的API,用于创建各种图表类型,如线图、散点图、柱状图等。在WPF中,你可以通过XAML或代码-behind来设置图表。在XAML中,你可以创建一个`oxy:Plot`控件,定义其属性,如标题、轴标签、数据系列...
7. **图像处理算法**:源代码可能包含了各种图像处理算法的实现,如边缘检测(Canny、Sobel等)、模板匹配、直方图均衡化、阈值分割等。这些算法对于图像识别、分析和增强非常有用。 8. **图形用户界面(GUI)设计*...
它提供了丰富的图表类型,包括线图、散点图、柱状图、热力图、直方图等,并且支持交互式数据可视化。ScottPlot的特点是易于集成、使用简单、性能优越,适用于各种数据分析和可视化的应用场景。 二、主要特点 跨平台...
常用的阈值算法包括直方图均衡化和自适应阈值,以确保字符画在视觉上的对比度和清晰度。 ### ASCII Generator 2 简体中文版特点 1. **用户友好界面**:该软件提供了简体中文界面,方便中国用户操作,包括一键转换...
直方图的计算可能涉及遍历每个像素,统计其亮度或颜色值,并将这些值分配到特定的区间(即直方图的“桶”)中。通过这种方式,我们可以快速了解图层的整体色彩分布。 2. **导出功能**:除了在界面上显示直方图,此...
`ChartDemo_histogram`这个文件名可能是一个示例程序或输出文件,展示了如何使用这个框架来绘制直方图,直方图是条形图的一种,用于显示数据分布的情况,每个条形的宽度表示类别区间,高度则表示落入该区间的频数。...
1. **Chart控件**:VB.NET提供了`System.Windows.Forms.DataVisualization.Charting`命名空间,其中的`Chart`控件非常适合用于创建直方图。我们需要定义每个区间的边界,然后使用`Series`对象添加数据点。每个`...
Chart.js是一款轻量级的JavaScript库,专门用于创建各种类型的统计图表,如曲线图、柱状图和饼状图等。它以其简单易用、高效和可定制化的特性深受开发者喜爱,广泛应用于数据可视化项目中。下面将详细介绍Chart.js在...