visifire  柱状图控件

visifire  柱状图控件最近使用到一个柱状图控件visifire用起来还是比较高级的不过会有水印商业用途需要购买正版效果还是很好的还有动画效果能够识别最大高度创建之前需要引用http://note.youdao.com/noteshare?id=4a8d01bd0bfef2cdc86c5752aad3156…

大家好,又见面了,我是你们的朋友全栈君。

 

 

 

 

 

 

 

最近使用到一个柱状图控件  visifire  

 

用起来还是比较高级的   不过会有水印  商业用途需要购买正版

 

visifire  柱状图控件

 

效果还是很好的  还有动画效果  

能够识别最大高度

 

创建之前需要引用

http://note.youdao.com/noteshare?id=4a8d01bd0bfef2cdc86c5752aad31569 

visifire  柱状图控件
visifire  柱状图控件

 /// <summary>
        /// 创建一个柱状图
        /// </summary>
        /// <param name="name">柱状图的标题名</param>
        /// <param name="valuex">x轴内容</param>
        /// <param name="valuey">y轴内容</param>
        public void creat(string name, List<string> valuex, List<string> valuey)
        {
            MyCharts chart = new MyCharts();
            //设置图标的宽度和高度
            chart.Width = 480;
            chart.Height = 270;
           // chart.Margin = new Thickness(100, 5, 10, 5);
            //是否启用打印和保持图片
            chart.ToolBarEnabled = false;

            chart.Bevel = false;
            

            //设置图标的属性
            chart.ScrollingEnabled = true;//是否启用或禁用滚动
            //chart.View3D = true;//3D效果显示

            //创建一个标题的对象
            Title title = new Title();
            
            //设置标题的名称
            title.Text = name;
            title.Padding = new Thickness(0, 10, 5, 0);

            //向图标添加标题
            chart.Titles.Add(title);

            Axis yAxis = new Axis();
            //yAxis.AxisMaximum = strListy.Max(r=>r);
            //设置图标中Y轴的最小值永远为0           
            yAxis.AxisMinimum = 0;
            //设置图表中Y轴的后缀          
            //yAxis.Suffix = "斤";
            chart.AxesY.Add(yAxis);

            // 创建一个新的数据线。               
            DataSeries dataSeries = new DataSeries();

            // 设置数据线的格式
            dataSeries.RenderAs = RenderAs.StackedColumn;//柱状Stacked


            // 设置数据点              
            DataPoint dataPoint;
            for (int i = 0; i < valuex.Count&&i<valuey.Count; i++)
            {
                // 创建一个数据点的实例。                   
                dataPoint = new DataPoint();
                // 设置X轴点                    
                dataPoint.AxisXLabel = valuex[i];
                //设置Y轴点                   
                dataPoint.YValue = double.Parse(valuey[i]);
                //添加一个点击事件        
                //dataPoint.MouseLeftButtonDown += new MouseButtonEventHandler(dataPoint_MouseLeftButtonDown);
                //添加数据点                   
                dataSeries.DataPoints.Add(dataPoint);
            }

            // 添加数据线到数据序列。                
            chart.Series.Add(dataSeries);

            //将生产的图表增加到Grid,然后通过Grid添加到上层Grid.           
            //Grid gr = new Grid();
            //gr.Children.Add(chart);
            Simon.Children.Add(chart);
        }
    }

创建柱状图

 

 

还有一个图片类型的柱状图控件  长的不怎么好看

 

visifire  柱状图控件

 

 

看着是挺简洁 

就是绑定数据 一张简单的图片

添加图片前  添加一个类

visifire  柱状图控件
visifire  柱状图控件

public class DarwGrapClass { //绘制柱状统计图型的方法 /// <param name="width">图像的宽度:int类型</param> /// <param name="height">图像的高度:int类型</param> /// <param name="topic">图像标题的内容:string类型</param> /// <param name="beginy">y轴距图像左边界的宽度:int类型</param> /// <param name="partx">x轴将被等分多少份:int类型</param> /// <param name="beginx">x轴距图像顶部的高度:int类型</param> /// <param name="party">y轴将被等分多少份:int类型</param> /// <param name="xmess">X轴信息内容:string[]</param> /// <param name="ymess">y轴信息内容:string[]</param> /// <param name="county">某次Y轴的具体数组值:int[]</param> /// <param name="ymax">y轴的最大值</param> /// <param name="xmax">x轴的最大值</param> /// <returns>Bitmap类型的线性图像</returns> public Bitmap CreateZhuImage(int width, int height, string topic, int beginy, int partx, int beginx, int party, string[] xmess, string[] ymess, int[] county, int ymax, int xmax) { Bitmap image = new Bitmap(width, height); //创建Graphics类对象 Graphics g = Graphics.FromImage(image); try { //清空图片背景色  g.Clear(Color.White); Font font = new Font("Arial", 10, FontStyle.Regular); Font font1 = new Font("微软雅黑", 15, FontStyle.Bold); LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.BlueViolet, 1.2f, true); //图片的底色 g.FillRectangle(Brushes.WhiteSmoke, 0, 0, width, height); //在图片上面写标题文字 g.DrawString(topic, font1, brush, new PointF(width / 4, height - 20)); //画图片的边框线 g.DrawRectangle(new Pen(Color.Blue), 0, 0, image.Width - 1, image.Height - 1); //================绘制线条================ //----------------------------绘制坐标轴---------------------------- Pen mypen = new Pen(brush, 1); Pen mypen1 = new Pen(Color.Blue, 2); //计算剩余的X轴长度(xlength),并根据X轴等分原则计算每分的长度(xpart) int xlength = image.Width - beginy; int xpart = Convert.ToInt32(xlength / partx); //计算剩余的Y轴长度(ylength),并根据Y轴等分原则计算每分的长度(ypart) int ylength = image.Height - beginx - 40; int ypart = Convert.ToInt32(ylength / party); //----------------------------绘制纵向线条开始---------------------------- int x = beginy; for (int i = 0; i <= partx; i++) { g.DrawLine(mypen, x, beginx, x, beginx + ylength - 10); x = x + xpart; } //绘制带箭头的直线 //mypen1.StartCap = LineCap.ArrowAnchor; g.DrawLine(mypen1, beginy, beginx, beginy, beginx + ylength - 10);//所以真实的Y轴长度是(ylength) //----------------------------绘制纵向线条结束---------------------------- //----------------------------绘制横向线条开始---------------------------- int y = beginx - 5; for (int i = 0; i <= party; i++) { g.DrawLine(mypen, beginy, y, beginy + xlength, y); y = y + ypart; } g.DrawLine(mypen1, beginy, beginx + ylength - 10, beginy + xlength, beginx + ylength - 10); //----------------------------绘制横向线条结束---------------------------- //================绘制X,Y轴的坐标内容================ //x轴信息 int x1 = beginy; for (int i = 0; i < partx; i++) { g.DrawString(xmess[i].ToString(), font, Brushes.Blue, x1, beginx + ylength); //设置文字内容及输出位置 x1 = x1 + xpart; } //y轴 int y1 = beginx + ypart; for (int i = 0; i < party; i++) { g.DrawString(ymess[i].ToString(), font, Brushes.Blue, 1, y1); //设置文字内容及输出位置 y1 = y1 + ypart; } //================根据传过来的数组中的值(数目与X轴个数相等,但是Y值被放置在数组中)================ //绘制柱状图. x = 80; Font font2 = new System.Drawing.Font("Arial", 10, FontStyle.Bold); SolidBrush mybrush = new SolidBrush(Color.Red); //SolidBrush mybrush2 = new SolidBrush(Color.Green); for (int i = 0; i < county.Length; i++) { //第i期 int part1 = Convert.ToInt32(((decimal)Convert.ToInt32(county[i]) / ymax) * ylength); g.FillRectangle(mybrush, beginy, ylength - part1, xpart / 2, part1); //此处请注意:求小数时候,分母必须为decimal类型,否则结果一律为0; g.DrawString(county[i].ToString(), font2, Brushes.GreenYellow, beginy, ylength - part1); beginy += xpart; //此处注意:最后使得补偿增加为X轴的宽度  } return image; } catch { return image; } } }

view

 

 

 DarwGrapClass drawpic = new DarwGrapClass(); string topic = ""; String[] xmess = { "第一季度", "第二季度", "第三季度", "第四季度", "新年到现在" }; String[] ymess = { "6000", "5000", "4000", "3000", "2000", "1000", " 0" }; int[] county = { 5000, 6000, 5000, 5000, 3500 }; //Bitmap pic1 = drawpic.CreateZhuImage(500, 500, topic, 50, 5, 15, 7, xmess, ymess, county, 7000, 200); Bitmap pic1 = drawpic.CreateZhuImage(500, 500, "", 50, 5, 5, 7, xmess, ymess, county, 7000, 200); pic.Source = ChangeBitmapToImageSource(pic1);

 

 

还有  发现一个将图片bitmap转换成imagesource

 [DllImport("gdi32.dll", SetLastError = true)] private static extern bool DeleteObject(IntPtr hObject); public static ImageSource ChangeBitmapToImageSource(Bitmap bitmap) { //Bitmap bitmap = icon.ToBitmap();  IntPtr hBitmap = bitmap.GetHbitmap(); ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); if (!DeleteObject(hBitmap)) { throw new System.ComponentModel.Win32Exception(); } return wpfBitmap; }

 

 

!!大部分内容来自网路

 

转载于:https://www.cnblogs.com/v587yy/p/7656021.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162790.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • TTL232和RS232的区别

    逻辑电平定义不同:TTL232的0是用0v表示。1是用5V表示。RS232的0是用+3V–+15V表示,1是用-3V—15V表示。接口一般都用三根线,1:地线。2:写入。3:导出。他们不可直连,中间需接电平转接板,…

  • matlab中plot函数的功能及用法_plot绘制什么图

    matlab中plot函数的功能及用法_plot绘制什么图使用plot绘制二维图像本文转自http://blog.sina.com.cn/s/blog_d8f783c90102woqb.html以及https://blog.csdn.net/alvern_zhang/article/details/51153058MATLAB中plot函数常常被用于绘制各种二维图像,其用法也是多种多样,本文仅介绍plot函数的基本用法——使用plot函数绘制二维点图和线…

    2022年10月16日
  • mle与map_normal map

    mle与map_normal map摘要本文是关于MLE(最大似然估计)与MAP(最大后验概率)的一些自己学习的心得.(本文的重点在于对比MLE和MAP)正文1.MLE(最大似然估计)MLE简单的理解可以这样:假设我们手上有一批数据(样本),而且我们假设这些数据(样本)服从某个分布(模型已知),但是参数未知.这个时候,我们希望对这个参数进行估计,而MLE的思想就是找到一个参数值,使得每条样本出现的概率最…

    2022年10月31日
  • hbase解决海量图片存储

    hbase解决海量图片存储随着互联网、云计算及大数据等信息技术的发展,越来越多的应用依赖于对海量数据的存储和处理,如智能监控、电子商务、地理信息等,这些应用都需要对海量图片的存储和检索。由于图片大多是小文件(80%大小在数MB以内),以GFS、HDFS为代表的适用于流式访问大文件的分布式存储系统,若直接用来存储图片,由于元数据膨胀,在扩展性和性能方面均存在严重问题。   为了解决HDFS在小文件存储方面的问题,通

  • Python range 函数 – Python零基础入门教程

    Python range 函数 – Python零基础入门教程目录一.Pythonrange函数简介二.Pythonrange函数使用1.Pythonrange函数常规使用2.Pythonrange函数在for循环中使用三.猜你喜欢

  • “Word在试图打开文件时遇到错误。请尝试下列方法:* 检查文档或驱动器的文件权限。* 确保有足够的内存和磁盘空间。* 用文件恢复转换器打开文件。”问题!…[通俗易懂]

    “Word在试图打开文件时遇到错误。请尝试下列方法:* 检查文档或驱动器的文件权限。* 确保有足够的内存和磁盘空间。* 用文件恢复转换器打开文件。”问题!…[通俗易懂]Word在试图打开文件时遇到错误。请尝试下列方法:*检查文档或驱动器的文件权限。*确保有足够的内存和磁盘空间。*用文件恢复转换器打开文件。如下图:让同事在他们自己电脑上,都是可以打开的,就我的电脑不能打开,网上搜索了一系列方法,如改后缀名、用word工具修复、下载office补丁安装都不能解决。后面无意中找到的解决方法,与有类似经历…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号