小程序中使用echarts,案例一:实现蜘蛛网(雷达图)

echarts-for-weixin 项目提供了一个小程序组件,用这种方式可以方便地使用 ECharts。

下载

echarts-for-weixin ec-canvas
如果你想使用最新版本的echarts可以将 ec-canvas 目录下的 echarts.js 替换为最新版的 ECharts。如果希望减小包体积大小,可以使用自定义构建生成并替换 echarts.js。需要注意的是新版的 ECharts 微信小程序支持微信 Canvas 2d,当用户的基础库版本 >= 2.9.0 且没有设置 force-use-old-canvas=“true” 的情况下,使用新的 Canvas 2d(默认),使用新的 Canvas 2d 可以提升渲染性能,解决非同层渲染问题,强烈建议开启。

使用

在项目根目录下创建components文件夹,将下载的ec-canvas放在components文件夹中。

详情可参考echart官网

使用ec-canvas实现蜘蛛网案例:

在components中创建radar组件

<!--components/radar/radar.wxml-->
<view class="container">
  <ec-canvas class="ec-canvas" id="mychart-dom-radar" isUseNewCanvas="{{ true }}" canvas-id="mychart-radar" ec="{{ ec }}"></ec-canvas>
</view>
/* components/radar/radar.wxss */
.container,.ec-canvas{
  width: 100%;
  height: 100%;
}
import * as echarts from '../ec-canvas/echarts';

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    data: {
      type: Array,
      value: []
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    ec: {
      // onInit: initChart,
      lazyLoad: true, // 懒加载
    }
  },

  lifetimes: {
    attached: function() {
      // 在组件实例进入页面节点树时执行
      this.initchart(this.data.data)
    },
    detached: function() {
      // 在组件实例被从页面节点树移除时执行
    },
  },
  // 以下是旧式的定义方式,可以保持对 <2.2.3 版本基础库的兼容
  attached: function() {
    // 在组件实例进入页面节点树时执行
    this.initchart(this.data.data)
  },
  detached: function() {
    // 在组件实例被从页面节点树移除时执行
  },
  /**
   * 数据监听器
   */
  observers: {
    'data': function(val){
      this.initchart(val)
    }
  },
  /**
   * 组件的方法列表
   */
  methods: {
    loadchart(data){
      // 绑定组件(ec-canvas标签的id)
      let ec_canvas = this.selectComponent('#mychart-dom-radar');
      ec_canvas.init((canvas,width,height,dpr)=>{
        const chart = echarts.init(canvas, null, {
          width: width,
          height: height,
          devicePixelRatio: dpr // 解决模糊显示的问题
        })
        // echart表格的内容配置
        var option = {
          backgroundColor: "#ffffff",
          xAxis: {
            show: false
          },
          yAxis: {
            show: false
          },
          radar: {
            // 雷达图每个指示器名称的配置项。
            axisName: {
              color: 'rgba(102, 102, 102, 1)',
              fontSize: 12,
              fontFamily: 'PingFangSC-Regular, PingFang SC',
              fontWeight: 400,
            },
            // 指示器名称和指示器轴的距离
            nameGap: 8,
            // 指示器轴的分割段数
            splitNumber: 4,
            // 坐标轴轴线
            axisLine: {
              lineStyle: {
                color: 'rgba(234, 234, 234, 1)',
                width: 1.5
              }
            },
            splitLine: {
              lineStyle: {
                color: 'rgba(234, 234, 234, 1)',
                width: 1.5
              }
            },
            splitArea: {
              areaStyle: {
                color: ['rgba(255, 255, 255, 1)', 'rgba(255, 255, 255, 1)']
              }
            },
            // 雷达器的指示器
            indicator: [{
              name: '指示器1',
              max: 4,
            },
            {
              name: '指示器2',
              max: 4,
            },
            {
              name: '指示器3',
              max: 4,
            },
            {
              name: '指示器4',
              max: 4,
            },
            {
              name: '指示器5',
              max: 4,
            },
            {
              name: '指示器6',
              max: 4,
            }
            ]
          },
          series: [{
            type: 'radar',
            symbol: 'none',
            data: [
              {
                value: data,
                lineStyle: {
                  color: "rgba(209, 189, 128, 1)",
                  width: 2,
                },
                areaStyle: {
                  color: "rgba(209, 189, 128, 0.3)"
                }
              }
            ]
          }]
        };
        chart.setOption(option);
        return chart;
      })
    },
    initchart(data){
      // 传递后台数据到图表中,进行懒加载图表
      this.loadchart(data);
    },
  }
})
{
  "component": true,
  "usingComponents": {
    "ec-canvas": "/components/ec-canvas/ec-canvas"
  }
}

在页面中使用蜘蛛网组件

<scroll-view style="height: 500px" scroll-y>
  <view class="radar">
    <my-radar data="{{radarData}}"></my-radar>
  </view>
</scroll-view>
/* pages/zxm-radar/index.wxss */
.radar{
  width: 570rpx;
  height: 570rpx;
}
// pages/zxm-radar/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    radarData: [1, 2, 4, 3, 2, 1]
  },

})
{
  "usingComponents": {
    "my-radar": "/components/radar/radar"
  }
}

在此过程中发现当页面中有滚动时,虽然使用了2d渲染,但在模拟器中图层会在上层,手机上在同层,目前没有想到较好的方式解决,欢迎小伙伴们留言交流探讨,至此实现蜘蛛网就结束了,当然你在项目中还是需要根据实际情形来处理。
效果图

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些帮助。 JFreeChart是一个Java开发的图表库,它可以用于生成各种类型的图表,包括雷达图。下面是一个简单的示例代码,演示了如何使用JFreeChart生成带刻度的雷达图蜘蛛网图): ```java import java.awt.Color; import java.awt.Font; import java.awt.GradientPaint; import java.awt.Paint; import java.util.ArrayList; import java.util.List; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.RadarChartPlot; import org.jfree.chart.renderer.DefaultPolarItemRenderer; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.DatasetUtilities; public class RadarChartExample { public static void main(String[] args) { // 创建数据集 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(1.0, "Series 1", "Category 1"); dataset.addValue(4.0, "Series 1", "Category 2"); dataset.addValue(3.0, "Series 1", "Category 3"); dataset.addValue(5.0, "Series 1", "Category 4"); dataset.addValue(2.0, "Series 1", "Category 5"); // 创建图表 JFreeChart chart = ChartFactory.createRadarChart( "Radar Chart", // 标题 null, // x轴标签 null, // y轴标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向 true, // 是否显示图例 true, // 是否生成工具 false // 是否生成URL链接 ); // 设置背景色 chart.setBackgroundPaint(new GradientPaint(0, 0, new Color(220, 220, 220), 0, 1000, new Color(220, 220, 220))); // 设置图表区域的背景色 CategoryPlot plot = (CategoryPlot) chart.getPlot(); plot.setBackgroundPaint(new Color(255, 255, 255)); plot.setRangeGridlinePaint(Color.gray); // 设置雷达图区域的背景色 RadarChartPlot radarPlot = (RadarChartPlot) plot.getPlot(); radarPlot.setBackgroundPaint(new Color(255, 255, 255)); radarPlot.setAxisLinePaint(new Color(255, 255, 255)); // 设置字体 Font font = new Font("Dialog", Font.BOLD, 14); plot.getDomainAxis().setLabelFont(font); plot.getRangeAxis().setLabelFont(font); radarPlot.setLabelFont(font); // 设置刻度 List<Double> values = new ArrayList<>(); values.add(0.2); values.add(0.4); values.add(0.6); values.add(0.8); values.add(1.0); double[][] data = DatasetUtilities.createCategoryDataset("Series ", "", values.toArray(new Double[0])).getCategoryCount(); plot.setDataset(DatasetUtilities.createCategoryDataset("Series ", "", values.toArray(new Double[0]))); DefaultPolarItemRenderer renderer = new DefaultPolarItemRenderer(); renderer.setSeriesPaint(0, new Color(0, 0, 255, 128)); renderer.setSeriesFillPaint(0, new Color(0, 0, 255, 64)); radarPlot.setRenderer(renderer); // 显示图表 ChartFrame frame = new ChartFrame("Radar Chart", chart); frame.pack(); frame.setVisible(true); } } ``` 上面的示例代码使用了DefaultCategoryDataset类来创建数据集,它是JFreeChart提供的一个实现了CategoryDataset接口的类。在创建图表时,需要指定数据集、图表方向、是否显示图例、是否生成工具和是否生成URL链接等参数。在设置图表区域和雷达图区域的背景色、字体和刻度时,需要使用CategoryPlot和RadarChartPlot类的相关方法。最后,使用ChartFrame类将图表显示出来。 希望这能够帮助到您。如果您有任何问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值