图表

64 阅读5分钟
option = {
  xAxis: {
    type: 'value',
    min: -90,     // 强制固定x轴范围
    max: -30,
    axisLabel: {
      // 直接定义需要显示的标签数组(按需调整)
      formatter: function(value) {
        const labels = [
          -90, -85, -80, -75, -70, 
          -65, -60, -55, -50, -45, 
          -40, -35, -30
        ];
        // 精确匹配标签(允许浮点误差)
        const match = labels.find(label => Math.abs(value - label) < 0.1);
        return match !== undefined ? match : '';
      }
    },
    // 隐藏非指定标签的刻度线(可选)
    axisTick: {
      show: false // 隐藏所有刻度线,或通过更复杂的逻辑控制
    },
    splitLine: {
      show: false // 隐藏网格线(可选)
    }
  },
  yAxis: {
    type: 'value',
    min: 0,       // 根据你的需求调整
    max: 100,
    axisLabel: {
      // y轴标签配置(参考x轴逻辑)
      formatter: function(value) {
        const labels = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
        const match = labels.find(label => Math.abs(value - label) < 0.1);
        return match !== undefined ? match : '';
      }
    }
  },
  series: [{
    type: 'scatter',
    data: [[-85, 20], [-70, 50], [-60, 80]] // 示例数据
  }]
};
const data = [
  [
    [-50, 77, 17096869, 'Australia', 1990],
    [-80, 77.4, 27662440, 'Canada', 1990],
    [1516, 68, 1154605773, 'China', 1990],
    [13670, 74.7, 10582082, 'Cuba', 1990],
    [28599, 75, 4986705, 'Finland', 1990],
    [29476, 77.1, 56943299, 'France', 1990],
    [31476, 75.4, 78958237, 'Germany', 1990],
    [28666, 78.1, 254830, 'Iceland', 1990],
    [1777, 57.7, 870601776, 'India', 1990],
    [29550, 79.1, 122249285, 'Japan', 1990],
    [2076, 67.9, 20194354, 'North Korea', 1990],
    [12087, 72, 42972254, 'South Korea', 1990],
    [24021, 75.4, 3397534, 'New Zealand', 1990],
    [43296, 76.8, 4240375, 'Norway', 1990],
    [10088, 70.8, 38195258, 'Poland', 1990],
    [19349, 69.6, 147568552, 'Russia', 1990],
    [10670, 67.3, 53994605, 'Turkey', 1990],
    [26424, 75.7, 57110117, 'United Kingdom', 1990],
    [37062, 75.4, 252847810, 'United States', 1990]
  ],
  [
    [44056, 81.8, 23968973, 'Australia', 2015],
    [43294, 81.7, 35939927, 'Canada', 2015],
    [13334, 76.9, 1376048943, 'China', 2015],
    [21291, 78.5, 11389562, 'Cuba', 2015],
    [38923, 80.8, 5503457, 'Finland', 2015],
    [37599, 81.9, 64395345, 'France', 2015],
    [44053, 81.1, 80688545, 'Germany', 2015],
    [42182, 82.8, 329425, 'Iceland', 2015],
    [5903, 66.8, 1311050527, 'India', 2015],
    [36162, 83.5, 126573481, 'Japan', 2015],
    [1390, 71.4, 25155317, 'North Korea', 2015],
    [34644, 80.7, 50293439, 'South Korea', 2015],
    [34186, 80.6, 4528526, 'New Zealand', 2015],
    [64304, 81.6, 5210967, 'Norway', 2015],
    [24787, 77.3, 38611794, 'Poland', 2015],
    [23038, 73.13, 143456918, 'Russia', 2015],
    [19360, 76.5, 78665830, 'Turkey', 2015],
    [38225, 81.4, 64715810, 'United Kingdom', 2015],
    [53354, 79.1, 321773631, 'United States', 2015]
  ]
];
option = {
  tooltip: {
    trigger: 'item', // 悬停在元素上触发
    formatter: function(params) {
      // 判断是否为 x=-80 的标记线
      if (
        params.componentType === 'markLine' && 
        params.data.value === -80
      ) {
        // 返回自定义 HTML 内容
        return '<div style="color: green; background: blue; padding: 5px;">hello js</div>';
      }
      return ''; // 其他情况不显示 Tooltip
    },
    backgroundColor: 'transparent', // 隐藏默认背景
    borderColor: 'transparent',     // 隐藏默认边框
    textStyle: {
      color: 'green' // 默认文字颜色(备用)
    }
  },
  backgroundColor: new echarts.graphic.RadialGradient(0.3, 0.3, 0.8, [
    {
      offset: 0,
      color: '#f7f8fa'
    },
    {
      offset: 1,
      color: '#cdd0d5'
    }
  ]),
  title: {
    text: 'Life Expectancy and GDP by Country',
    left: '5%',
    top: '3%'
  },
  legend: {
    right: '10%',
    top: '3%',
    data: ['1990', '2015']
  },
  grid: {
    left: '8%',
    top: '10%'
  },
  xAxis: {
    type: 'value',
    min: -90,     // 强制固定x轴范围
    max: -30,
    axisLabel: {
      // 直接定义需要显示的标签数组(按需调整)
      formatter: function(value) {
        const labels = [
          -90, -85, -80, -75, -70, 
          -65, -60, -55, -50, -45, 
          -40, -35, -30
        ];
        // 精确匹配标签(允许浮点误差)
        const match = labels.find(label => Math.abs(value - label) < 0.1);
        if (match === -80) {
          // 在 -80 前插入笑脸图标(使用 Unicode 符号示例)
          return `{smile|}${match}`;
        }
        return match !== undefined ? match : '';
      },
      // 定义富文本样式
      rich: {
        smile: {
          // 使用 Unicode 笑脸符号(或替换为 Base64 图片)
          backgroundColor: {
            image: 'https://tse1-mm.cn.bing.net/th/id/OIP-C.BwP3RDA0vyTZ7Q7G5qik3gHaGS?rs=1&pid=ImgDetMain',
          },
          width: 16,   // 图标宽度
          height: 16,  // 图标高度
          align: 'right', // 图标对齐方式
          padding: [0, 4, 0, 0] // 调整图标与文本间距
        }
      }
    },
    // 隐藏非指定标签的刻度线(可选)
    axisTick: {
      show: false // 隐藏所有刻度线,或通过更复杂的逻辑控制
    },
    splitLine: {
      show: false // 隐藏网格线(可选)
    }
  },
  yAxis: {
    splitLine: {
      lineStyle: {
        type: 'dashed'
      }
    },
    scale: true
  },
  series: [
    {
      name: '1990',
      data: data[0],
      type: 'scatter',
      symbolSize: function (data) {
        return Math.sqrt(data[2]) / 5e2;
      },
      emphasis: {
        focus: 'series',
        label: {
          show: true,
          formatter: function (param) {
            return param.data[3];
          },
          position: 'top'
        }
      },
      itemStyle: {
        shadowBlur: 10,
        shadowColor: 'rgba(120, 36, 50, 0.5)',
        shadowOffsetY: 5,
        color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [
          {
            offset: 0,
            color: 'rgb(251, 118, 123)'
          },
          {
            offset: 1,
            color: 'rgb(204, 46, 72)'
          }
        ])
      }
    },
    {
      name: '2015',
      data: data[1],
      type: 'scatter',
      symbolSize: function (data) {
        return Math.sqrt(data[2]) / 5e2;
      },
      markLine: {
      symbol: 'none',       // 不显示箭头符号
      lineStyle: {
        type: 'dashed',     // 虚线样式
        color: 'red',// 红色
        width:1
      },
      data: [{ 
        xAxis: -80,       // 在 x = -80 处绘制垂直虚线
        // 添加唯一标识(用于 Tooltip 判断)
        value: -80, // 自定义属性
        label: {
    show: false,
    // position: 'start',  // 标签位置(middle 表示居中在线上)
    // formatter: '关键线'  // 自定义文字
  }
      }],
      emphasis:{
        lineStyle:{
          color:'black',
          width:1
        },
        label:{
          formatter:function(){
            return 123
          },
          color:'pink',
          backgroundColor:'#636363',
          padding:10
        }
      }
    },
      emphasis: {
        focus: 'series',
        label: {
          show: true,
          formatter: function (param) {
            return param.data[3];
          },
          position: 'top'
        }
      },
      itemStyle: {
        shadowBlur: 10,
        shadowColor: 'rgba(25, 100, 150, 0.5)',
        shadowOffsetY: 5,
        color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [
          {
            offset: 0,
            color: 'rgb(129, 227, 238)'
          },
          {
            offset: 1,
            color: 'rgb(25, 183, 207)'
          }
        ])
      }
    }
    
  ]
};