亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Matplotlib繪圖基礎(chǔ)之地圖繪制詳解

 更新時(shí)間:2023年08月15日 09:54:52   作者:databook  
如果分析的數(shù)據(jù)與地域相關(guān),那么,把分析結(jié)果結(jié)合地圖一起展示的話,會(huì)讓可視化的效果得到極大的提升,下面就來講講如何利用Matplotlib一步步通過地圖來展示分析結(jié)果吧

如果分析的數(shù)據(jù)與地域相關(guān),那么,把分析結(jié)果結(jié)合地圖一起展示的話,會(huì)讓可視化的效果得到極大的提升。

比如,分析各省GDP數(shù)據(jù),人口數(shù)據(jù),用柱狀圖,餅圖之類的雖然都可以展示分析結(jié)果,

不過,如果能在全國(guó)的地圖上展示各省的分析結(jié)果的話,會(huì)讓人留下更加深刻的印象。

將數(shù)據(jù)的分析結(jié)果展示在地圖上,難點(diǎn)在于:

  • 如何繪制地圖,地圖是展示數(shù)據(jù)的基礎(chǔ),如何繪制出需要的地圖區(qū)域是第一步
  • 數(shù)據(jù)和地圖關(guān)聯(lián),數(shù)據(jù)最終要顯示在地圖上,數(shù)據(jù)如何與地理坐標(biāo)關(guān)聯(lián)也是重要的一步
  • 地圖上展示數(shù)據(jù),也就是要在地圖上繪制不同的顏色或者幾何形狀來表達(dá)不同的數(shù)據(jù)

解決了上面3個(gè)難題,就能夠結(jié)合地圖做一些基本的數(shù)據(jù)展示了。

本篇通過一個(gè)基于南京各個(gè)區(qū)地理信息的分析示例,來演示如何一步步通過地圖來展示分析結(jié)果。

1. 繪制地圖

第一步是繪制地圖,其實(shí)地圖就是一塊塊不規(guī)則的多邊形拼接起來的。

在本篇的示例中,各個(gè)多邊形就是南京的各個(gè)區(qū)。

繪制多邊形不難,難的是如何得到各個(gè)多邊形的頂點(diǎn)坐標(biāo)。

好在現(xiàn)在有很多的開放地理信息平臺(tái),可以讓我們獲取到想要的地理信息。

1.1. 獲取地理信息

比如,通過阿里的DataV數(shù)據(jù)可視化平臺(tái),可以獲取南京各個(gè)區(qū)的地理范圍信息。

在這個(gè)平臺(tái)上,左邊選擇區(qū)域,右邊會(huì)生成對(duì)應(yīng)范圍的地理信息的數(shù)據(jù)。

地理信息數(shù)據(jù)是json格式。

1.2. 展示地理信息

為了讀取地理信息數(shù)據(jù)并展示,需要用到一個(gè) GeoPandas 的庫。

pip 安裝很簡(jiǎn)單:

$ pip install geopandas

geopandas可以直接讀取DataV數(shù)據(jù)可視化平臺(tái)生成的JSON數(shù)據(jù)并展示。

import geopandas as gpd
df_geo = gpd.read_file(
    "https://geo.datav.aliyun.com/areas_v3/bound/320100_full.json"
)
df_geo

json文件的HTTP地址DataV數(shù)據(jù)可視化平臺(tái)就是在上生成的。

這個(gè)文件中的關(guān)鍵字段就是 geometry,其中的內(nèi)容就是各個(gè)區(qū)的多邊形形狀的各個(gè)頂點(diǎn)的經(jīng)緯度坐標(biāo)。

展示數(shù)據(jù):

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
fig.set_size_inches(8, 8)
# df_geo就是上面通過geopandas讀取的數(shù)據(jù)
df_geo.plot(
    ax=ax,
    column="name",
    cmap="plasma",
    edgecolor="k",
    legend=True,
    legend_kwds={"loc": "lower left"}
)
plt.show()

其中主要參數(shù)的含義:

  • axmatplotlib生成的子圖,這里就是數(shù)據(jù)要繪制的位置
  • column:作為不同區(qū)域的名稱,這里就是南京各個(gè)區(qū)的名稱
  • cmap:一組顏色,分別對(duì)應(yīng)不同的區(qū)
  • edgecolor:每個(gè)多邊形邊緣的顏色,這里設(shè)置的是黑色
  • legend:是否顯示圖例
  • legend_kwds:設(shè)置圖例的配置信息,這里只設(shè)置了圖例的位置

2. 地圖和數(shù)據(jù)關(guān)聯(lián)

首先生成一些測(cè)試數(shù)據(jù):

# 刪除 df_geo 中一些不必要的列
df_geo = df_geo.drop(columns=["childrenNum", "level", "parent", "subFeatureIndex"])
# 南京各個(gè)區(qū)的名稱
area_names = df_geo.loc[:, "name"]
# df_val為測(cè)試數(shù)據(jù),其中name列是各個(gè)區(qū)的名稱
# value 列是一些隨機(jī)數(shù),模擬各個(gè)區(qū)的人口,GDP等數(shù)據(jù)
df_val = pd.DataFrame({
    "name": area_names.tolist(),
    "value": np.random.randint(10, 10000, len(area_names))
})

測(cè)試數(shù)據(jù) df_val 模擬其他途徑得到的業(yè)務(wù)數(shù)據(jù),

下面要將 df_val 中的指展示到地圖上,就要先把 df_valdf_geo 結(jié)合起來。

# 以 name 列作為結(jié)合兩個(gè)數(shù)據(jù)集的依據(jù)
df = pd.merge(df_geo, df_val, on="name", how="left")
df

這樣,我們就得到了同時(shí)包含**地理信息(geometry)業(yè)務(wù)數(shù)據(jù)(value)**的數(shù)據(jù)集了。

3. 地圖上展示數(shù)據(jù)

接下來就是展示數(shù)據(jù)了,下面演示兩種在地圖上展示數(shù)據(jù)的方式。

3.1. 熱力圖方式

根據(jù) value 值的不同,用漸變色來顯示不同區(qū)的顏色。

fig, ax = plt.subplots()
fig.set_size_inches(8, 8)
ax.axis("off")
df.plot(
    ax=ax,
    column="value",
    cmap="plasma",
    edgecolor="k",
    legend=True,
    legend_kwds={'label': "value", 'shrink':0.5},
)
for index in df.index:
    x = df.iloc[index].geometry.centroid.x
    y = df.iloc[index].geometry.centroid.y
    name = df.iloc[index]["name"]
    if name in ["建鄴區(qū)", "鼓樓區(qū)", "玄武區(qū)", "秦淮區(qū)"]:
        ax.text(x, y, name, ha="center", va="center", fontsize=8)
    else:
        ax.text(x, y, name, ha="center", va="center")
plt.show()

其中,"建鄴區(qū)", "鼓樓區(qū)", "玄武區(qū)", "秦淮區(qū)" 四個(gè)區(qū)的面積比較小,

所以字體稍微調(diào)小了一些。

3.2. 分類展示

value值分為3類,每類用不同的形式來表示。

  • value < 3000
  • 3000 <= value < 5000
  • value >= 5000
import matplotlib.patches as mpatches
fig, ax = plt.subplots()
fig.set_size_inches(5, 10)
ax.axis("off")
legend_list = []
df[df["value"] < 3000].plot(
    ax=ax,
    color="lightblue",
    edgecolor="k",
    hatch="\\\\",
    legend=False,
)
legend_list.append(
    mpatches.Patch(
        facecolor="lightblue",
        edgecolor="black", hatch="\\\\", label="value<3000"
    )
)
df[(df["value"] >= 3000) & (df["value"] < 5000)].plot(
    ax=ax,
    color="lightgreen",
    edgecolor="k",
    hatch="o",
    legend=False,
)
legend_list.append(
    mpatches.Patch(
        facecolor="lightgreen",
        edgecolor="black", hatch="o", label="3000<=value<5000")
)
df[df["value"] >= 5000].plot(
    ax=ax,
    color="r",
    edgecolor="k",
    hatch="*",
    legend=False,
)
legend_list.append(mpatches.Patch(
    facecolor="r",
    edgecolor="black", hatch="*", label="value>=5000"))
ax.legend(handles = legend_list, 
          loc=(1, 0.5), 
          title="value 等級(jí)", 
          fontsize=12)
plt.show()

4. 總結(jié)

結(jié)合地理信息展示數(shù)據(jù),讓數(shù)據(jù)更加的生動(dòng),特別是很多數(shù)據(jù)分析場(chǎng)景本身就和地理信息密切相關(guān)。

除了基于地域的各種經(jīng)濟(jì)或者人口等等的相關(guān)數(shù)據(jù),

還有各類氣象數(shù)據(jù),如能和地理信息結(jié)合展示的話,會(huì)讓人對(duì)整體情況一目了然。

文中用到的主要資源:

以上就是Matplotlib繪圖基礎(chǔ)之地圖繪制詳解的詳細(xì)內(nèi)容,更多關(guān)于Matplotlib地圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python random模塊用法解析及簡(jiǎn)單示例

    Python random模塊用法解析及簡(jiǎn)單示例

    這篇文章主要介紹了Python random模塊用法解析及簡(jiǎn)單示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • python多進(jìn)程下實(shí)現(xiàn)日志記錄按時(shí)間分割

    python多進(jìn)程下實(shí)現(xiàn)日志記錄按時(shí)間分割

    這篇文章主要為大家詳細(xì)介紹了python多進(jìn)程下實(shí)現(xiàn)日志記錄按時(shí)間分割,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python讀寫csv文件的方法

    python讀寫csv文件的方法

    這篇文章主要介紹了python讀寫csv文件的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • 教你怎么用python實(shí)現(xiàn)字符串轉(zhuǎn)日期

    教你怎么用python實(shí)現(xiàn)字符串轉(zhuǎn)日期

    今天教各位小伙伴怎么用python實(shí)現(xiàn)字符串轉(zhuǎn)日期,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • python保存圖片的四個(gè)常用方法

    python保存圖片的四個(gè)常用方法

    這篇文章主要給大家介紹了關(guān)于python保存圖片的四個(gè)常用方法,文中分別介紹了PIL的保存圖片方法、opencv保存圖片、Matplotlib保存圖片的方法以及pytorch保存圖片,需要的朋友可以參考下
    2022-02-02
  • 解決jupyterLab打開后出現(xiàn)Config option `template_path`not recognized by `ExporterCollapsibleHeadings`問題

    解決jupyterLab打開后出現(xiàn)Config option `template_path`not&

    在JupyterLab中使用OpenCV環(huán)境時(shí)遇到模板路徑問題,經(jīng)排查發(fā)現(xiàn)是nbconvert版本過高導(dǎo)致的,通過降級(jí)nbconvert到5.6.1版本成功解決
    2025-02-02
  • Python利用pandas處理CSV文件的用法示例

    Python利用pandas處理CSV文件的用法示例

    pandas是一個(gè)第三方數(shù)據(jù)分析庫,其集成了大量的數(shù)據(jù)分析工具,可以方便的處理和分析各類數(shù)據(jù),本文將給大家介紹Python利用pandas處理CSV文件的用法示例,文中通過代碼和圖文講解的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • 利用Python判斷整數(shù)是否是回文數(shù)的3種方法總結(jié)

    利用Python判斷整數(shù)是否是回文數(shù)的3種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于如何利用Python判斷整數(shù)是否是回文數(shù)的3種方總結(jié),回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù),需要的朋友可以參考下
    2021-07-07
  • python使用time、datetime返回工作日列表實(shí)例代碼

    python使用time、datetime返回工作日列表實(shí)例代碼

    這篇文章主要介紹了python使用time、datetime返回工作日列表,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • linux上運(yùn)行python腳本,SyntaxError:?invalid?syntax的解決

    linux上運(yùn)行python腳本,SyntaxError:?invalid?syntax的解決

    這篇文章主要介紹了linux上運(yùn)行python腳本,SyntaxError:?invalid?syntax的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論