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();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM