特点

散点图可以帮助我们推断出不同维度数据之间的相关性, 比如上述例子中,看得出身高和体重是正相关, 身 高越高, 体重越重 ,散点图也经常用在地图的标注上

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script src="../js/echarts.js"></script>
  9. </head>
  10. <body>
  11. <div style="width: 600px;height:400px"></div>
  12. <script> var mCharts = echarts.init(document.querySelector("div"))
  13. var data = [{ "gender": "female", "height": 161.2, "weight": 51.6 },
  14. { "gender": "female", "height": 167.5, "weight": 59 },
  15. { "gender": "female", "height": 159.5, "weight": 49.2 },
  16. { "gender": "female", "height": 157, "weight": 63 },
  17. { "gender": "female", "height": 155.8, "weight": 53.6 },
  18. { "gender": "female", "height": 170, "weight": 59 },
  19. { "gender": "female", "height": 159.1, "weight": 47.6 },
  20. { "gender": "female", "height": 166, "weight": 69.8 },
  21. { "gender": "female", "height": 176.2, "weight": 66.8 },
  22. { "gender": "female", "height": 160.2, "weight": 75.2 },
  23. { "gender": "female", "height": 172.5, "weight": 55.2 },
  24. { "gender": "female", "height": 170.9, "weight": 54.2 },
  25. { "gender": "female", "height": 172.9, "weight": 62.5 },
  26. { "gender": "female", "height": 153.4, "weight": 42 },
  27. {
  28. "gender": "female", "height": 160, "weight": 50
  29. },
  30. { "gender": "female", "height": 147.2, "weight": 49.8 }]
  31. var axisData = []
  32. for (var i = 0; i < data.length; i++) {
  33. var height = data[i].height
  34. var weight = data[i].weight
  35. var itemArr = [height, weight]
  36. axisData.push(itemArr)
  37. }
  38. console.log(axisData);
  39. // axisData 就是一个二维数组, 数组中的每一个元素还是一个数组, 最内层数组中有两个元素, 一个
  40. // 代表身高, 一个代表体重
  41. var option = {
  42. xAxis: { type: 'value', scale: true },
  43. yAxis: { type: 'value', scale: true },
  44. series: [{
  45. type: 'scatter',
  46. data: axisData,
  47. //控制散点大小
  48. symbolSize: 25,
  49. //控制散点的颜色
  50. itemStyle: { color: 'green', }
  51. }]
  52. }
  53. mCharts.setOption(option)
  54. </script>
  55. </body>
  56. </html>

动态控制散点的大小

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script src="../js/echarts.js"></script>
  9. </head>
  10. <body>
  11. <div style="width: 600px;height:400px"></div>
  12. <script> var mCharts = echarts.init(document.querySelector("div"))
  13. var data = [{ "gender": "female", "height": 161.2, "weight": 51.6 },
  14. { "gender": "female", "height": 167.5, "weight": 59 },
  15. { "gender": "female", "height": 159.5, "weight": 49.2 },
  16. { "gender": "female", "height": 157, "weight": 63 },
  17. { "gender": "female", "height": 155.8, "weight": 53.6 },
  18. { "gender": "female", "height": 170, "weight": 59 },
  19. { "gender": "female", "height": 159.1, "weight": 47.6 },
  20. { "gender": "female", "height": 166, "weight": 69.8 },
  21. { "gender": "female", "height": 176.2, "weight": 66.8 },
  22. { "gender": "female", "height": 160.2, "weight": 75.2 },
  23. { "gender": "female", "height": 172.5, "weight": 55.2 },
  24. { "gender": "female", "height": 170.9, "weight": 54.2 },
  25. { "gender": "female", "height": 172.9, "weight": 62.5 },
  26. { "gender": "female", "height": 153.4, "weight": 42 },
  27. {
  28. "gender": "female", "height": 160, "weight": 50
  29. },
  30. { "gender": "female", "height": 147.2, "weight": 49.8 }]
  31. var axisData = []
  32. for (var i = 0; i < data.length; i++) {
  33. var height = data[i].height
  34. var weight = data[i].weight
  35. var itemArr = [height, weight]
  36. axisData.push(itemArr)
  37. }
  38. // axisData 就是一个二维数组, 数组中的每一个元素还是一个数组, 最内层数组中有两个元素, 一个
  39. // 代表身高, 一个代表体重
  40. var option = {
  41. xAxis: { type: 'value', scale: true },
  42. yAxis: { type: 'value', scale: true },
  43. series: [{
  44. type: 'scatter',
  45. data: axisData,
  46. symbolSize:(arg)=>{
  47. console.log(arg);
  48. var weight = arg[1]
  49. var height = arg[0] / 100
  50. // BMI > 28 则代表肥胖, 肥胖的人用大的散点标识, 正常的人用小散点标识 //
  51. //BMI: 体重/ 身高*身高 kg m
  52. var bmi = weight / (height * height)
  53. if (bmi > 28) { return 20 } return 5
  54. },
  55. itemStyle: {
  56. color: (arg)=> {
  57. var weight = arg.data[1]
  58. var height = arg.data[0] / 100
  59. var bmi = weight / (height * height)
  60. if (bmi > 28) { return 'red' } return 'green'
  61. }
  62. }
  63. }]
  64. }
  65. mCharts.setOption(option)
  66. </script>
  67. </body>
  68. </html>

涟漪动画效果

type:effectScatter 将 type 的值从 scatter 设置为 effectScatter 就能够产生涟漪动画的效果 rippleEffect rippleEffect 可以配置涟漪动画的大小

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script src="../js/echarts.js"></script>
  9. </head>
  10. <body>
  11. <div style="width: 600px;height:400px"></div>
  12. <script> var mCharts = echarts.init(document.querySelector("div"))
  13. var data = [{ "gender": "female", "height": 161.2, "weight": 51.6 },
  14. { "gender": "female", "height": 167.5, "weight": 59 },
  15. { "gender": "female", "height": 159.5, "weight": 49.2 },
  16. { "gender": "female", "height": 157, "weight": 63 },
  17. { "gender": "female", "height": 155.8, "weight": 53.6 },
  18. { "gender": "female", "height": 170, "weight": 59 },
  19. { "gender": "female", "height": 159.1, "weight": 47.6 },
  20. { "gender": "female", "height": 166, "weight": 69.8 },
  21. { "gender": "female", "height": 176.2, "weight": 66.8 },
  22. { "gender": "female", "height": 160.2, "weight": 75.2 },
  23. { "gender": "female", "height": 172.5, "weight": 55.2 },
  24. { "gender": "female", "height": 170.9, "weight": 54.2 },
  25. { "gender": "female", "height": 172.9, "weight": 62.5 },
  26. { "gender": "female", "height": 153.4, "weight": 42 },
  27. {
  28. "gender": "female", "height": 160, "weight": 50
  29. },
  30. { "gender": "female", "height": 147.2, "weight": 49.8 }]
  31. var axisData = []
  32. for (var i = 0; i < data.length; i++) {
  33. var height = data[i].height
  34. var weight = data[i].weight
  35. var itemArr = [height, weight]
  36. axisData.push(itemArr)
  37. }
  38. // axisData 就是一个二维数组, 数组中的每一个元素还是一个数组, 最内层数组中有两个元素, 一个
  39. // 代表身高, 一个代表体重
  40. var option = {
  41. xAxis: { type: 'value', scale: true },
  42. yAxis: { type: 'value', scale: true },
  43. series: [{
  44. type: 'scatter',
  45. data: axisData,
  46. symbolSize: (arg) => {
  47. console.log(arg);
  48. var weight = arg[1]
  49. var height = arg[0] / 100
  50. // BMI > 28 则代表肥胖, 肥胖的人用大的散点标识, 正常的人用小散点标识 //
  51. //BMI: 体重/ 身高*身高 kg m
  52. var bmi = weight / (height * height)
  53. if (bmi > 28) { return 20 } return 5
  54. },
  55. itemStyle: {
  56. color: (arg) => {
  57. var weight = arg.data[1]
  58. var height = arg.data[0] / 100
  59. var bmi = weight / (height * height)
  60. if (bmi > 28) { return 'red' } return 'green'
  61. }
  62. }
  63. },
  64. //涟漪动画
  65. { type: 'effectScatter', rippleEffect: { scale: 3 } }
  66. ]
  67. }
  68. mCharts.setOption(option)
  69. </script>
  70. </body>
  71. </html>

showEffectOn showEffectOn 可以控制涟漪动画在什么时候产生, 它的可选值有两个: render 和 emphasis render 代表界面渲染完成就开始涟漪动画 emphasis 代表鼠标移过某个散点的时候, 该散点开始涟漪动画

  1. { type: 'effectScatter', showEffectOn: 'emphasis', rippleEffect:{ scale:3 }}

image.png