精华内容
下载资源
问答
  • 你根据 a1:a4的数值作为X值,b2:b4的数值作为Y值,画了一个平滑线散点图 想查找c1的数值是不是在这条曲线上 就可以输入 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,1) 得到曲线上第一个 X值=C1数值的点的X坐标 =Index( ...
  • Flutter 实现平滑曲线折线图

    千次阅读 2018-12-15 08:31:22
    虽然基础使用实现的折线图效果已经很不错了,但 UI 设计是平滑曲线效果,工程师也赞同曲线效果更优雅的观点,所以决定挑战自我,自己实现平滑曲线效果。 通过一层层源码分析,最终发现绘制折线图折线的实现位置,...

    背景

    公司最近引入了 Flutter 技术栈,Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。然而由于 Flutter 还在早期发展阶段没有,生态建设还不够完善。比如项目中需要用到图表 UI 组件,经过一番调研,Google/charts 功能最强大,样式最丰富(详见 online gallery),于是引入到项目中。但是 charts 只实现了直线折线图,所以只能 fork charts 项目自己实现平滑曲线效果。

    基础使用

    • Goole/charts 这个图表库很强大,但是文档不太友好,只有 online gallery 上有纯示例代码,几乎没有 Api 说明。

    • 可行性分析的 Demo 效果

    • 仔细研究优化后的效果

    • 具体使用代码及注释
    return Container(
      height: 150.0,
      child: charts.LineChart(
        _createChartData(), // 折线图的点的数据列表
        animate: true, // 动画
        defaultRenderer: charts.LineRendererConfig( // 折线图绘制的配置
          includeArea: true,
          includePoints: true,
          includeLine: true,
          stacked: false,
        ),
        domainAxis: charts.NumericAxisSpec( // 主轴的配置
          tickFormatterSpec: DomainFormatterSpec(widget.dateRange), // tick 值的格式化,这里把 num 转换成 String
          renderSpec: charts.SmallTickRendererSpec( // 主轴绘制的配置
            tickLengthPx: 0, // 刻度标识突出的长度
            labelOffsetFromAxisPx: 12, // 刻度文字距离轴线的位移
            labelStyle: charts.TextStyleSpec( // 刻度文字的样式
              color: ChartUtil.getChartColor(HColors.lightGrey),
              fontSize: HFontSizes.smaller.toInt(),
            ),
            axisLineStyle: charts.LineStyleSpec( // 轴线的样式
              color: ChartUtil.getChartColor(ChartUtil.lightBlue),
            ),
          ),
          tickProviderSpec: charts.BasicNumericTickProviderSpec( // 轴线刻度配置
            dataIsInWholeNumbers: false,
            desiredTickCount: widget.data.length, // 期望显示几个刻度
          ),
        ),
        primaryMeasureAxis: charts.NumericAxisSpec( // 交叉轴的配置,参数参考主轴配置
          showAxisLine: false, // 显示轴线
          tickFormatterSpec: MeasureFormatterSpec(),
          tickProviderSpec: charts.BasicNumericTickProviderSpec(
            dataIsInWholeNumbers: false,
            desiredTickCount: 4,
          ),
          renderSpec: charts.GridlineRendererSpec( // 交叉轴刻度水平线
            tickLengthPx: 0,
            labelOffsetFromAxisPx: 12,
            labelStyle: charts.TextStyleSpec(
              color: ChartUtil.getChartColor(HColors.lightGrey),
              fontSize: HFontSizes.smaller.toInt(),
            ),
            lineStyle: charts.LineStyleSpec(
              color: ChartUtil.getChartColor(ChartUtil.lightBlue),
            ),
            axisLineStyle: charts.LineStyleSpec(
              color: ChartUtil.getChartColor(ChartUtil.lightBlue),
            ),
          ),
        ),
        selectionModels: [ // 设置点击选中事件
          charts.SelectionModelConfig(
            type: charts.SelectionModelType.info,
            listener: _onSelectionChanged,
          )
        ],
        behaviors: [
          charts.InitialSelection(selectedDataConfig: [ // 设置默认选中
            charts.SeriesDatumConfig<num>('LineChart', _index)
          ]),
        ],
      ),
    );
    复制代码

    平滑曲线效果实现

    虽然基础使用实现的折线图效果已经很不错了,但 UI 设计是平滑曲线效果,工程师也赞同曲线效果更优雅的观点,所以决定挑战自我,自己实现平滑曲线效果。 通过一层层源码分析,最终发现绘制折线图折线的实现位置,改写该实现即可实现平滑曲线效果

    line_chart.dart

    defaultRenderer: charts.LineRendererConfig( // 折线图绘制的配置
      includeArea: true,
      includePoints: true,
      includeLine: true,
      stacked: false,
    ),
    复制代码

    line_renderer.dart

    if (config.includeLine) {
       ...
            canvas.drawLine(
                clipBounds: _getClipBoundsForExtent(line.positionExtent),
                dashPattern: line.dashPattern,
                points: line.points,
                stroke: line.color,
                strokeWidthPx: line.strokeWidthPx,
                roundEndCaps: line.roundEndCaps);
          }
        });
      }
    });
    复制代码

    chart_canvas.dart

    @override
    void drawLine(
       ...
      _linePainter.draw(
          canvas: canvas,
          paint: _paint,
          points: points,
          clipBounds: clipBounds,
          fill: fill,
          stroke: stroke,
          roundEndCaps: roundEndCaps,
          strokeWidthPx: strokeWidthPx,
          dashPattern: dashPattern);
    }
    复制代码

    既然找到了具体绘制折线的入口,剩下的就是如何根据给出的数据集合,绘制出平滑的曲线,而且曲线的范围不能超出数据集合的范围。前前后后尝试了三种绘制曲线的算法,前两种都由于超出数据集合范围而弃用了,最后的曲线效果采用的第三种算法绘制的。

    样条插值是一种工业设计中常用的、得到平滑曲线的一种插值方法,三次样条又是其中用的较为广泛的一种。算法参考 Java 三次样条插值,代码实现如下: interpolation.dart

    class Interpolation {
      int n;
      List<num> xs;
      List<num> ys;
    
      bool spInitialized;
      List<num> spY2s;
    
      Interpolation(List<num> _xs, List<num> _ys) {
        this.n = _xs.length;
        this.xs = _xs;
        this.ys = _ys;
        this.spInitialized = false;
      }
    
      num spline(num x) {
        if (!this.spInitialized) {
          // Assume Natural Spline Interpolation
          num p, qn, sig, un;
          List<num> us;
    
          us = new List<num>(n - 1);
          spY2s = new List<num>(n);
          us[0] = spY2s[0] = 0.0;
    
          for (int i = 1; i <= n - 2; i++) {
            sig = (xs[i] - xs[i - 1]) / (xs[i + 1] - xs[i - 1]);
            p = sig * spY2s[i - 1] + 2.0;
            spY2s[i] = (sig - 1.0) / p;
            us[i] = (ys[i + 1] - ys[i]) / (xs[i + 1] - xs[i]) -
                (ys[i] - ys[i - 1]) / (xs[i] - xs[i - 1]);
            us[i] = (6.0 * us[i] / (xs[i + 1] - xs[i - 1]) - sig * us[i - 1]) / p;
          }
          qn = un = 0.0;
    
          spY2s[n - 1] = (un - qn * us[n - 2]) / (qn * spY2s[n - 2] + 1.0);
          for (int k = n - 2; k >= 0; k--) {
            spY2s[k] = spY2s[k] * spY2s[k + 1] + us[k];
          }
    
          this.spInitialized = true;
        }
    
        int klo, khi, k;
        num h, b, a;
    
        klo = 0;
        khi = n - 1;
        while (khi - klo > 1) {
          k = (khi + klo) >> 1;
          if (xs[k] > x)
            khi = k;
          else
            klo = k;
        }
        h = xs[khi] - xs[klo];
        if (h == 0.0) {
          throw new Exception('h==0.0');
        }
        a = (xs[khi] - x) / h;
        b = (x - xs[klo]) / h;
        return a * ys[klo] +
            b * ys[khi] +
            ((a * a * a - a) * spY2s[klo] + (b * b * b - b) * spY2s[khi]) *
                (h * h) /
                6.0;
      }
    }
    复制代码

    line_painter.dart

    /// Draws smooth lines between each point.
    void _drawSmoothLine(Canvas canvas, Paint paint, List<Point> points) {
      var interval = 0.1;
      var interpolationPoints = List<Point>();
      for (int k = 0; k < points.length; k++) {
        if ((k + 1) < points.length) {
          num temp = 0;
          while (temp < points[k + 1].x) {
            temp = temp + interval;
            interpolationPoints.add(Point(temp, 0.0));
          }
        }
      }
      var tempX = points.map((item) => item.x).toList();
      var tempY = points.map((item) => item.y).toList();
      var ip = Interpolation(tempX, tempY);
      for (int j = 0; j < interpolationPoints.length; j++) {
        interpolationPoints[j] =
            Point(interpolationPoints[j].x, ip.spline(interpolationPoints[j].x));
      }
      interpolationPoints.addAll(points);
      interpolationPoints.sort((a, b) {
        if (a.x == b.x)
          return 0;
        else if (a.x < b.x)
          return -1;
        else
          return 1;
      });
      final path = new Path();
      path.moveTo(interpolationPoints[0].x.toDouble(), interpolationPoints[0].y.toDouble());
      for (int i = 1; i < interpolationPoints.length; i++) {
        path.lineTo(interpolationPoints[i].x.toDouble(), interpolationPoints[i].y.toDouble());
      }
      canvas.drawPath(path, paint);
    }
    复制代码

    最终效果图

    看起来效果还是挺完美的,但是其实有个致命问题,曲线的顶点可能会超出折线图数据的范围

    三次贝塞尔曲线就是这样的一条曲线,它是依据四个位置任意的点坐标绘制出的一条光滑曲线,其难点是两个控制点的计算,算法参考 贝塞尔曲线平滑拟合折线段,代码实现如下: line_painter.dart

    /// Draws smooth lines between each point.
    void _drawSmoothLine(Canvas canvas, Paint paint, List<Point> points) {
      var targetPoints = List<Point>();
      targetPoints.add(points[0]);
      targetPoints.addAll(points);
      targetPoints.add(points[points.length - 1]);
      final path = new Path();
      for (int i = 1; i < targetPoints.length - 2; i++) {
        path.moveTo(
            targetPoints[i].x.toDouble(), targetPoints[i].y.toDouble());
        var controllerPoint1 = Point(
          targetPoints[i].x + (targetPoints[i + 1].x - targetPoints[i - 1].x) / 4,
          targetPoints[i].y + (targetPoints[i + 1].y - targetPoints[i - 1].y) / 4,
        );
        var controllerPoint2 = Point(
          targetPoints[i + 1].x - (targetPoints[i + 2].x - targetPoints[i].x) / 4,
          targetPoints[i + 1].y - (targetPoints[i + 2].y - targetPoints[i].y) / 4,
        );
        path.cubicTo(
            controllerPoint1.x, controllerPoint1.y, controllerPoint2.x,
            controllerPoint2.y, targetPoints[i + 1].x, targetPoints[i + 1].y);
      }
      canvas.drawPath(path, paint);
    }
    复制代码

    平滑曲线效果也是可以实现的,但是依然存在顶点越界的问题

    • 贝塞尔曲线(MonotoneX)

    因为之前 RN 项目用到了 victory-native / victory-chart,通过源码和文档发现它的曲线效果实现是依赖了 d3-shap 的 d3.curveMonotoneX,算法参考 monotone.js,实现代码如下:

    注:由于算法需要当前点和前两个点才能画出一段曲线,所以在折线点数据集合最后人为添加了一个点,否则画出来的曲线会缺少最后一段

    line_painter.dart

    /// Draws smooth lines between each point.
    void _drawSmoothLine(Canvas canvas, Paint paint, List<Point> points) {
      var targetPoints = List<Point>();
      targetPoints.addAll(points);
      targetPoints.add(Point(
          points[points.length - 1].x * 2, points[points.length - 1].y * 2));
      var x0,
          y0,
          x1,
          y1,
          t0,
          path = Path();
      for (int i = 0; i < targetPoints.length; i++) {
        var t1;
        var x = targetPoints[i].x;
        var y = targetPoints[i].y;
        if (x == x1 && y == y1) return;
        switch (i) {
          case 0:
            path.moveTo(x, y);
            break;
          case 1:
            break;
          case 2:
            t1 = MonotoneX.slope3(x0, y0, x1, y1, x, y);
            MonotoneX.point(
                path,
                x0,
                y0,
                x1,
                y1,
                MonotoneX.slope2(x0, y0, x1, y1, t1),
                t1);
            break;
          default:
            t1 = MonotoneX.slope3(x0, y0, x1, y1, x, y);
            MonotoneX.point(
                path,
                x0,
                y0,
                x1,
                y1,
                t0,
                t1);
        }
        x0 = x1;
        y0 = y1;
        x1 = x;
        y1 = y;
        t0 = t1;
      }
      canvas.drawPath(path, paint);
    }
    复制代码

    最终效果图,顶点都是折线图数据集合里的点,完美!

    • 源码

    详见 GitHub dev 分支 github.com/123lxw123/c…

    本文版权属于再惠研发团队,欢迎转载,转载请保留出处。@123lxw123

    展开全文
  • 现在有一些点,比如(0,4)、(1,1)、(2,0)、(3,1)、(4,4) ,二维散点图已经画出来了,但不是平滑曲线,想实现Excel中平滑线散点图那样,请问该如何写代码啊[face]monkey:0.gif[/face]?
  • import pyecharts.options as opts from pyecharts.charts import Line x=['星期一','星期二','星期三','...Line-多折线重叠")) ) line.render_notebook()
  • 到现在为止,您可能已经找到了Centripetal Catmull-Rom spline的Wikipedia页面,但是如果没有,它包含以下示例代码:import numpyimport matplotlib.pyplot as pltdef CatmullRomSpline(P0, P1, P2, P3, nPoints=100):...

    到现在为止,您可能已经找到了Centripetal Catmull-Rom spline的Wikipedia页面,但是如果没有,它包含以下示例代码:

    import numpy

    import matplotlib.pyplot as plt

    def CatmullRomSpline(P0, P1, P2, P3, nPoints=100):

    """

    P0, P1, P2, and P3 should be (x,y) point pairs that define the

    Catmull-Rom spline.

    nPoints is the number of points to include in this curve segment.

    """

    # Convert the points to numpy so that we can do array multiplication

    P0, P1, P2, P3 = map(numpy.array, [P0, P1, P2, P3])

    # Calculate t0 to t4

    alpha = 0.5

    def tj(ti, Pi, Pj):

    xi, yi = Pi

    xj, yj = Pj

    return ( ( (xj-xi)**2 + (yj-yi)**2 )**0.5 )**alpha + ti

    t0 = 0

    t1 = tj(t0, P0, P1)

    t2 = tj(t1, P1, P2)

    t3 = tj(t2, P2, P3)

    # Only calculate points between P1 and P2

    t = numpy.linspace(t1,t2,nPoints)

    # Reshape so that we can multiply by the points P0 to P3

    # and get a point for each value of t.

    t = t.reshape(len(t),1)

    A1 = (t1-t)/(t1-t0)*P0 + (t-t0)/(t1-t0)*P1

    A2 = (t2-t)/(t2-t1)*P1 + (t-t1)/(t2-t1)*P2

    A3 = (t3-t)/(t3-t2)*P2 + (t-t2)/(t3-t2)*P3

    B1 = (t2-t)/(t2-t0)*A1 + (t-t0)/(t2-t0)*A2

    B2 = (t3-t)/(t3-t1)*A2 + (t-t1)/(t3-t1)*A3

    C = (t2-t)/(t2-t1)*B1 + (t-t1)/(t2-t1)*B2

    return C

    def CatmullRomChain(P):

    """

    Calculate Catmull Rom for a chain of points and return the combined curve.

    """

    sz = len(P)

    # The curve C will contain an array of (x,y) points.

    C = []

    for i in range(sz-3):

    c = CatmullRomSpline(P[i], P[i+1], P[i+2], P[i+3])

    C.extend(c)

    return C

    很好地计算n = 4点的插值,如下所示:

    points = [[0,1.5],[2,2],[3,1],[4,0.5],[5,1],[6,2],[7,3]]

    c = CatmullRomChain(points)

    px, py = zip(*points)

    x, y = zip(*c)

    plt.plot(x, y)

    plt.plot(px, py, 'or')

    产生此matplotlib映像:

    qjAtn.png

    更新:

    另外,还有一个针对BarycentricInterpolator的scipy.interpolate函数,它似乎可以满足您的需求.它使用起来非常简单,适用于只有3个数据点的情况.

    from scipy.interpolate import BarycentricInterpolator

    # create some data points

    points1 = [[0, 2], [1, 4], [2, -2], [3, 6], [4, 2]]

    points2 = [[1, 1], [2, 5], [3, -1]]

    # put data into x, y tuples

    x1, y1 =zip(*points1)

    x2, y2 = zip(*points2)

    # create the interpolator

    bci1 = BarycentricInterpolator(x1, y1)

    bci2 = BarycentricInterpolator(x2, y2)

    # define dense x-axis for interpolating over

    x1_new = np.linspace(min(x1), max(x1), 1000)

    x2_new = np.linspace(min(x2), max(x2), 1000)

    # plot it all

    plt.plot(x1, y1, 'o')

    plt.plot(x2, y2, 'o')

    plt.plot(x1_new, bci1(x1_new))

    plt.plot(x2_new, bci2(x2_new))

    plt.xlim(-1, 5)

    0L3Qs.png

    更新2

    scipy中的另一个选项是通过Akima1DInterpolator进行akima插值.它与Barycentric一样容易实现,但是具有避免在数据集边缘发生大振荡的优点.这是一些测试案例,这些案例展示了您到目前为止所要求的所有条件.

    from scipy.interpolate import Akima1DInterpolator

    x1, y1 = np.arange(13), np.random.randint(-10, 10, 13)

    x2, y2 = [0,2,3,6,12], [100,50,30,18,14]

    x3, y3 = [4, 6, 8], [60, 80, 40]

    akima1 = Akima1DInterpolator(x1, y1)

    akima2 = Akima1DInterpolator(x2, y2)

    akima3 = Akima1DInterpolator(x3, y3)

    x1_new = np.linspace(min(x1), max(x1), 1000)

    x2_new = np.linspace(min(x2), max(x2), 1000)

    x3_new = np.linspace(min(x3), max(x3), 1000)

    plt.plot(x1, y1, 'bo')

    plt.plot(x2, y2, 'go')

    plt.plot(x3, y3, 'ro')

    plt.plot(x1_new, akima1(x1_new), 'b', label='random points')

    plt.plot(x2_new, akima2(x2_new), 'g', label='exponential')

    plt.plot(x3_new, akima3(x3_new), 'r', label='3 points')

    plt.xlim(-1, 15)

    plt.ylim(-10, 110)

    plt.legend(loc='best')

    8OM4l.png

    展开全文
  • echarts 折线图平滑曲线

    万次阅读 2018-03-23 16:22:44
    series : [ { symbol:'none', //去掉折线图中的节点 smooth: false //true 为平滑曲线,false为直线 } ]
    series : [
                {
    	            symbol:'none', //去掉折线图中的节点
                    smooth: false  //true 为平滑曲线,false为直线
                }
            ]
    
    展开全文
  • 平滑折线图

    2017-11-30 18:54:55
    平滑折线图 最近因为项目需要显示最近几个数据的走势图,故抽出这部分代码记录在此,同时也是鞭策自己开始写博客。 闲聊几句,现在的公司动不动有博客的加分,实际上不是真正的大牛,博客几乎没有技术含量,...

    平滑的折线图

    最近因为项目需要显示最近几个数据的走势图,故抽出这部分代码记录在此,同时也是鞭策自己开始写博客。

    闲聊几句,现在的公司动不动有博客的加分,实际上不是真正的大牛,博客几乎没有技术含量,要不就是转载要不就是抄。
    然而,这样有用,我也没办法。万事开头难,希望借此记录自己的思路和代码,同时也是提供给新手朋友们一些东西。

    按照套路,来个效果图

    先来同性交友网站的传送门吧

    https://github.com/zhaotao12138/SmoothLineChart

    代码思路及实现

    自定义View

    自定义View就不用啰嗦了,网上一大推。
    提一点就是要让自己的自定义View支持wrap_content和padding属性。

    • 支持wrap_content属性
      重写onMeasure()方法,判定测量模式是否为AT_MOST模式,如果是的话需要给定一个最小值
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
            int widthMode = MeasureSpec.getMode(widthMeasureSpec);
            int heightMode = MeasureSpec.getMode(heightMeasureSpec);
            int widthSize = MeasureSpec.getSize(widthMeasureSpec);
            int heightSize = MeasureSpec.getSize(heightMeasureSpec);
    
            if (widthMode == MeasureSpec.AT_MOST && heightMode == MeasureSpec.AT_MOST) {
                setMeasuredDimension(getMinWidth(), getMinHeight());
            } else if (widthMode == MeasureSpec.AT_MOST) {
                setMeasuredDimension(getMinWidth(), heightSize);
            } else if (heightMode == MeasureSpec.AT_MOST) {
                setMeasuredDimension(widthSize, getMinHeight());
            }
        }

    其中getMinWidth() 和 getMinHeight() 就是我给定的最小值

    • 支持padding属性
      原理很简单,就是在你做任何计算位置点的时候记得有个padding值就行了
        @Override
        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
            super.onLayout(changed, left, top, right, bottom);
    
            mWidth = getWidth() - getPaddingLeft() - getPaddingRight();
            mHeight = getHeight() - getPaddingTop() - getPaddingBottom();
        }

    数据存储

    采用一个byte[]存储,定长度为你需要的值。添加一个索引,这样就可以构成一个循环列表

    画出背景

    首选需要给View画一个背景图,以突出主体,采用圆角背景

        private void drawBackground(Canvas canvas) {
            mPaint.setColor(DEFAULT_BG);
            mPaint.setStyle(Paint.Style.FILL);
            Rect rect = new Rect(getPaddingLeft(), getPaddingTop(), mWidth + getPaddingLeft(),
                             mHeight + getPaddingTop());
            canvas.drawRoundRect(new RectF(rect), DEFAULT_RADIUS_X, DEFAULT_RADIUS_Y, mPaint);
        }

    画出平滑的曲线

    划重点了

        private void drawLineChart(Canvas canvas) {
            if (!mDrawLine) {
                return;
            }
    
            int partitionCount = DEFAULT_VALUE_SIZE - 1;
    
            int left = getPaddingLeft() + dp2px(DEFAULT_LINES_PADDING);
            int top = getPaddingTop() + dp2px(DEFAULT_LINES_PADDING);
            int right = mWidth + getPaddingLeft() - dp2px(DEFAULT_LINES_PADDING);
            int bottom = mHeight + getPaddingTop() - dp2px(DEFAULT_LINES_PADDING);
    
            float partitionSizeX = (right - left) / (float) partitionCount;
    
            mPaint.setColor(DEFAULT_LINE_COLOR);
            mPaint.setStrokeWidth(3);
            mPaint.setStyle(Paint.Style.STROKE);
            Path path = new Path();
    
            for (int i = 0; i < partitionCount; i++) {
                byte currentValue = mValues[(mHeadIndex + i) % DEFAULT_VALUE_SIZE];
                byte nextValue = mValues[(mHeadIndex + i + 1) % DEFAULT_VALUE_SIZE];
    
                Point start = new Point((int)(left + partitionSizeX * i), bottom - (bottom - top) * currentValue / 100);
                Point end = new Point((int)(left + partitionSizeX * (i + 1)), bottom - (bottom - top) * nextValue / 100);
                int centerX = (start.x + end.x) / 2;
                Point control1 = new Point(centerX, start.y);
                Point control2 = new Point(centerX, end.y);
    
                path.moveTo(start.x, start.y);
                path.cubicTo(control1.x, control1.y, control2.x, control2.y, end.x, end.y);
    
                canvas.drawPath(path, mPaint);
            }
        }

    写在最后

    第一次写博客没有什么经验,很多想到的东西就是没有办法表达,还有一个原因就是很多想用图片或者gif表示,但不会做啊。
    以后会改善。

    • 联系方式
      email: zhaotao1206@163.com
      QQ: 623792428
    展开全文
  • 2.8带平滑线散点图

    千次阅读 2015-06-15 10:55:03
    所谓“巧妇难为无米之炊”,在进行数据可视化的时候也会出现这个问题。有时候实验数据就只有寥寥数个,但是你却需要将它绘制...前文重点讲解了散点图的制作过程,下面将以图2-8-1为例对带平滑线散点图绘制进行讲解。
  • 2.9 带平滑线散点图

    千次阅读 2015-06-15 11:31:34
    在同一实验条件下,只改变其中一个实验因素,测试不同的实验水平对实验结果的影响,这是常见的实验方案,通常都需要将数据转换成图表进行表示说明,本节将以图2-9-1为列对带平滑线散点图进行讲解。
  • clear; x1=-0.05:0.03:0.2; x2=0:0.05:0.35; y1(:,1)=0;y1(:,2)=0;y1(:,3)=0.6;y1(:,4)=0.86;y1(:,5)=0.93;y1(:,6)=0.97;y1(:,7)=0.980;y1(:,8)=0.99;y1(:,9)=1.0; y2(:,1)=0;y2(:,2)=0.1;... 如下:
  • 2.14 双纵坐标的带平滑线散点图

    千次阅读 2015-06-16 22:36:15
    有时候,同一个自变量因素,却影响两个因变量因素,这个时候想要将数据绘制成图表,就需要使用双纵坐标的带平滑线散点图。Excel里可以绘制双纵坐标、双横坐标和双纵横坐标3种特殊类型。本节将详细地讲解双纵坐标的...
  • Excel折线图面积图模板-添加平滑线的多彩柱形图
  • 2.11 带平滑线但无数据标签的散点图

    千次阅读 2015-06-16 22:28:55
    散点图和曲线图是两个应用范围最广的科学论文图标,前文详细地介绍了散点图系列的制作方法,本节将以图2-11-1为例重点讲解曲线图的制作...作图思路:在Excel自动生成的带平滑线散点图的基础上对平滑线进行调整与设定。
  • 2.10带平滑线且带误差线的散点图

    千次阅读 2015-06-15 13:18:04
    同一实验条件的多次实验得到的数据,在图表绘制时还需要在图表中展示同一条件下实验的标准误差:...这种数据通常用带平滑线且带误差线散点图来表示,本节将以图2-10-1为例讲解带平滑线且带误差线散点图的制作过程。
  • 在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理:实现所需的库numpy、scipy、matplotlib插值法实现...
  • I am reading a netcdf file using python and need to plot a graphs using matplotlib library in python.The netcdf file is containing 3 variables: u v and w components.I have to draw these 3 components o...
  • I am reading a netcdf file using python and need to plot a graphs using matplotlib library in python.The netcdf file is containing 3 variables: u v and w components.I have to draw these 3 components o...
  • 如何用R画折线图散点图平滑曲线图 例子: week 1 2 3 4 5 6 x 3 8 19 24 6 1 y ...
  • 如何用R画折线图散点图平滑曲线图week123456x38192461y12521321要求是以week为横坐标,画出x-week,y-week的折线图散点图平滑曲线图。一.散点图## 输入数据 ##> week> x> y##画x-week散点图##>...
  • 在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理:实现所需的库numpy、scipy、matplotlib插值法实现...
  • 使用matplotlib生成平滑折线图#!/usr/bin/pythonimport matplotlib.pyplot as pltimport timeimport numpy as npfrom scipy.interpolate import spline# Local variablesx = []y = []# Open the ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,514
精华内容 3,005
关键字:

平滑线散点图