精华内容
参与话题
问答
  • NULL 博文链接:https://sunshine-java.iteye.com/blog/325794
  • ChartControl双Y轴显示

    2017-02-23 11:30:59
    ChartControl双Y轴显示实例源码
  • 利用MPandroidChart实现双Y轴图表的绘制,并尝试解决双Y轴显示时两侧刻度比例尺不一致的问题。

    序言

    由于项目需要利用android实现图表的可视化,通过了解学习,决定用MPandroidChart来实现,MPandChart是android里含有的一个多功能绘图工具,可以绘制线状图、点状图、饼状图、k线图等,而且还可以绘制组合图形。此次就以LineChart为例,简单介绍MPandroidCha的使用流程。

    1、添加依赖
    

    打开androidstudio后,在项目一栏中点击app包,再打开build.gradle,在依赖(dependencies)下添加以下代码

              implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
    
    2、设定布局,并在Activity中拿到这个布局
    

    新建名为Char的Activity,在其布局文件中添加以下代码:

    		<com.example.praticeactivity.MyLineChart
    		        android:id="@+id/chart"
    		        android:layout_width="match_parent"
    		        android:layout_height="250dp"
    		        />
    
    		mLineChart=findViewById(R.id.chart);
    
    3、编写绘图函数
    
    		public  void showChart(Context context, final MyLineChart mLineChart, List<String> xDataList,
    		                           List<Entry> yDataList,List<Entry> yDataList1){
    		        mLineChart.setDrawBorders(true);
    		        //设置标题
    		       mLineChart.getDescription().setText(title);
    		        //设置标题字体大小
    		        mLineChart.getDescription().setTextSize(16f);
    		        // 标题字体颜色
    		        mLineChart.getDescription().setTextColor(context.getApplicationContext().getResources()
    		                .getColor(R.color.txt_black_light));
    		        //显示圆圈
    		        dataSet.setDrawCircles(true);//散点以圆圈形式显示
    		        dataSet.setColor(Color.parseColor("#7d7d7d"));//线条颜色
    		        dataSet.setCircleColor(Color.parseColor("#7d7d7d"));//圆点颜色
    		        dataSet.setLineWidth(1f);//线条宽度
    		        mLineChart.setScaleEnabled(false);
    		        //mLineChart.getLineData().getDataSets().get(0).setVisible(true);
    		        //设置右边y轴
    		        YAxis rightAxis = mLineChart.getAxisRight();
    		        rightAxis.setTextColor(Color.RED);//设置颜色
    		        rightAxis.setAxisMaximum(10);//设置最大值
    		        rightAxis.setAxisMinimum(-20);//设置最小值
    		        rightAxis.setDrawGridLines(true);//是否绘制网格
    		        rightAxis.setDrawZeroLine(true);//是否绘制0刻度线
    		        rightAxis.setGranularityEnabled(true);//等间距
    		        //设置左边y轴
    		        YAxis leftAxis = mLineChart.getAxisLeft();
    		        leftAxis.setTextColor(ColorTemplate.getHoloBlue());
    		        leftAxis.setDrawGridLines(true);
    		        leftAxis.setGranularityEnabled(true);
    		        leftAxis.setEnabled(true);
    		        leftAxis.setAxisMaximum(10);
    		        leftAxis.setAxisMinimum(-20);
    		        //设置x轴
    		        XAxis xAxis = mLineChart.getXAxis();
    		        xAxis.setSpaceMax(50);
    		        xAxis.setTextColor(Color.parseColor("#333333"));
    		        xAxis.setTextSize(11f);
    		        xAxis.setAxisMinimum(0f);
    		        xAxis.setLabelRotationAngle(-60);//x轴标签倾斜
    		        xAxis.setDrawAxisLine(true);//是否绘制轴线
    		        xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线
    		        xAxis.setDrawLabels(true);//绘制标签  指x轴上的对应数值
    		        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴的显示位置
    		        xAxis.setGranularity(1f);//间隔为1
    		        //透明化图例
    		        Legend legend = mLineChart.getLegend();
    		        legend.setForm(Legend.LegendForm.CIRCLE);
    		        legend.setFormSize(8f);
    		        legend.setTextColor(context.getApplicationContext().getResources().getColor(R.color.bg_blue));
    		        legend.setTextSize(12f);
    		        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
    		        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
    		        legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
    		        legend.setDrawInside(false);
    		        // 图例字体
    		        // mLegend.setTypeface(mTf);
    		        // 图例的显示和隐藏
    		        legend.setEnabled(true);
    		        //屏幕左右平移
    		        float scaleX = mLineChart.getScaleX();
    		        if (scaleX == 1)
    		            mLineChart.zoomToCenter(5, 1f);
    		        else {
    		            BarLineChartTouchListener barLineChartTouchListener = (BarLineChartTouchListener) mLineChart.getOnTouchListener();
    		            barLineChartTouchListener.stopDeceleration();
    		            mLineChart.fitScreen();
    		        }
    		        //动画添加
    		        mLineChart.animateX(2500);//图像缓冲时间
    		        // 设置是否启动触摸响应
    		        mLineChart.setTouchEnabled(true);
    		        // 是否可以拖拽
    		        mLineChart.setDragEnabled(true);
    		        // 是否可以缩放
    		        mLineChart.setScaleEnabled(true);
    		        mLineChart.invalidate();
    		     
    		        //隐藏x轴描述
    		        Description description = new Description();
    		        description.setEnabled(false);
    		        mLineChart.setDescription(description);
    		        
    		        //3.chart设置数据
    		        LineDataSet set1, set2;//数据类型
    		        if (mLineChart.getData() != null &&
    		                mLineChart.getData().getDataSetCount() > 0) {
    		            set1 = (LineDataSet) mLineChart.getData().getDataSetByIndex(0);
    		            set2 = (LineDataSet) mLineChart.getData().getDataSetByIndex(1);
    		            set1.setValues(yDataList);//坐标轴赋值
    		            set2.setValues(yDataList1);
    		            mLineChart.getData().notifyDataChanged();
    		            mLineChart.notifyDataSetChanged();
    		        } else {
    		            // 创建一个数据集,并给它一个类型
    		            set1 = new LineDataSet(yDataList, "原始数据");
    		
    		            set1.setAxisDependency(YAxis.AxisDependency.LEFT);
    		            //set1.isDrawValuesEnabled();
    		            set1.setDrawValues(false);//是否显示数据
    		            set1.setColor(Color.BLACK);//曲线颜色
    		            set1.setCircleColor(Color.WHITE);
    		            set1.setLineWidth(2f);//线宽
    		            set1.setCircleRadius(1f);
    		           // set1.setFillAlpha(65);
    		            //set1.setFillColor(ColorTemplate.getHoloBlue());
    		            set1.setHighLightColor(Color.rgb(244, 117, 117));
    		            set1.setDrawCircleHole(true);
    		
    		            //创建一个数据集,并给它一个类型
    		            set2 = new LineDataSet(yDataList1, "拟合数据");
    		            //set2.isDrawValuesEnabled();
    		            set2.setDrawValues(false);
    		            set2.setAxisDependency(YAxis.AxisDependency.RIGHT);
    		            set2.setColor(Color.RED);
    		            set2.setCircleColor(Color.BLACK);
    		            set2.setLineWidth(2f);
    		            set2.setCircleRadius(1f);
    		            //set2.setFillAlpha(65);
    		            //set2.setFillColor(Color.RED);
    		            set2.setDrawCircleHole(true);
    		            set2.setHighLightColor(Color.rgb(244, 117, 117));
    		
    		            // 创建一个数据集的数据对象
    		            LineData data = new LineData(set1, set2);
    		            data.setValueTextColor(Color.WHITE);
    		            data.setValueTextSize(9f);
    		
    		            //设置数据
    		            mLineChart.setData(data);
    		        }
    		        //是否绘制线条上的文字
    		        mLineChart.invalidate(); // refresh
    		    }
    
    4、函数调用
    
    	        XAxis xAxis = mLineChart.getXAxis();//拿到X轴
    	        for (int i = 0; i < 1000; i++) {
    	            xDataList.add(String.valueOf(i + 1).concat("天"));
    	        }
    	        xAxis.setValueFormatter(new IndexAxisValueFormatter(xDataList));//X轴赋值
    	        for (int i = 0; i < 1000; i++)
    	            yDataList.add(new Entry(i, new Random().nextFloat()*10*(float) Math.pow(-1,i)));//左侧Y轴赋值
    	        for (int i = 0; i < 1000; i++)
    	            yDataList1.add(new Entry(i, new Random().nextFloat()*10));//右侧Y轴赋值
    	        showChart(this,mLineChart,xDataList,yDataList,yDataList1);//调用函数绘图
    
    5、实现结果
    

    实现结果

    总结

    以上内容就是MPandroidChart的简单使用,MPandroidChart使用比较灵活,可以多尝试不同的实现效果,若想实现多轴(三个及三个以上)显示,只需改一下绘图函数,多设置几个LineDataSet即可。在敲代码过程中还是发现了很多问题,在解决双轴问题时,出现了左右两个Y轴刻度比例不一致的问题,也就是说左侧的1对应右侧的1.2类似这样的问题。针对这个问题,我也尝试了很多方法,大多说是和数据本身有关,但由于数据格式固定,又要解决以上这个问题,我就让其在同一侧显示,即把上面的右侧Y轴改成左侧显示,并不影响数据而且能够达到目的。但针对双轴显示刻度比例尺不一致的这个问题,我仍没有很好的解决方法。

    展开全文
  • 原文博客:https://www.cnblogs.com/fmixue/p/9123103.html 效果图 直接上代码: index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" />.../title>...

    原文博客:https://www.cnblogs.com/fmixue/p/9123103.html

    效果图

    直接上代码:

    index.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>ECharts</title>
        <script src="https://cdn.bootcss.com/echarts/3.7.1/echarts.min.js"></script>
    </head>
    <body>
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
    
        // 指定图表的配置项和数据
        var option = {
            title: {
                text: 'Topic'
    // 副标题 ,subtext: '随机数'
            },
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: ['内存使用情况', '当前数量']
            },
            toolbox: {
                show: true,
                feature: {
                    dataView: {
                        readOnly: false
                    },
                    restore: {},
                    saveAsImage: {}
                }
            },
            dataZoom: {
                show: false,
                start: 0,
                end: 100
            },
            xAxis: [{
                type: 'category',
                boundaryGap: true,
                data: (function() {
                    var now = new Date();
                    var res = [];
                    var len = 10;
                    while (len--) {
                        res.unshift(now.toLocaleTimeString().replace(/^\D*/, ''));
                        now = new Date(now - 2000);
                    }
                    return res;
                })()
            }],
            yAxis: [{
                type: 'value',
                scale: true,
                name: '内存使用情况',
                max: 20,
                min: 0,
                boundaryGap: [0.2, 0.2]
            }, {
                type: 'value',
                scale: true,
                name: '当前数量1',
                max: 1200,
                min: 0,
                boundaryGap: [0.2, 0.2]
            }],
            series: [{
                name: '当前数量',
                type: 'bar',
                xAxisIndex: 0,
                yAxisIndex: 1,
                itemStyle: {normal: {
                        color:'#CCCCCC',
                        lineStyle:{color:'#CCCCCC'}
                    }},
                data: (function() {
                    var res = [];
                    var len = 10;
                    while (len--) {
                        res.push(null);
                    }
                    return res;
                })()
            }, {
                name: '内存使用情况',
                type: 'line',
                smooth:true,
    // itemStyle成为面积图的关键。
                itemStyle: {normal: {
                        color:'#0099ff',
                        areaStyle: {type: 'default'},
                        lineStyle:{color:'#0099ff'}
                    }},
                areaStyle: {// 实现蓝白渐变色
                    normal: {
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                            offset: 0,
                            color: 'rgb(0, 153, 255)'
                        }, {
                            offset: 1,
                            color: 'rgb(255,255,255)'
                        }])
                    }
                },
                data: (function() {
                    var res = [];
                    var len = 0;
                    while (len < 10) {
                        res.push(null);
                        len++;
                    }
                    return res;
                })()
            }]
        };
        setInterval(function() {
            axisData = (new Date()).toLocaleTimeString().replace(/^\D*/, '');
    
            var data0 = option.series[0].data;
            var data1 = option.series[1].data;
            data0.shift();
            data0.push(Math.round(Math.random() * 1000));
            data1.shift();
            data1.push((Math.random() * 10 + 5).toFixed(1) - 0);
    
            option.xAxis[0].data.shift();
            option.xAxis[0].data.push(axisData);
    
            myChart.setOption(option);
        }, 2100);
    </script>
    </body>
    </html>

     

    展开全文
  • 微信小程序--echarts实现双y轴

    千次阅读 2019-04-04 15:00:16
    const App = getApp(); import * as echarts from '../../ec-canvas/echarts'; //引入echarts.js var barec = null Page({ onShareAppMessage: function (res) { return { title: 'ECharts 可以在微信小程序中...
    const App = getApp();
    import * as echarts from '../../ec-canvas/echarts'; //引入echarts.js
    var barec = null
    
    Page({
      onShareAppMessage: function (res) {
        return {
          title: 'ECharts 可以在微信小程序中使用啦!',
          path: '/pages/index/index',
          success: function () { },
          fail: function () { }
        }
      },
      data: {
        ec: {
          onInit: function (canvas, width, height) {
            barec = echarts.init(canvas, null, {
              width: width,
              height: height
            });
    
            canvas.setChart(barec);
            return barec;
          }
        },
      },
    
      onReady() {
      },
    
      onLoad: function (options) {
        this.setData({
          navH: App.globalData.navHeight
        })
      },
      
      onShareAppMessage: function () {
    
      },
      bindViewTab: function () {
        wx.navigateBack({     //返回上一页面或多级页面
          delta: 1
        })
      },
    
    
      onReady() {
        setTimeout(this.getData, 500);
      },
      //getData方法里发送ajax
      getData() {
        wx.showLoading({
          title: '加载中...',
        })
       
    
        wx.request({
          url: 'http://health.ia.ac.cn:5007/checklistBicycleData/getChecklistBicycleDataByListId?listId=13985',
          header: {
            "content-type": "json"
          },
          success: function (res) {
            console.log(res);
            // var data = res.data.info;
            // console.log(data);
            barec.setOption({
              color: [
                '#901818', '#F018FF', '#8A2BE2', '#181818'
              ],
              legend: {
                y: 'top',
                data: ['HR,bpm', 'SAP,mmHg', 'DAP,mmHg', 'RPP,1/1000'],
                textStyle: {
                  color: 'black',
                  fontSize: 16
                }
              },
    
              xAxis: [
                {
    
                  // 'name': 'VO2\n(L/min)',
                  type: 'value',
                  scale: true,
                  // axisLabel: {
                  //   formatter: '{value} m'
                  // },
                  nameTextStyle: {
                    // color: '#fff',
                    fontSize: 14
                  },
                  splitLine: {
                    show: false
                  }
                }
              ],
              yAxis: [
                {
                  type: 'value',
                  scale: true,
                  min: 0,
                  max: 150,
                  interval: 30,
                 
                  nameTextStyle: {
                    // color: '#fff',
                    fontSize: 14
                  },
                  splitLine: {
                    show: false
                  }
                },
                {
                  type: 'value',
                  scale: true,
                  min:0,
                  max:18,
                  interval:3,
    
                  nameTextStyle: {
                    fontSize: 14
                  },
                  splitLine: {
                    show: false
                  }
                }
              ],
              series: [
                {
                  name: 'HR,bpm',
                  symbolSize: 25,
                  color: '#901818',
                  data: res.data.data.item2[0],
                  type: 'scatter',
                },
                {
                  name: 'SAP,mmHg',
                  symbolSize: 25,
                  color: '#F018FF',
                  data: res.data.data.item2[1],
                  type: 'scatter',
                },
               
                {
                  name: 'DAP,mmHg',
                  symbolSize: 25,
                  color: '#8A2BE2',
                  data: res.data.data.item2[2],
                  type: 'scatter',
                },
                {
                  name: 'RPP,1/1000',
                  symbolSize: 25,
                  color: '#181818',
                  yAxisIndex: 1,
                  data: res.data.data.item2[3],
                  type: 'scatter',
                }
              ],
    
            })
            wx.hideLoading();
          },
          fail: function (res) { },
          complete: function (res) { },
        })
    
      }
    
    });
    
    
    
    

    起关键作用的是 yAxisIndex: 1,

    展开全文
  • 双Y轴图形的绘制

    2019-03-24 13:39:27
    双Y轴图形的绘制 x=0:900; y1=2*x; y2=cos(0.005*x); [haxes,hline1,hline2]=plotyy(x,y1,x,y2,'semilogy','plot');%调用PLOTYY函数 axes(haxes(1)) ylabel('semilog plot'); axes(haxes(2)) ylabel('lenear...

    双Y轴图形的绘制

    x=0:900;
    y1=2*x;
    y2=cos(0.005*x);
    [haxes,hline1,hline2]=plotyy(x,y1,x,y2,'semilogy','plot');%调用PLOTYY函数
    axes(haxes(1))
    ylabel('semilog plot');
    axes(haxes(2))
    ylabel('linear plot');
    

    在这里插入图片描述

    展开全文
  • pyecharts双坐标轴,双y轴

    千次阅读 2019-05-28 16:04:13
    比如说,两个图合并, 一个是柱状图,一个是折线图。 # 用overlap 建立一个叠加试图 overlap = Overlap() ...# 将折线图放进去,并使用新的y坐标 overlap.add(line, yaxis_index=1, is_add_yaxis=True) ...
  • 在使用echarts中,我们经常会用到双y轴去展示数据,有时候,我们可能需要自己去设置,具体使用某一个y轴去展示某一个具体的数据。 如图所示:我们的y轴有两个,数据共有3个,这个图有两个不好的点:1.没有标明左右...
  • echarts实现双y轴

    万次阅读 2017-09-04 17:40:34
    我们在一个折线图中展示多个数据的时候,如果两个数据的数量级相差很大,会造成数量级低的数据折线图被压缩成一条很直的线,如下图:解决办法是使用双y轴: $scope.echart21 = { legend: { show: 'true', data: ...
  • origin做双Y轴折线图的具体步骤

    万次阅读 2018-06-05 22:14:25
    1.导入数据: file--&gt;Open excel 选择自己的数据集2....设置y轴的数据集也一样。如图所示;点击plot 便画出了单Y轴的折线图,如图所示:最重要的一步是添加另一个Y轴:操作步骤graph--&gt;New La...
  • echarts 双y轴设置

    万次阅读 2018-08-24 10:25:23
    要设置双y轴可以参考,echart官方文档中Yaxis的设置 http://echarts.baidu.com/echarts2/doc/doc.html#Yaxis, 废话不多说,直接上代码 yAxis : [{ type: 'value', min: 0, max: 5, interval: 1, ...
  • 最近因为项目需要,用到了Echarts,自己学习了相关东西,也参考了一些文件,最终把双y轴曲线图实现了,跟大家分享一下。下面是最终需要的效果图: 不多说了,直接上代码!O(∩_∩)O哈哈~ ----------------------...
  • 主要介绍了实现ECharts双Y轴左右刻度线一致的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 实现ECharts双Y轴左右刻度线一致

    万次阅读 2018-08-27 11:58:37
    这是未解决的,双Y轴左右刻度线不一致  这是已解决的,双Y轴左右刻度线一致    1、原因 刻度在显示时,分割段数不一样,导致左右的刻度线不一致,不能重合在一起。 2、思路 根据上面的原因去分析,要想...
  • 实现echarts双y轴0刻度对齐

    千次阅读 2018-07-11 17:23:54
    //定义y轴最大值、最小值 var yAxisMax = 1; var yAxisMin = 1; //定义图表组件 var option = { tooltip: { trigger: 'axis' }, grid: { //坐标 left: '3%', right: '4%', bottom: '10%',...
  • echarts双Y轴三折线图

    2018-07-28 11:55:06
    代码: var option = { title : { text: title, subtext: subTitle }, tooltip : { trigger: 'axis' }, legend: { data:['注册量','预购','成交'] data:dataNa...
  • JS65 Echarts双Y轴刻度对齐

    千次阅读 2019-11-11 10:38:00
    实现Echarts双Y轴刻度对齐
  • 每个series 中添加属性 yAxisIndex:0 || 1 0 默认为左边 1 为右边
  • echarts双Y轴,并修改自定义tooltip

    千次阅读 2019-12-10 16:03:46
    需求:使用echarts对人员工单数量进行柱状图统计,并显示占比。 效果图: 在这里插入图片描述
  • function randomData() { now = new Date(+now + oneDay); value = value + Math.random() * 21 - 10; return { name: now.toString(), value: [ [now.getFullYear(), now.getMonth() + 1, now.getDate()]....
  • Echarts双Y轴柱状图

    2019-04-22 13:53:51
    var option = { title: { text: '一周推送及完成率', x:'center', y:'top', align:'center', text...
  • eCharts双y轴折线图

    千次阅读 2020-04-02 13:56:47
    yAxis: [ { type: 'value', axisLabel: { axisLine:{ show: true ...
  • echarts双y轴两边刻度线不一致问题

    千次阅读 2020-01-11 15:49:06
    1.需要用到的属性minmaxsplitNumberinterval 2.设置刻度分割的数目splitNumber 3.通过最大值最小值计算柱子分割的间距 interval(max-min)/splitNumber 4.部分代码及效果图 // 计算最大值 _calcMaxNumber(arr){...
  • 想要两个Y轴坐标分两侧显示,需要将第二个series的yAxisIndex设置为大于0的数,因为以0为起点&lt;!DOCTYPE html&gt;`这里写代码片` &lt;html&gt; &lt;head&gt; &lt;meta charset=&...
  • 问题:双Y轴,刻度不一样,会出现两边的Y轴线不在同一刻度上,类似下图 解决思路:求数据的最大最小值,计算出合适的刻度值,两边保持一致 1、计算最大最小值得函数 //计算最大值 function calMax(arr) { let max ...
  • 如果是两条数据,两条y轴,加上以下代码即可 option.yAxis[0].max = Math.ceil(Math.max.apply(null, option.series[0].data) / 5) * 5; option.yAxis[0].interval = Math.ceil( Math.max.apply(null, option....
  • Echarts双Y轴折线图和柱形图混合

    千次阅读 2018-08-29 17:22:51
    柱形图和折线图混合使用,并且使用双y轴坐标 具体代码如下 option ={ color: ['#009CFF', '#FF072F'], //设置多个颜色值时代表的是图例颜色 tooltip: { trigger: 'axis', axisPointer: { type: 'line', },...
  • 不一致的情况如下图: 修改成一致的情况如下图: 代码如下: yAxis : [ { type : 'value', name : '人数', //splitLine:{show:false}, ...
  • echarts双Y轴刻度不对齐以及有负数时x轴线不太底部问题 1、遇到的问题 双Y轴刻度不对齐以及x轴不在底部问题 2、解决方法 1)解决x轴线不在底部问题 在axisLine里面设置onZero属性 2)解决对齐问题 问题描述: 1、...
  • Echarts实现双y轴

    万次阅读 2018-09-11 02:33:53
    amp;locationNum=1 我们在一个折线图中展示多个数据的时候,如果两个数据的数量级相差很大,会造成数量级低的数据折线图被压缩成一条很直的线,如下图: ...解决办法是使用双y轴: $scope.echart21 = { legend...

空空如也

1 2 3 4 5 ... 20
收藏数 30,704
精华内容 12,281
关键字:

双y轴