日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据可视化【十四】交互式过滤地区分布图

發布時間:2023/11/30 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据可视化【十四】交互式过滤地区分布图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在前面的博客中已經介紹了如何繪制地區分布圖,這一節學習如何繪制交互式過濾地區分布圖。如果對繪制地區分布圖還不熟悉的話可以了解一下之前我寫的博客:數據可視化【十三】地區分布圖

整體的框架仍然是在之前的基礎上進行修改,主要是添加交互事件。

首先要做的是給圖例添加點擊事件,讓我們可以通過點擊改變地圖的狀態。
colorLegend.js

const groupEnter = groups.enter().append('g').attr('class', 'tick').attr('transform', (d,i) => `translate(0, ${i*spacing+circleRadius})`).merge(groups).attr('opacity', d => typeof(selected) === 'undefined' || d === selected ? 1 : 0.2).on('click',onClick)

然后通過onClick函數獲得點擊的狀態,進行相應的修改
index.js

const onClick = d => {console.log(d);selected = d === selected ? undefined : d;if (selected)bg.attr('opacity', 0.5)else bg.attr('opacity', 1)render(); }

上面的bg是背景的海洋,如果確定是點擊狀態的話就將其設置為透明的,并記錄當前的狀態,然后進行操作。這里把對地圖的操作都放到了render函數里面

把圖例的繪制和地圖的繪制分別放在對應的函數里,我這里是按照視頻分別放在了choroplethMap函數和colorLegend函數,然后再進行調用。

然后再根據不同的更新模式(update、enter)修改地圖的狀態(通過設置屬性就可以)

const projection = geoEqualEarth(); const pathGenerator = geoPath().projection(projection);export const choroplethMap = (selection, props) => {const {features,svg,colorScale,colorValue,selected} = props;console.log('choroplethMap.js');console.log(features); svg.call(zoom().on('zoom',() => {selection.attr('transform',event.transform);}));const pathUpdate = selection.selectAll('.country').data(features);const pathEnter = pathUpdate.enter().append('path').attr('class', 'country').attr('fill', d => colorScale(colorValue(d))).attr('d', pathGenerator).attr('stroke-width', 0.05)pathEnter.merge(pathUpdate).attr('opacity',d => !selected || colorValue(d) == selected ? 1: 0.1).attr('stroke-width', d => selected && colorValue(d) == selected ? 1: 0.05);pathEnter.append('title')//添加title,然后鼠標放在上面就可以出現標題.text(d => d.properties.name + ':' + colorValue(d)) }

上面的代碼和視頻中講解的出入比較多,我個人覺得curran講這個視頻的時候對更新模式的理解有一些偏頗,因此他視頻里面的邏輯稍微有點混亂,他的想法是每次點擊都重新進行繪制,可是這完全是不必要的,我們需要對點擊后的操作在update.merge(enter)里面進行就可以了,不用動初始化的部分。

代碼地址:https://vizhub.com/Edward-Elric233/157b7264849e4dc19365b445d949b775?edit=files&file=choroplethMap.js

效果圖

這個是可以進行交互的,我把代碼放在了自己的服務器上,如果有興趣可以訪問:傳送門
需要注意的是盡量使用火狐或者谷歌瀏覽器訪問,文件稍微有點大,加載可能需要一些時間。

總結

以上是生活随笔為你收集整理的数据可视化【十四】交互式过滤地区分布图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。