Toggle navigation
世界地图嵌套饼图
By
139*****814
2020-11-04 11:13:27
脚本
16
21
作品使用的第三方脚本
https://www.makeapie.com/dep/echarts/map/js/world.js
数据管理
上传数据
支持小于 5M 任意格式(csv, xlsx, json, xml, ...)的数据文件
上传后可以通过生成的文件链接异步获取托管的数据。
历史数据
0 条
无历史数据
代码修改记录
信息提示
保存作品
对当前截图不满意?你还可以
上传本地截图
重新截图
作品名称
作品描述
标签
geo
grid
legend
markLine
markPoint
bar
effectScatter
line
lines
map
timeline
title
toolbox
tooltip
visualMap
作品默认版本
最新
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
20:11:45
图表已生成
整理代码
刷新
代码
var rawData = [{ name: 'China', value: [400] }, { name: 'Russia', value: [11] }, { name: 'Spain', value: [101] }, { name: 'Indonesia', value: [101] } ]; var valueData = [400, 11, 101, 101] var maxNum = Math.max(...rawData.map((item) => item.value[0])) var geoCoordMap3 = { 'Afghanistan': [67.709953, 33.93911], 'Angola': [17.873887, -11.202692], 'Albania': [20.168331, 41.153332], 'UnitedArabEmirates': [53.847818, 23.424076], 'Argentina': [-63.61667199999999, -38.416097], 'Armenia': [45.038189, 40.069099], 'FrenchSouthern and AntarcticLands': [69.348557, -49.280366], 'Australia': [133.775136, -25.274398], 'Austria': [14.550072, 47.516231], 'Azerbaijan': [47.576927, 40.143105], 'Burundi': [29.918886, -3.373056], 'Belgium': [4.469936, 50.503887], 'Benin': [2.315834, 9.30769], 'BurkinaFaso': [-1.561593, 12.238333], 'Bangladesh': [90.356331, 23.684994], 'Bulgaria': [25.48583, 42.733883], 'TheBahamas': [-77.39627999999999, 25.03428], 'Bosnia andHerzegovina': [17.679076, 43.915886], 'Belarus': [27.953389, 53.709807], 'Belize': [-88.49765, 17.189877], 'Bermuda': [-64.7505, 32.3078], 'Bolivia': [-63.58865299999999, -16.290154], 'Brazil': [-51.92528, -14.235004], 'Brunei': [114.727669, 4.535277], 'Bhutan': [90.433601, 27.514162], 'Botswana': [24.684866, -22.328474], 'CentralAfricanRepublic': [20.939444, 6.611110999999999], 'Canada': [-106.346771, 56.130366], 'Switzerland': [8.227511999999999, 46.818188], 'Chile': [-71.542969, -35.675147], 'China': [104.195397, 35.86166], 'IvoryCoast': [-5.547079999999999, 7.539988999999999], 'Cameroon': [12.354722, 7.369721999999999], 'DemocraticRepublic of the Congo': [21.758664, -4.038333], 'Republic of theCongo': [15.827659, -0.228021], 'Colombia': [-74.297333, 4.570868], 'CostaRica': [-83.753428, 9.748916999999999], 'Cuba': [-77.781167, 21.521757], 'NorthernCyprus': [33.429859, 35.126413], 'Cyprus': [33.429859, 35.126413], 'CzechRepublic': [15.472962, 49.81749199999999], 'Germany': [10.451526, 51.165691], 'Djibouti': [42.590275, 11.825138], 'Denmark': [9.501785, 56.26392], 'DominicanRepublic': [-70.162651, 18.735693], 'Algeria': [1.659626, 28.033886], 'Ecuador': [-78.18340599999999, -1.831239], 'Egypt': [30.802498, 26.820553], 'Eritrea': [39.782334, 15.179384], 'Spain': [-3.74922, 40.46366700000001], 'Estonia': [25.013607, 58.595272], 'Ethiopia': [40.489673, 9.145000000000001], 'Finland': [25.748151, 61.92410999999999], 'Fiji': [178.065032, -17.713371], 'FalklandIslands': [-59.523613, -51.796253], 'France': [2.213749, 46.227638], 'Gabon': [11.609444, -0.803689], 'UnitedKingdom': [-3.435973, 55.378051], 'Georgia': [-82.9000751, 32.1656221], 'Ghana': [-1.023194, 7.946527], 'Guinea': [-9.696645, 9.945587], 'Gambia': [-15.310139, 13.443182], 'GuineaBissau': [-15.180413, 11.803749], 'EquatorialGuinea': [10.267895, 1.650801], 'Greece': [21.824312, 39.074208], 'Greenland': [-42.604303, 71.706936], 'Guatemala': [-90.23075899999999, 15.783471], 'FrenchGuiana': [-53.125782, 3.933889], 'Guyana': [-58.93018, 4.860416], 'Honduras': [-86.241905, 15.199999], 'Croatia': [15.2, 45.1], 'Haiti': [-72.285215, 18.971187], 'Hungary': [19.503304, 47.162494], 'Indonesia': [113.921327, -0.789275], 'India': [78.96288, 20.593684], 'Ireland': [-8.24389, 53.41291], 'Iran': [53.688046, 32.427908], 'Iraq': [43.679291, 33.223191], 'Iceland': [-19.020835, 64.963051], 'Israel': [34.851612, 31.046051], 'Italy': [12.56738, 41.87194], 'Jamaica': [-77.297508, 18.109581], 'Jordan': [36.238414, 30.585164], 'Japan': [138.252924, 36.204824], 'Kazakhstan': [66.923684, 48.019573], 'Kenya': [37.906193, -0.023559], 'Kyrgyzstan': [74.766098, 41.20438], 'Cambodia': [104.990963, 12.565679], 'SouthKorea': [127.766922, 35.907757], 'Kosovo': [20.902977, 42.6026359], 'Kuwait': [47.481766, 29.31166], 'Laos': [102.495496, 19.85627], 'Lebanon': [35.862285, 33.854721], 'Liberia': [-9.429499000000002, 6.428055], 'Libya': [17.228331, 26.3351], 'SriLanka': [80.77179699999999, 7.873053999999999], 'Lesotho': [28.233608, -29.609988], 'Lithuania': [23.881275, 55.169438], 'Luxembourg': [6.129582999999999, 49.815273], 'Latvia': [24.603189, 56.879635], 'Morocco': [-7.092619999999999, 31.791702], 'Moldova': [28.369885, 47.411631], 'Madagascar': [46.869107, -18.766947], 'Mexico': [-102.552784, 23.634501], 'Macedonia': [21.745275, 41.608635], 'Mali': [-3.996166, 17.570692], 'Myanmar': [95.956223, 21.913965], 'Montenegro': [19.37439, 42.708678], 'Mongolia': [103.846656, 46.862496], 'Mozambique': [35.529562, -18.665695], 'Mauritania': [-10.940835, 21.00789], 'Malawi': [34.301525, -13.254308], 'Malaysia': [101.975766, 4.210484], 'Namibia': [18.49041, -22.95764], 'NewCaledonia': [165.618042, -20.904305], 'Niger': [8.081666, 17.607789], 'Nigeria': [8.675277, 9.081999], 'Nicaragua': [-85.207229, 12.865416], 'Netherlands': [5.291265999999999, 52.132633], 'Norway': [8.468945999999999, 60.47202399999999], 'Nepal': [84.12400799999999, 28.394857], 'NewZealand': [174.885971, -40.900557], 'Oman': [55.923255, 21.512583], 'Pakistan': [69.34511599999999, 30.375321], 'Panama': [-80.782127, 8.537981], 'Peru': [-75.015152, -9.189967], 'Philippines': [121.774017, 12.879721], 'PapuaNewGuinea': [143.95555, -6.314992999999999], 'Poland': [19.145136, 51.919438], 'PuertoRico': [-66.590149, 18.220833], 'NorthKorea': [127.510093, 40.339852], 'Portugal': [-8.224454, 39.39987199999999], 'Paraguay': [-58.443832, -23.442503], 'Qatar': [51.183884, 25.354826], 'Romania': [24.96676, 45.943161], 'Russia': [105.318756, 61.52401], 'Rwanda': [29.873888, -1.940278], 'WesternSahara': [-12.885834, 24.215527], 'SaudiArabia': [45.079162, 23.885942], 'Sudan': [30.217636, 12.862807], 'SouthSudan': [31.3069788, 6.876991899999999], 'Senegal': [-14.452362, 14.497401], 'SolomonIslands': [160.156194, -9.64571], 'SierraLeone': [-11.779889, 8.460555], 'ElSalvador': [-88.89653, 13.794185], 'Somaliland': [46.8252838, 9.411743399999999], 'Somalia': [46.199616, 5.152149], 'RepublicofSerbia': [21.005859, 44.016521], 'Suriname': [-56.027783, 3.919305], 'Slovakia': [19.699024, 48.669026], 'Slovenia': [14.995463, 46.151241], 'Sweden': [18.643501, 60.12816100000001], 'Swaziland': [31.465866, -26.522503], 'Syria': [38.996815, 34.80207499999999], 'Chad': [18.732207, 15.454166], 'Togo': [0.824782, 8.619543], 'Thailand': [100.992541, 15.870032], 'Tajikistan': [71.276093, 38.861034], 'Turkmenistan': [59.556278, 38.969719], 'EastTimor': [125.727539, -8.874217], 'Trinidad andTobago': [-61.222503, 10.691803], 'Tunisia': [9.537499, 33.886917], 'Turkey': [35.243322, 38.963745], 'UnitedRepublic ofTanzania': [34.888822, -6.369028], 'Uganda': [32.290275, 1.373333], 'Ukraine': [31.16558, 48.379433], 'Uruguay': [-55.765835, -32.522779], 'UnitedStates ofAmerica': [-95.712891, 37.09024], 'Uzbekistan': [64.585262, 41.377491], 'Venezuela': [-66.58973, 6.42375], 'Vietnam': [108.277199, 14.058324], 'Vanuatu': [166.959158, -15.376706], 'WestBank': [35.3027226, 31.9465703], 'Yemen': [48.516388, 15.552727], 'SouthAfrica': [22.937506, -30.559482], 'Zambia': [27.849332, -13.133897], 'Zimbabwe': [29.154857, -19.015438] } var namearr = ['1'] var colorarr = ['#1921ff', '#266eff', '#01c3dd', '#008198', '#2ef4ab', '#ffe074', '#ffcbcb', '#cd8425' ]; var attackSourcesColor = [ new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: "#EB3B5A" }, { offset: 1, color: "#FE9C5A" } ]), new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: "#FA8231" }, { offset: 1, color: "#FFD14C" } ]), new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: "#F7B731" }, { offset: 1, color: "#FFEE96" } ]), new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: "#395CFE" }, { offset: 1, color: "#2EC7CF" } ]) ]; var geoCoordMap = geoCoordMap3; // 3d柱状图 const topImg = "data:image/png;base64,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" const CubeLeft = echarts.graphic.extendShape({ shape: { x: 0, y: 0 }, buildPath: function(ctx, shape) { // 会canvas的应该都能看得懂,shape是从custom传入的 const xAxisPoint = shape.xAxisPoint const c0 = [shape.x, shape.y] const c1 = [shape.x - 10, shape.y - 4] const c2 = [xAxisPoint[0] - 10, xAxisPoint[1] - 6] const c3 = [xAxisPoint[0], xAxisPoint[1]] ctx.moveTo(c0[0], c0[1]).lineTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).closePath() } }) function attackSourcesDataFmt(sData) { var sss = []; sData.forEach(function(item, i) { let itemStyle = { color: i > 3 ? attackSourcesColor[3] : attackSourcesColor[i] }; sss.push({ value: item, itemStyle: itemStyle }); }); return sss; } // 绘制右侧面 const CubeRight = echarts.graphic.extendShape({ shape: { x: 0, y: 0 }, buildPath: function(ctx, shape) { const xAxisPoint = shape.xAxisPoint const c1 = [shape.x, shape.y + 3] //上左 const c2 = [xAxisPoint[0], xAxisPoint[1]] //下左 const c3 = [xAxisPoint[0] + 10, xAxisPoint[1] - 5] //下右 const c4 = [shape.x + 10, shape.y - 4] //上右 ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath() } }) // 绘制顶面 const CubeTop = echarts.graphic.extendShape({ shape: { x: 0, y: 0 }, buildPath: function(ctx, shape) { const c1 = [shape.x, shape.y + 3] const c2 = [shape.x + 10, shape.y - 4] //右点 const c3 = [shape.x, shape.y - 10] const c4 = [shape.x - 10, shape.y - 4] ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath() } }) // 注册三个面图形 echarts.graphic.registerShape('CubeLeft', CubeLeft) echarts.graphic.registerShape('CubeRight', CubeRight) echarts.graphic.registerShape('CubeTop', CubeTop) // 底部图片 const imgList = [] rawData.map((item, index) => { imgList.push({ coord: [index, 0], symbolOffset: [0, '-18%'], symbolSize: [30, 10], symbol: "image://" + topImg, // label: { // show: true, // offset: [0, -30], // fontSize: 16, // color: "#00baff", // } }, ) }) option = { baseOption: { backgroundColor: new echarts.graphic.RadialGradient(0.5, 0.5, 0.9, [{ offset: 0, color: '#f7f8fa' }, { offset: 1, color: '#043270' }]), title: [{ left: 'center', top: '5%', textStyle: { fontSize: 30, color: 'rgba(23,23,31, 0.7)', textShadowColor: '(0,0,0,0.3)', textShadowBlur: 5, textShadowOffsetX: 2, textShadowOffsety: 4 } }, { id: 'top 10', test: '' } ], visualMap: { // min: 0 max: 20, show: false, left: 'left', top: 'bottom', text: ['高', '低'], // 文本,默认为数值文本 calculable: true, seriesIndex: [0, 2], inRange: { color: ['rgba(255, 255, 51,0.4)', 'rgba(238,25,27,1)'], //symbolSize: [10, 50] } }, geo: { map: 'world', show: true, roam: false, label: { emphasis: { show: true } }, itemStyle: { normal: { show: true, areaColor: '#b1e2ee', borderColor: '#1773c3', shadowColor: '#1773c3', shadowBlur: 1 } }, }, series: [{ name: '底图', type: 'map', mapType: 'world', roam: true, top: '16%', bottom: '5%', label: { normal: { show: false, }, emphasis: { show: false, } }, itemStyle: {}, data: [] }, ] }, // options: [] } function renderEachCity() { var options = { legend: [], xAxis: [], yAxis: [], grid: [], series: [] }; options.legend.push({ show: false, data: namearr, itemWidth: 5, itemHeight: 5, textStyle: { color: '#ddd', fontSize: 10 }, top: '95%', //bottom:'5%' }); echarts.util.each(rawData, function(dataItem, idx) { var geoCoord = geoCoordMap[dataItem.name]; var coord = myChart.convertToPixel('geo', geoCoord); idx += ''; options.xAxis.push({ id: idx, gridId: idx, type: 'category', name: dataItem.name, nameStyle: { color: '#ddd', fontSize: 12 }, nameLocation: 'middle', nameGap: 3, splitLine: { show: false }, axisTick: { show: false }, axisLabel: { show: false }, axisLine: { show: false, lineStyle: { color: '#bbb' } }, data: [dataItem.name], }); options.yAxis.push({ id: idx, gridId: idx, show: false }); options.grid.push({ id: idx, width: 30, height: dataItem.value[0] / maxNum * 100, left: coord[0] - 15, top: coord[1] - dataItem.value[0] / maxNum * 100, // bottom: dataItem.value[0] }); for (var i = 0; i < namearr.length; i++) { options.series.push({ type: 'custom', renderItem: (params, api) => { const location = api.coord([api.value(0), api.value(1)]) return { type: 'group', children: [{ type: 'CubeLeft', shape: { api, xValue: api.value(0), yValue: api.value(1), x: location[0], y: location[1], xAxisPoint: api.coord([api.value(0), 0]) }, style: { fill: idx > 2 ? attackSourcesColor[3] : attackSourcesColor[idx] } }, { type: 'CubeRight', shape: { api, xValue: api.value(0), yValue: api.value(1), x: location[0], y: location[1], xAxisPoint: api.coord([api.value(0), 0]) }, style: { fill: idx > 2 ? attackSourcesColor[3] : attackSourcesColor[idx] } }, { type: 'CubeTop', shape: { api, xValue: api.value(0), yValue: api.value(1), x: location[0], y: location[1], xAxisPoint: api.coord([api.value(0), 0]) }, style: { fill: idx > 2 ? attackSourcesColor[3] : attackSourcesColor[idx] } }] } }, data: [dataItem.value[i] / maxNum * 100], name: namearr[i], // type: 'bar', stack: 'bar' + idx, xAxisId: idx, yAxisId: idx, itemStyle: { normal: { color: colorarr[i] } }, markPoint: { data: imgList }, }); } }); myChart.setOption(options); } setTimeout(function() { renderEachCity(); }, 1);