做地图可视化,谁不想让图表看起来高级点?纯色块太单调,渐变又不够个性。这篇文就是教你怎么给echarts geo 纹理填充加上图片,让地图瞬间有质感。看完这几十分钟,你就能把那种土气的地图换成设计师级别的作品。
先说个真事。上周给客户做汇报,我随手放了个默认的echarts地图。老板眉头一皱,问:“这啥?幼儿园大班画的?”我脸都红了。其实数据没毛病,就是视觉太干巴。后来我琢磨,能不能把地图区域填充成木纹、或者那种噪点质感?试了好几天,终于搞定了。
很多人一上来就去翻官方文档。文档写得挺全,但全是代码,没场景。你看着那些option配置,头都大了。其实核心就一个词:visualMap。对,就是那个控制颜色映射的东西。
咱们一步步来,别急。
第一步,你得有个图片。别去网上随便搜个jpg就完事。你要找那种无缝拼接的,或者至少边缘过渡自然的。我一般用PS随便调个滤镜,导出个png。记住,图片别太大,几百k就行,不然加载慢,用户等着急。
第二步,代码里怎么引用?别用本地路径,容易报错。最好是个网络链接,或者base64编码。我推荐base64,虽然看着长,但稳妥。把图片转成字符串,塞进series里的itemStyle里。
这里有个坑。很多人直接把图片路径填进去,发现地图还是白的。为啥?因为你没告诉echarts,这个图片是拿来填充的。你得用image属性,而不是color属性。
对,就是echarts geo 纹理填充的关键。你看这段代码:
itemStyle: {
normal: {
areaColor: {
type: 'image',
image: imgBase64,
repeat: 'repeat'
}
}
}
看到没?areaColor里套了个image。这就是echarts geo 纹理填充的标准姿势。repeat设为repeat,这样图片就能铺满整个区域,不会拉伸变形。要是设为no-repeat,那图片就只会在左上角显示一块,剩下全是空白,丑死。
再说说颜色映射的问题。加了纹理后,visualMap还能用吗?能用,但得小心。visualMap控制的是透明度或者颜色深浅,如果纹理太花,颜色变化就不明显了。这时候,你得调低纹理的透明度,或者选个颜色比较素的纹理。
我试过用那种深灰色的混凝土纹理,配合红色的visualMap,效果出奇的好。数据高的地方红得发紫,数据低的地方灰蒙蒙的。老板看了都说:“这图有点东西。”
还有个细节。地图的边框。默认是黑色的细线,配上纹理,显得特别脏。你得把borderColor设成透明,或者跟纹理底色接近的颜色。这样地图看起来才整体,不割裂。
borderColor: '#fff',
borderWidth: 1,
这行代码看着简单,作用巨大。它能把各个省份、各个州的分界线处理得干净利落。不然纹理一铺,边界模糊,地图就像块抹布。
最后,别忘了加个loading效果。纹理图片加载需要时间,如果直接显示空白地图,用户会以为出bug了。加个简单的loading提示,体验好很多。
其实,echarts geo 纹理填充不是什么高深技术,就是细心点。别怕试错,多调几个参数,多换几张图。你会发现,地图也能玩出花来。
我折腾这半天,最大的感受是:别被代码吓倒。可视化就是视觉艺术,代码只是工具。你脑子里要有画面,手底下才有活儿。
现在,去试试你的地图吧。把那些死板的纯色块扔掉,换上你喜欢的纹理。哪怕是一张简单的噪点图,也比纯色强。毕竟,谁愿意看一张毫无生气的地图呢?
记住,细节决定成败。一个小小的纹理填充,就能让你的图表从“能用”变成“好用”。这就够了。