欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)

這篇文章主要介紹“Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)”,在日常操作中,相信很多人在Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網技術服務公司,擁有項目成都網站制作、成都網站設計網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元堆龍德慶做網站,已為上家服務,為堆龍德慶各地企業(yè)和個人服務,聯(lián)系電話:13518219792

1 簡介

而在這個報告中有幾張數(shù)據(jù)可視化作品還是比較可圈可點的,作為(在模仿中精進數(shù)據(jù)可視化)系列文章的開篇之作,我將基于我觀察原始數(shù)據(jù)可視化作品進而構思出的方式,以純Python的方式模仿復刻。

2 復刻過程

2.1 觀察原作品

其實原作品咋一看上去有點復雜,但經過觀察,將原始圖片主要元素拆分成幾個部分來構思復現(xiàn)方式,還是不算復雜的,我總結為以下幾部分:

  • 「1 坐標系部分」

稍微懂點數(shù)據(jù)可視化的人應該都可以看出原作品的坐標不是常規(guī)的笛卡爾坐標系,而是極坐標系,這里復現(xiàn)原作品極坐標系的難點在于,其并不是完整的極坐標系,即左邊略小于半圓的區(qū)域是隱藏了參考線的。

因此與其在matplotlib中極坐標系的基礎上想方法隱藏部分參考線,不如逆向思維,從構造參考線的角度出發(fā),自己組織構造參考線,會更加的自由和靈活。

  • 「2 顏色填充」

這里的「顏色填充」指的是以居住自由指數(shù)折線為中線,在購房自由指數(shù)折線與租房自由指數(shù)折線之間的顏色填充區(qū)域,但困難的是這里當購房自由指數(shù)高于租房自由指數(shù)時對應的顏色為淺藍綠色,而反過來則變?yōu)榛疑c購房自由指數(shù)、租房自由指數(shù)的顏色相呼應。

Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)

我們只需要設定中心點參數(shù)在南極點或北極點,再配合簡單的經緯度相關知識就可以偽造出任意的經緯線,再利用geopandas中的投影變換向設定好的「正射投影」進行轉換,再作為平面坐標進行繪圖即可。

譬如按照這個思路來創(chuàng)建東經10度到東經220度之間,以及南緯-90度到-80度之間,對應的5條緯度線和對應38個城市的經線:

import geopandas as gpd
from shapely.geometry import LineString, Point, Polygon
import matplotlib.pyplot as plt
import numpy as np
import warnings

plt.rcParams['font.sans-serif'] = ['SimHei'] # 解決matplotlib中文亂碼問題
plt.rcParams['axes.unicode_minus'] = False # 解決matplotlib負號顯示問題
warnings.filterwarnings('ignore')

# 設置中心點在南極點的正射投影
crs = '+proj=ortho +lon_0=0 +lat_0=-90'

# 構建經度線并設置對應經緯度的地理坐標系
lng_lines = gpd.GeoDataFrame({
    'geometry': [LineString([[lng, -90], [lng, -78]]) for lng in np.arange(10, 220, 210 / 38)]}, 
    crs='EPSG:4326')

# 構建緯度線并設置為對應經緯度的地理坐標系
lat_lines = gpd.GeoDataFrame({
    'geometry': [LineString([[lng, lat] for lng in range(10, 220)]) for lat in range(-90, -79, 2)]}, 
    crs='EPSG:4326')

構造好數(shù)據(jù)之后,將經線與緯線對應的GeoDataFrame轉換到設置好的「正射投影」crs上,再作為不同圖層進行疊加繪制:

Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)

按照前面推斷出的規(guī)則來偽造示例數(shù)據(jù),并對偽造過程中的不合理數(shù)據(jù)進行修正:

def fake_index(value):
    
    fake = []
    fake.append(value+np.random.uniform(5, 10))
    fake.append(value-np.random.uniform(5, 10))
    
    return np.random.choice(fake, size=2, replace=False).tolist()

data['購房自由指數(shù)'], data['租房自由指數(shù)'] = list(zip(*data['居住自由指數(shù)'].apply(fake_index)))

# 修正偽造數(shù)據(jù)中大于100和小于0的情況
data.loc[:, '居住自由指數(shù)':] = data.loc[:, '居住自由指數(shù)':].applymap(lambda v: 100 if v > 100 else v)
data.loc[:, '居住自由指數(shù)':] = data.loc[:, '居住自由指數(shù)':].applymap(lambda v: 0 if v < 0 else v)
data.head()

Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)

接下來我們就來為每個指標構造線與散點部分的矢量數(shù)據(jù),并在統(tǒng)一轉換坐標參考系到「正射投影」之后疊加到之前的圖像上:

# 為每個城市生成1條經線
lng_lines = gpd.GeoDataFrame({
    'geometry': [LineString([[lng, -90], [lng, -78]]) for lng in np.arange(10, 220, 210 / data.shape[0])]}, 
    crs='EPSG:4326')

# 居住自由指數(shù)對應的折線
line1 = gpd.GeoDataFrame({
    'geometry': [LineString([(lng, lat) for lng, lat in zip(np.arange(10, 220, 210 / data.shape[0]),
                                                            data['居住自由指數(shù)_映射值'])])]}, 
    crs='EPSG:4326')

# 居住自由指數(shù)對應的折線上的散點
scatter1 = gpd.GeoDataFrame({
    'geometry': [Point(lng, lat) for lng, lat in zip(np.arange(10, 220, 210 / data.shape[0]),
                                                     data['居住自由指數(shù)_映射值'])]}, crs='EPSG:4326')

# 購房自由指數(shù)對應的折線
line2 = gpd.GeoDataFrame({
    'geometry': [LineString([(lng, lat) for lng, lat in zip(np.arange(10, 220, 210 / data.shape[0]),
                                                            data['購房自由指數(shù)_映射值'])])]}, 
    crs='EPSG:4326')

# 購房自由指數(shù)對應的折線上的散點
scatter2 = gpd.GeoDataFrame({
    'geometry': [Point(lng, lat) for lng, lat in zip(np.arange(10, 220, 210 / data.shape[0]),
                                                     data['購房自由指數(shù)_映射值'])]}, crs='EPSG:4326')


# 租房自由指數(shù)對應的折線
line3 = gpd.GeoDataFrame({
    'geometry': [LineString([(lng, lat) for lng, lat in zip(np.arange(10, 220, 210 / data.shape[0]),
                                                            data['租房自由指數(shù)_映射值'])])]}, 
    crs='EPSG:4326')

# 租房自由指數(shù)對應的折線上的散點
scatter3 = gpd.GeoDataFrame({
    'geometry': [Point(lng, lat) for lng, lat in zip(np.arange(10, 220, 210 / data.shape[0]),
                                                     data['租房自由指數(shù)_映射值'])]}, crs='EPSG:4326')

                             
fig, ax = plt.subplots(figsize=(8, 8))

# 繪制經度線與緯度線
ax = lng_lines.to_crs(crs).plot(ax=ax, linewidth=0.4, edgecolor='lightgrey')
ax = lat_lines.to_crs(crs).plot(ax=ax, linewidth=0.75, edgecolor='grey', alpha=0.8)
ax = line1.to_crs(crs).plot(ax=ax, color='black', linewidth=1)
ax = scatter1.to_crs(crs).plot(ax=ax, color='black', markersize=12)
ax = line2.to_crs(crs).plot(ax=ax, color='#00CED1', linewidth=0.6)
ax = scatter2.to_crs(crs).plot(ax=ax, color='#00CED1', markersize=4)
ax = line3.to_crs(crs).plot(ax=ax, color='lightgrey', linewidth=0.6)
ax = scatter3.to_crs(crs).plot(ax=ax, color='lightgrey', markersize=4)
ax.axis('off'); # 關閉坐標軸

fig.savefig('圖11.png', dpi=500, inches_bbox='tight', inches_pad=0)

Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)

Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)

那么接下來我們要做的事就so easy了,只需要分別得到兩者去除重疊面后,剩余的部分,以對應的填充色彩疊加繪制在圖11的圖像上就可以啦~,利用geopandas中的difference即可輕松實現(xiàn):

fig, ax = plt.subplots(figsize=(8, 8))

# 繪制經度線與緯度線
ax = lng_lines.to_crs(crs).plot(ax=ax, linewidth=0.4, edgecolor='lightgrey')
ax = lat_lines.to_crs(crs).plot(ax=ax, linewidth=0.75, edgecolor='grey', alpha=0.8)
ax = line1.to_crs(crs).plot(ax=ax, color='black', linewidth=1)
ax = scatter1.to_crs(crs).plot(ax=ax, color='black', markersize=12)
ax = line2.to_crs(crs).plot(ax=ax, color='#00CED1', linewidth=0.6)
ax = scatter2.to_crs(crs).plot(ax=ax, color='#00CED1', markersize=4)
ax = line3.to_crs(crs).plot(ax=ax, color='lightgrey', linewidth=0.6)
ax = scatter3.to_crs(crs).plot(ax=ax, color='lightgrey', markersize=4)
ax = polygon1.difference(polygon2).plot(ax=ax, color='#00CED1', alpha=0.2)
polygon2.difference(polygon1).plot(ax=ax, color='lightgrey', alpha=0.6)
ax.axis('off'); # 關閉坐標軸

fig.savefig('圖13.png', dpi=500, inches_bbox='tight', inches_pad=0)

Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)

到此,關于“Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

文章標題:Python怎么實現(xiàn)數(shù)據(jù)可視化分析38個城市的居住自由指數(shù)
當前URL:http://www.chinadenli.net/article14/gjocde.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站做網站手機網站建設品牌網站建設關鍵詞優(yōu)化移動網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都做網站