zoukankan      html  css  js  c++  java
  • C# 使用NPlot绘图技巧 转 武胜

    C# 使用NPlot绘图技巧

    (2010-07-05 19:14:05)
    标签:

    c

    nplot

    绘图

    it

    分类: 学习

    ///首先要将下载的NPlot.dll加到工具箱里,拖一个控件到窗体上,声明using NPlot;

    ////////对所绘的图进行打印与保存//////////
    private void print()
    {
        myPlot.Print(true);
    }
    private void save()
    {
        saveFileDialog1.Filter = "位图 (*.bmp)|*.bmp|JPEG(*.jpg)|*.jpg;*.jpeg;*,jpe|Gif(*.gif)|*.gif|Tiff(*.tiff)|*.tiff|Png(*.png)|*.png|Exif(*.exif)|*.exif| 所有文件(*.*)|*.*";
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
           try
            {
                int h = myPlot.Size.Height;
                int w = myPlot.Size.Width;
                Bitmap bm = new Bitmap(w, h);
                Bitmap bm1 = new Bitmap(w, h);
                Rectangle rt = new Rectangle(1, 1, w, h);
                saveFileDialog1.RestoreDirectory = true;
                saveFileDialog1.CreatePrompt = true;
                myPlot.DrawToBitmap(bm, rt);
                if (saveFileDialog1.FilterIndex == 1)
                {
                    bm.Save(saveFileDialog1.FileName);
                }
                if (saveFileDialog1.FilterIndex == 2)
                {
                    bm.Save(saveFileDialog1.FileName, ImageFormat.Jpeg);
                }
                if (saveFileDialog1.FilterIndex == 3)
                {
                    bm.Save(saveFileDialog1.FileName, ImageFormat.Gif);
                }
                if (saveFileDialog1.FilterIndex == 4)
                {
                    bm.Save(saveFileDialog1.FileName, ImageFormat.Tiff);
                }
                if (saveFileDialog1.FilterIndex == 5)
                {
                    bm.Save(saveFileDialog1.FileName, ImageFormat.Png);
                }
                if (saveFileDialog1.FilterIndex == 6)
                {
                    bm.Save(saveFileDialog1.FileName, ImageFormat.Exif);
                }
            }
            catch (Exception MyEx)
            {
                MessageBox.Show(MyEx.ToString(), "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
    }

    ///放大缩小
    private void changeSize()
    {
        this.myPlot.XAxis1.IncreaseRange(0.1);
        this.myPlot.YAxis1.IncreaseRange(0.1); //缩小
        this.myPlot.XAxis1.IncreaseRange(-0.1);
        this.myPlot.YAxis1.IncreaseRange(-0.1); //放大
        this.myPlot.Refresh();
    }
    /////////各种绘图//////////         
    private void plot()
    {
        this.myPlot.Clear(
        ////////标签//////////
        string[] strLabel = new string[leng];
        for (int i = 0; i < leng; i++)
            strLabel[i] = Convert.ToString(p[i]);
        LabelPointPlot labp = new LabelPointPlot();
        labp.AbscissaData = X;
        labp.OrdinateData = p;
        labp.TextData = strLabel;
        labp.LabelTextPosition = LabelPointPlot.LabelPositions.Above;
        labp.Marker = new Marker(Marker.MarkerType.Square, 8);
        labp.Marker.Color = Color.Blue;
        myPlot.Add(labp);
        myPlot.Refresh();           
        ////////网格//////////
        Grid mygrid = new Grid();
        mygrid.HorizontalGridType = Grid.GridType.Fine;
        mygrid.VerticalGridType = Grid.GridType.Fine;
        this.myPlot.Add(mygrid);
        ////////曲线,双坐标轴//////////
        ///////水平线//////////
        HorizontalLine line = new HorizontalLine(1.2);
        line.LengthScale = 0.89f;
        this.myPlot.Add(line, -10);
        ///////垂直线///////////
        VerticalLine line2 = new VerticalLine(1.2);
        line2.LengthScale = 0.89f;
        this.myPlot.Add(line2);
        ///////普通的线///////////
        LinePlot lp3 = new LinePlot();
        lp3.OrdinateData = yPW;
        lp3.AbscissaData = x;
        lp3.Pen = new Pen(Color.Orange);
        lp3.Pen.Width = 2;
        lp3.Label = " 价格";
        this.myPlot.Add(lp3);
        LinearAxis linx = (LinearAxis)myPlot.XAxis1;
        this.myPlot.XAxis1 = linx;
        LinearAxis liny = (LinearAxis)myPlot.YAxis1;
        liny.Label = "价格";
        liny.AxisColor = Color.Orange;
        liny.LabelColor = Color.Orange;
        liny.TickTextColor = Color.Orange;
        this.myPlot.YAxis1 = liny;
        LinePlot lp4 = new LinePlot();
        lp4.OrdinateData = yUw;
        lp4.AbscissaData = x;
        lp4.Pen = new Pen(Color.Green);
        lp4.Pen.Width = 2;
        lp4.Label = "销售量";
        this.myPlot.Add(lp4, PlotSurface2D.XAxisPosition.Top, PlotSurface2D.YAxisPosition.Right);
        LinearAxis liny2 = (LinearAxis)myPlot.YAxis2;
        liny2.WorldMax = 1.2;
        liny2.WorldMin = 0;
        liny2.Label = "销售量";
        liny2.AxisColor = Color.Green;
        liny2.LabelColor = Color.Green;
        liny2.TickTextColor = Color.Green;
        this.myPlot.YAxis2 = liny2;
        ///////图例//////////
        this.myPlot.Legend = new Legend();
        this.myPlot.Legend.AttachTo(PlotSurface2D.XAxisPosition.Top, PlotSurface2D.YAxisPosition.Right);
        this.myPlot.Legend.NumberItemsHorizontally = 2;
        this.myPlot.Legend.HorizontalEdgePlacement = Legend.Placement.Inside;
        this.myPlot.Legend.VerticalEdgePlacement = Legend.Placement.Inside;
        this.myPlot.Legend.YOffset = 5;
        this.myPlot.Legend.XOffset = -5;
        ///////窗体移动//////////
        this.myPlot.AddInteraction(new NPlot.Windows.PlotSurface2D.Interactions.HorizontalDrag());
        this.myPlot.AddInteraction(new NPlot.Windows.PlotSurface2D.Interactions.VerticalDrag());
        this.myPlot.AddInteraction(new NPlot.Windows.PlotSurface2D.Interactions.AxisDrag(true));
        //////累加的柱状图////////
        HistogramPlot hp3 = new HistogramPlot();
        hp3.AbscissaData = x;
        hp3.OrdinateData = yCC1;
        hp3.BaseWidth = 0.6f;
        hp3.RectangleBrush = RectangleBrushes.Vertical.FaintBlueFade;
        hp3.Filled = true;
        hp3.Label = "一月";
        HistogramPlot hp4 = new HistogramPlot();
        hp4.AbscissaData = x;
        hp4.OrdinateData = yCC2;
        hp4.Label = "二月";
        hp4.RectangleBrush = RectangleBrushes.Horizontal.FaintGreenFade;
        hp4.Filled = true;
        hp4.StackedTo(hp3);
        this.myPlot.Add(hp3);
        this.myPlot.Add(hp4);
        //////阶状图////////                  
        StepPlot sp1 = new StepPlot();
        sp1.OrdinateData = yCH1;
        sp1.AbscissaData = x;
        sp1.Label = "高度";
        sp1.Pen.Width = 2;
        sp1.Pen.Color = Color.Blue;
        this.myPlot.Add(sp1);
        /////点状图////////   
        Marker m = new Marker(Marker.MarkerType.Cross1, 6, new Pen(Color.Blue, 2.0F));
        PointPlot pp = new PointPlot(m);
        pp.OrdinateData = a;
        pp.AbscissaData = new StartStep(-500.0, 10.0);
        pp.Label = "Random";
        this.myPlot.Add(pp);
        /////Image图////////
        double[,] map = new double[19, 19];
        for (int i = 0; i < 19; ++i)
        {
            for (int j = 0; j < 19; ++j)
            {
                map[i, j] = Convert.ToDouble(tokens[i * 19 + j], new
                    System.Globalization.CultureInfo("en-US"));
            }
        }
        ImagePlot ip = new ImagePlot(map, -9.0f, 1.0f, -9.0f, 1.0f);
        ip.Gradient = new LinearGradient(Color.Gold, Color.Black);
        this.myPlot.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
        this.myPlot.AddInteraction(new NPlot.Windows.PlotSurface2D.Interactions.RubberBandSelection());
        this.myPlot.Add(ip);
        ///////蜡烛图///////////
        int[] opens =  { 1, 2, 1, 2, 1, 3 };
        double[] closes = { 2, 2, 2, 1, 2, 1 };
        float[] lows =   { 0, 1, 1, 1, 0, 0 };
        System.Int64[] highs =  { 3, 2, 3, 3, 3, 4 };
        int[] times =  { 0, 1, 2, 3, 4, 5 };
        CandlePlot cp = new CandlePlot();
        cp.CloseData = closes;
        cp.OpenData = opens;
        cp.LowData = lows;
        cp.HighData = highs;
        cp.AbscissaData = times;
        this.myPlot.Add(cp);
        /////对数坐标轴////////     

        // x axis
        LogAxis logax = new LogAxis(plotSurface.XAxis1);
        logax.WorldMin = xmin;
        logax.WorldMax = xmax;
        logax.AxisColor = Color.Red;
        logax.LabelColor = Color.Red;
        logax.TickTextColor = Color.Red;
        logax.LargeTickStep = 1.0f;
        logax.Label = "x";
        this.myPlot.XAxis1 = logax;
        // y axis
        LogAxis logay = new LogAxis(plotSurface.YAxis1);
        logay.WorldMin = ymin;
        logay.WorldMax = ymax;
        logay.AxisColor = Color.Red;
        logay.LabelColor = Color.Red;
        logay.TickTextColor = Color.Red;
        logay.LargeTickStep = 1.0f;
        logay.Label = "x^2";
        this.myPlot.YAxis1 = logay;
        /////字符坐标轴////////
        LabelAxis la1 = new LabelAxis(this.myPlot.XAxis1);
        string[] sX = new string [15];
        for (int i = 0; i < 15; i++)
        {
            la1.AddLabel(sX[i].ToString(), i);
        }
        la1.Label = "时间";
        la1.TickTextFont = new Font("Courier New", 10);
        la1.TicksBetweenText = true;
        this.myPlot.XAxis1 = la1;
        /////区域着色////////          
        FilledRegion fr = new FilledRegion(new VerticalLine(1.2),new VerticalLine(2.4));
        //两条线之间的区域: FilledRegion fr = new FilledRegion(lp1, lp2);
        fr.Brush = Brushes.BlanchedAlmond;
        this.myPlot.Add(fr);
       //////画箭头//////////
        ArrowItem a = new ArrowItem(new PointD(2, 4),360-(30-90), "Arrow");
        a.HeadOffset = 5;
        a.ArrowColor = Color.Red;
        a.TextColor = Color.Purple;
        this.myPlot.Add(a);

        this.myPlot.Refresh();
    }

  • 相关阅读:
    【python3之文件操作】
    【Python3之字符编码】
    【python3之变量,输入输出,判断,循环】
    【Python3之正则re】
    【Python3的命名空间与作用域,闭包函数,装饰器】
    【Python3的函数初识】
    【Python3的进制扫盲】
    JS实现数组去重方法总结(六种方法)
    localstorage sessionstorage和cookie的区别,以及他们各自的用法总结
    es6 javascript对象方法Object.assign()
  • 原文地址:https://www.cnblogs.com/zeroone/p/2753304.html
Copyright © 2011-2022 走看看