精华内容
下载资源
问答
  • EXCEL教程之- 折线图制作技巧,不下后悔
  • Excel百分比趋势图制作教程 用excel作图时候经常会碰到做柱状图和折线图组合,这样的图一般难在折线图的数据很小,是百分比趋势图,所以经常相对前面主数据太小了,在图里看不到,所以需要用次坐标轴来将其显示出来...

    Excel柱状图折线图组合怎么做 Excel百分比趋势图制作教程

    用excel作图时候经常会碰到做柱状图和折线图组合,这样的图一般难在折线图的数据很小,是百分比趋势图,所以经常相对前面主数据太小了,在图里看不到,所以需要用次坐标轴来将其显示出来,下面就介绍这种柱状图添加折线图(百分比趋势图)组合的做法。

    Excel百分比趋势图制作教程

    我们就用这个年份、销售量和增长率表格为例作图。

    首先选中销售量和增长率两列数据

    接着如图所示插入柱状图。

    在出现的图上点击鼠标右键,再点击菜单中的选择数据。

    此时会跳出来选择数据源的界面。点击界面右侧的编辑,这里是编辑横坐标轴的数据。

    跳出轴标签以后,选择年份列的2005到2013,点击确定

    回到选择数据源界面,再点击左侧的编辑,这里是编辑图标签。

    跳出编辑数据系列界面后,选择销售量单元格,确定

    同样的方式,编辑好增长率。

    接着,点击图中所示位置,右键单击。

    在菜单中点击设置数据系列格式。

    勾选次坐标轴,关闭。

    再在红色图(增长率图)上右键单击,出现菜单以后点击更改系列图标类型。

    在跳出的页面选择下图所示的折线图。点击确定

    好了,一个柱状图加折现图的完整的做法就完成了。

    更改标签,主要是将横坐标轴变为年份列,这里可根据自己实际情况确定是否需要修改。

    因为增长率相对于销售量太小了,看不见所以很多时候步骤10的位置很难点到,需要多点几次选中以后再进行后续步骤。

    转载于:https://www.cnblogs.com/amengduo/p/9586941.html

    展开全文
  • yyjcw10000 本套教程采用vs2012+sql2012开发,以销售明细表为例,讲解了常见报表的开发过程,既包含了传统的表格形式的报表、又包含了柱状图(条形图)、饼状图、环形图、南丁格尔图、曲线图、折线图、面积图等,...
  • Axure教程折线图

    2020-11-10 11:06:49
    Axure教程:堆叠柱状 上一期教会大家如何用axure做一个简单的柱状,本文将教大家如何用AXURE做堆叠柱状。 效果如下: 原型预览及下载地址: https://axhub.im/pro/1882d0a30c3301c9 一、功能介绍 ...

    Axure教程:堆叠柱状图

    上一期教会大家如何用axure做一个简单的柱状图,本文将教大家如何用AXURE做堆叠柱状图。

    效果如下:

    原型预览及下载地址:

    https://axhub.im/pro/1882d0a30c3301c9

     

    一、功能介绍

    1. 所有图表不需要联外网,数据也不是写死的,只需在中继器或表格中填写数据即可自动生成图表,操作简单。

    2. 大小、颜色、样式、交互可以自由变换。

    3. 鼠标移入时能显示具体数据。

     

    二、制作方法

    (1)先做出普通的柱形图原件,具体制作方法参考我上一篇文章——Axure 教程:用中继器做柱状图

    (2)中继器内材料:矩形1,复制多个柱形图里面的矩形,填充自己喜欢的颜色,放置于原来矩形一致的地方。

     

     

    (3)中继器内表格设定

     

     

    x是横坐标的值,no是各种产品的值

    (4)在中继器外建一个文本框(命名为最大值)并隐藏,只用于逻辑处理。文本框的值填写no里面最大的总值,该案例为980。逻辑是找到最高的总值,让比它底的值调低高度。具体公式[[LVAR2.height*(Item.no/LVAR1)]]。

    LVAR2.height指矩形的高度,LVAR1指no的最大值,Item.no指no的当前值。

    (5)具体交互思路

    中继器加载时,我们设置每个颜色柱状的尺寸,具体设计方法请看上一遍文章。然后我们让矩形2放在矩形1的上面,矩形3放在矩形2上面,以此类推。

     

     

    (6)做一个标签,如下图所示,默认隐藏。

     

     

    思路,鼠标移入矩形的时候,显示标签,标签跟随鼠标移动,让Item.no的值=文本标签2,Item.x的值=文本标签1,以此类推。

    鼠标移出的时候,隐藏标签即可。

     

     

    最后,制作完成后,以后使用方便,仅需简单填写中继器的内容,即可拥有完美的效果,所以强烈推荐给各位使用。

    展开全文
  • 通过“折线图”为大家讲解WPS表格如何制作图表,折线图的作用是对按月份或类别显示数据变化过程。 第一步:鼠标光标随意定位在工作表中任意一个单元格,在WPS软件中,会弹出一个警告对话框,提示要创建图表必须要有...

    WPS表格插入制作折线图表教程

    WPS表格如果单纯只是数据表,会不直观,通过图表可以把数据进行直观化显示。而今天读书屋OFFICE网陈飞老师要讲的就是如何通过WPS表格制作图表。

     

    通过“折线图”为大家讲解WPS表格如何制作图表,折线图的作用是对按月份或类别显示数据变化过程。

    第一步:鼠标光标随意定位在工作表中任意一个单元格,在WPS软件中,会弹出一个警告对话框,提示要创建图表必须要有对应的数据才可以。

    6371996351990840781561499.pnguploading.4e448015.gif转存失败重新上传取消

     

     

     

     

     

     

     

    第二步:选择示例数据,由于这两列数据不连续,所以先选择第一个单元格区域,再按着CTRL键去选择第二个单元格区域,然后单击【插入】—【折线图】然后再选择“带数据标记的折线图”即可以得到如下图所示图表。

    第三步:折线图创建成功后就可以对其进行美化设置以及图表设置,第一个设置为折线图添加数据标签(创建图表的数据就是数据标签),选定图表后单击“图表元素”按钮,然后选择“数据标签”命令,可根据需要把数据标签放置在图表上方、下方等位置。

    第四步:修改默认图表标题“销售金额”为“读书屋OFFICE网销量呈上升趋势”一般标题可以采用结论的方式,与图表默认样式,选定折线图表然后单击“图表样式”按钮,挑选一个WPS程序默认提供样式。

     

    第五步:把折线图的直线线条改成“平滑线”,选定蓝色折线数据系列,然后击右键选择“设置数据系列格式”,右侧出现“系列选项”面板,在系列选项下—“系列”然后勾选“平滑线”选项。

    第六步:在右侧“系列选项”面板,选择填充与线条,这在这个选项下可以控制折线图线条粗细颜色等,还可以控制折线图上点的大小颜色等,如下图1与图2所示。

    图1—折线图的线条改变

    图2—折线图的上标记设置

    http://www.dushuwu.net/xqkan.aspx?newsid=521 

    第七步:由于折线图上已经标注了数据标签,就可以把右侧坐标轴给隐藏了,选定图表单击图表元素按钮,然后依次单击【坐标轴】—去掉【主要坐标轴】勾选。

    展开全文
  • 今天我们来仿echarts折线图,这个图在echarts是折线图堆叠,但是我用d3改造成了普通的折线图,只为了大家学习(其实在简单的写一个布局就可以)。废话不多说商行代码。 1 制作 Line 类 class Line { ...

    今天我们来仿echarts折线图,这个图在echarts是折线图堆叠,但是我用d3改造成了普通的折线图,只为了大家学习(其实在简单的写一个布局就可以)。废话不多说商行代码。

    1 制作 Line 类

    class Line {
        constructor() {
            this._width = 1100;
            this._height = 800;
            this._padding = 10;
            this._offset = 35;
            this._margins = {right: 50,bottom: 50,left: 70,top: 100};
            this._scaleX = d3.scaleBand().range([0, this.quadrantWidth()]).paddingInner(1).align(0);
            this._scaleY = d3.scaleLinear().range([this.quadrantHeight(), 0]);
            this._color = d3.scaleOrdinal(d3.schemeCategory10);
            this._dataX = [];
            this._series = [];
            this._svg = null;
            this._body = null;
            this._tooltip = null;
            this._transLine = null;
            this._activeR = 5;
            this._ticks = 5;
        }
        render() {
            if(!this._tooltip) {
                this._tooltip = d3.select('body')
                .append('div')
                .style('left', '40px')
                .style('top', '30px')
                .attr('class', 'tooltip')
                .html('');
            }
            if(!this._svg) {
                this._svg = d3.select('body')
                    .append('svg')
                    .attr('width', this._width)
                    .attr('height', this._height)
                    .style('background', '#f3f3f3')
                this.renderAxes();
                this.renderClipPath();
            }
            this.renderBody();
        }
        renderAxes() {
            let axes = this._svg.append('g')
                .attr('class', 'axes');
    
            this.renderXAxis(axes);
            this.renderYAxis(axes);
        }
        renderXAxis(axes) {
            let xAxis = d3.axisBottom().scale(this._scaleX).ticks(this._dataX.length);
            axes.append('g')
                .attr('class', 'x axis')
                .attr('transform', `translate(${this.xStart()}, ${this.yStart()})`)
                .call(xAxis)
    
            d3.selectAll('g.x .tick text')
                .data(this._dataX)
                .enter()
        }
        renderYAxis(axes) {
            let yAxis = d3.axisLeft().scale(this._scaleY).ticks(this._ticks);
            axes.append('g')
                .attr('class', 'y axis')
                .attr('transform', `translate(${this.xStart()}, ${this.yEnd()})`)
                .call(yAxis)
    
            d3.selectAll('.y .tick')
                .append('line')
                .attr('class', 'grid-line')
                .attr('x1', 0)
                .attr('y1', 0)
                .attr('x2', this.quadrantWidth())
                .attr('y2', 0)
        }
        renderClipPath() {
            this._svg.append('defs')
                .append('clipPath')
                .attr('id', 'body-clip')
                .append('rect')
                .attr('x', 0 - this._activeR - 1)
                .attr('y', 0)
                .attr('width', this.quadrantWidth() + (this._activeR + 1) * 2)
                .attr('height', this.quadrantHeight())
        }
        renderBody() {
            if(!this._body) {
                this._body = this._svg.append('g')
                    .attr('class', 'body')
                    .attr('transform', `translate(${this._margins.left},${this._margins.top})`)
                    .attr('clip-path', 'url(#body-clip)')
                this.renderTransLine()
            }
            this.renderLines();
            this.renderDots();
            this.listenMousemove();
        }
        renderTransLine() {
            this._transLine = this._body.append('line')
                .attr('class', 'trans-line')
                .attr('x1', 0)
                .attr('y1', 0)
                .attr('x2', 0)
                .attr('y2', this._scaleY(0))
                .attr('stroke-opacity', 0)
        }
        renderLines() {
            let line = d3.line()
                .x((d,i) => this._scaleX(this._dataX[i]))
                .y(d => this._scaleY(d))
    
            let lineElements = this._body
                .selectAll('path.line')
                .data(this._series);
    
            let lineEnter =  lineElements
                .enter()
                .append('path')
                .attr('class', 'line')
                .attr('d', d => line(d.data.map(v => 0)))
                .attr('stroke', (d,i) => this._color(i))
    
            let lineUpdate = lineEnter
                .merge(lineElements)
                .transition()
                .duration(100)
                .ease(d3.easeCubicOut)
                .attr('d', d => line(d.data))
    
            let lineExit = lineElements
                .exit()
                .transition()
                .attr('d', d => line(d.data))
                .remove();
        }
        renderDots() {
            this._series.forEach((d,i) => {
                let dotElements = this._body
                .selectAll('circle._' + i)
                .data(d.data);
    
                let dotEnter =  dotElements
                .enter()
                .append('circle')
                .attr('class', (v, index) => 'dot _' + i + ' index_' + index)
                .attr('cx', (d,i) => this._scaleX(this._dataX[i]))
                .attr('cy', d => this._scaleY(d))
                .attr('r', 1e-6)
                .attr('stroke', (d,i) => this._color(i))
    
                let dotUpdate = dotEnter
                .merge(dotElements)
                .transition()
                .duration(100)
                .ease(d3.easeCubicOut)
                .attr('cx', (d,i) => this._scaleX(this._dataX[i]))
                .attr('cy', d => this._scaleY(d))
                .attr('r', 2)
    
                let dotExit = dotElements
                .exit()
                .transition()
                .attr('r', 0)
                .remove();
            })
            this._dataX.forEach((d,i) => {
                d3.selectAll('circle._' + i)
                    .attr('stroke', this._color(i))
            })
        }
        listenMousemove() {
            this._svg.on('mousemove', () => {
                let px = d3.event.offsetX;
                let py = d3.event.offsetY;
                if(px < this.xEnd() && px > this.xStart() && py < this.yStart() && py > this.yEnd()) {
                    this.renderTransLineAndTooltip(px, py, px - this.xStart());
                } else {
                    this.hideTransLineAndTooltip();
                }
            })
        }
        renderTransLineAndTooltip(x, y, bodyX) {
            //鼠标悬浮的index
            let cutIndex = Math.floor((bodyX + this.everyWidth() / 2) / this.everyWidth());
            //提示线位置
            this._transLine.transition().duration(50).ease(d3.easeLinear).attr('x1', cutIndex * this.everyWidth()).attr('x2', cutIndex * this.everyWidth()).attr('stroke-opacity', 1);
            // dot圆圈动画
            d3.selectAll('circle.dot').transition().duration(100).ease(d3.easeCubicOut).attr('r', 2)
            d3.selectAll('circle.index_' + cutIndex).transition().duration(100).ease(d3.easeBounceOut).attr('r', this._activeR)
            //提示框位置和内容
            if(x > this.quadrantWidth() - this._tooltip.style('width').slice(0,-2) - this._padding * 2) {
                x = x - this._tooltip.style('width').slice(0,-2) - this._padding * 2 - this._offset * 2;
            }
            if(y > this.quadrantHeight() - this._tooltip.style('height').slice(0,-2) - this._padding * 2) {
                y = y - this._tooltip.style('height').slice(0,-2) - this._padding * 2 - this._offset * 2;
            }
            let str = `<div style="text-align: center">${this._dataX[cutIndex]}</div>`;
            this._series.forEach((d, i) => {
                str = str + `<div style="width: 15px;height: 15px;vertical-align: middle;margin-right: 5px;border-radius: 50%;display: inline-block;background: ${this._color(i)};"></div>${d.name}<span style="display: inline-block;margin-left: 20px">${d['data'][cutIndex]}</span><br/>`
            })
            this._tooltip.html(str).transition().duration(100).ease(d3.easeLinear).style('display', 'inline-block').style('opacity', .6).style('left', `${x + this._offset + this._padding}px`).style('top', `${y + this._offset + this._padding}px`);
        }
        hideTransLineAndTooltip() {
            this._transLine.transition().duration(50).ease(d3.easeLinear).attr('stroke-opacity', 0);
            d3.selectAll('circle.dot').transition().duration(100).ease(d3.easeCubicOut).attr('r', 2);
            this._tooltip.transition().duration(100).style('opacity', 0).on('end', function () {d3.select(this).style('display', 'none')});
        }
        everyWidth() {
            return this.quadrantWidth() / (this._dataX.length - 1);
        }
        quadrantWidth() {
            return this._width - this._margins.left - this._margins.right;
        }
        quadrantHeight() {
            return this._height - this._margins.top - this._margins.bottom;
        }
        xStart() {
            return this._margins.left;
        }
        xEnd() {
            return this._width - this._margins.right;
        }
        yStart() {
            return this._height - this._margins.bottom;
        }
        yEnd() {
            return this._margins.top;
        }
        scaleX(a) {
            this._scaleX = this._scaleX.domain(a);
        }
        scaleY(a) {
            this._scaleY = this._scaleY.domain(a)
        }
        selectMaxYNumber(arr) {
            let temp = [];
            arr.forEach(item => temp.push(...item.data));
            let max = d3.max(temp);
            let base = Math.pow(10, Math.floor(max / 4).toString().length - 1);
            //获取Y轴最大值
            return Math.floor(max / 4 / base) * 5 * base;
        }
        dataX(data) {
            if(!arguments.length) return this._dataX;
            this._dataX = data;
            this.scaleX(this._dataX);
            return this;
        }
        series(series) {
            if(!arguments.length) return this._series;
            this._series = series;
            let maxY = this.selectMaxYNumber(this._series);
            this.scaleY([0, maxY])
            return this;
        }
    }

     

    2 css 文件

    .domain {
      stroke-width: 2;
      fill: none;
      stroke: #888;
      shape-rendering: crispEdges;
    }
    .tick text {
      font-size: 14px;
    }
    .grid-line {
      fill: none;
      stroke: #888;
      opacity: .4;
      shape-rendering: crispEdges;
    }
    .trans-line {
      fill: none;
      stroke: #666;
      opacity: .4;
    }
    .line {
      fill: none;
      stroke-width: 2;
    }
    .dot {
      fill: #fff;
    }
    .tooltip{
      font-size: 15px;
      width: auto;
      padding: 10px;
      height: auto;
      position: absolute;
      background-color: #000000;
      opacity: .6;
      border-radius:5px;
      color: #ffffff;
      display: none;
    }

    3 HTML 文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>$Title$</title>
        <link rel="stylesheet" type="text/css" href="css/base.css"/>
        <script type="text/javascript" src="js/d3.v4.js"></script>
        <script type="text/javascript" src="js/line.js"></script>
    </head>
    <body>
    <script>
        var dataX = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
        var series = [{name: '邮件营销', data:[120, 132, 101, 134, 90, 230, 210]},
                                    {name: '联盟广告', data:[340, 314, 292, 368, 380, 560, 520]},
                                    {name: '视频广告', data:[490, 546, 493, 522, 570, 890, 930]},
                                    {name: '直接访问', data:[810, 878, 794, 856, 960, 1220, 1250]},
                                    {name: '搜索引擎', data:[1640, 1864, 1802, 1868, 2580, 2660, 2640]}]
        var line = new Line();
        line
            .dataX(dataX)
            .series(series)
            .render()
        setInterval(() => {
            series = series.map((d,i) => {
                return {
                    name: d.name,
                    data: new Array(7).fill(1).map((dd, ii) => {
                        return Math.floor(Math.random() * 200) + i * 200
                    })
                }
            })
            console.log(series);
            line
            .dataX(dataX)
            .series(series)
            .render()
        }, 4000)
    </script>
    </body>
    </html>

     

    想预览和下载demo的朋友可以移步原文

    原文地址 http://www.bettersmile.cn

    转载于:https://www.cnblogs.com/vadim-web/p/11463072.html

    展开全文
  • FusionCharts Suite XT是全面的跨平台、跨浏览器JavaScript图表套包,其中包括FusionCharts XT、PowerCharts XT...它是你值得信赖的JavaScript图表解决方案,目前在全球有45万用户选择Fusioncharts来制作专业的JavaScri
  • matplotlib教程https://blog.csdn.net/Notzuonotdied/article/details/77876080http://study.163.com/course/introduction.htm?courseId=1003240004matplotlib画廊:https://matplotlib.org/(查看使用matplotlib可...
  • JavaScript代码 : var barChart = { title: { text: '折柱混合' }, dataZoom: { type:'inside',//slider //orient:'horizontal'//vertical }, ...
  • ECharts是一个纯 Javascript 的图表库,提供了常规的折线图、柱状图、散点图、饼图、k线图等十分炫酷的图表,最主要的要文档还是中文的,制作者为baidu. 官方文档和五分钟上手教程: ... 不过美中不足的是...
  • matplotlib教程https://blog.csdn.net/Notzuonotdied/article/details/77876080 http://study.163.com/course/introduction.htm?courseId=1003240004 matplotlib画廊:https://matplotlib.org/(查看使用...
  • 最近两周一直在用水晶报表做图表,像柱状图、折线图、甘特图、饼图等,原以为采用推模式用存储过程把数据推给图表就行了。但在实际操作过程中遇到了不少的细节问题。 1)图例标签文本 如图所示,默认情况...
  • github上有些简单教程,而且它提供有案例可以研究。相信简单制作一个表格对于各位不在话下。现在记录讲解一下一些常用的参数,方便查找,使用 0,所有的图表都要在canvas下,你可以选择在canvas下新建panel移除...
  • 画布基本教程 画布基础知识和绘制 Canvas MDN 唠唠叨叨 canvas 是 HTML5 新增的元素,可用于通过使用JavaScript中的脚本来绘制图形。例如,它可以用于绘制图形,制作照片,创建动画,甚至可以进行实时视频处理或...
  • 本套教程采用vs2012+sql2012开发,以销售明细表为例,讲解了常见报表的开发过程,既包含了传统的表格形式的报表、又包含了柱状图(条形图)、饼状图、环形图、南丁格尔图、曲线图、折线图、面积图等,前端使用ajax...
  • 教程向读者介绍快逸报表4.0中关于统计图表制作方法,包括饼图、柱形图、折线图、甘特图等等。
  • 原文:http://coolketang.com/staticOffice/5a97f34eac502e0032eb0778.html1. 本节课将为您演示迷你图的使用。... 点击面板中的[折线图]按钮,打开创建迷你图窗口。 4. 在弹出的创建迷你图窗口中...
  • Prism 8 有8种数据类型,Prism数据表的格式决定可制作的图表种类和可执行的分析类型。选择一个数据表格式可以使Prism创建合适数据的数据表,然后创建...下面用一个实际例来演示如何绘制折线图。 1、打开Graphpad ...
  • 300分钟学会matplotlib可视化, 做出狂拽酷炫的可视化效果 : 1. 了解什么是matplotlib及其...7. 掌握matplotlib制作折线图动画 8. 掌握matplotlib绘制世界地图 课程亮点: 1,课程由浅到深,由原理到实践,...
  • (Focusky动画演示大师也称为“FS软件”)图表是演示文档里...下面是3个美化图表(柱状图,折线图,饼图,散点图,扇形图,表格等)的技巧: 1.化繁为简。去掉图表中不必要的元素,如多余的图例,坐标,刻度线,边...
  • 图表有7种展示,分别为“柱状图”、“散点图”、“饼图”、“折线图”、“面积图”、“堆叠图”以及“表格”。 1、首先在快捷工具栏里点击“图表”按钮,然后选择“表格”并拖至画布中(不能直接点击缩略图进行添加...
  • Focusky(也称为“FS软件”)提供9种图表形式: 柱状图, 散点图, 饼图, 折线图, 面积图, 堆叠图, 雷达图, 混合图, 南丁格尔玫瑰图 和表格。 每种图表的表格都可以进行行列转换。 具体操作步骤如下: 1) ...
  • 4.折线图 5.直方图 6.帕累托详解 7.树状图 8.凹凸图 9.标靶图 10.饼图+环图+双饼图 11.甘特图 12.盒须图 13.火柴图 14.基本地图+地图柱图+地图饼图 15.雷达图详解 16.漏斗图 17.玫瑰图详解 18.瀑布图 19.倾斜图 20....
  • C#中GDI图形图像编程

    2010-07-23 17:34:42
    C#+统计图-柱形图+饼形图+折线图,使用ZedGraph制作动态更新的统计图,图表基本教程篇,以及GDI画图的相关资料

空空如也

空空如也

1 2 3 4
收藏数 64
精华内容 25
关键字:

折线图制作教程