中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用Python來仿制一張R語言的數據可視化圖

發布時間:2021-11-22 14:56:26 來源:億速云 閱讀:124 作者:柒染 欄目:大數據

如何用Python來仿制一張R語言的數據可視化圖,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

簡介

開門見山,今天我們要模仿的數據可視化作品來自 「#TidyTuesday」 活動于2020年1月28日發布的「舊金山街道樹木數據集」下的眾多參賽作品中,由Philippe Massicotte創作的(如圖1所示)非常受歡迎的 「Street trees of San Francisco」

如何用Python來仿制一張R語言的數據可視化圖

而路網數據我們則可以利用osmnx進行在線獲取,只需傳入我們的舊金山面數據bbox范圍,配合

osmnx進行獲取即可:

接著我們在上述數據基礎上對每個社區面內部的街道樹木數量進行統計并對數據進行分箱,配上預設區間的色彩值:

# 統計每個社區內部的樹木數量
sf_trees = \
(
    gpd
    # 空間連接
    .sjoin(left_df=sf,
           right_df=trees,
           op='contains',
           how='left')
    # 按照name分組計數(這里未連接到任何數的社區被
    # 記為1本質上是錯誤的,但我們繪圖分段后這一點不影響)
    .groupby('name')
    .agg({
        'name': 'count',
        'geometry': 'first'
    })
    .rename(columns={'name': '數量'})
    .reset_index(drop=False)
    # 直接轉為GeoDataFrame
    .pipe(gpd.GeoDataFrame, crs='EPSG:4326')
)

sf_trees['顏色'] = (
    pd
    .cut(sf_trees['數量'], 
         bins=[0, 2500, 5000, 7500, 10000, max(sf_trees['數量'])], 
         labels=['#e4f1e1', '#c0dfd1', '#67a9a2', '#3b8383', '#145e64'])
)

最后別忘記了我們作為輪廓的緩沖區生成:

# 生成輪廓緩沖區
sf_bounds = gpd.GeoSeries([sf.buffer(0.001).unary_union], crs='EPSG:4326')

「主要視覺元素繪制」

做好這些準備后我們直接就可以先將圖像的主體元素繪制出來:

import matplotlib.pyplot as plt
from matplotlib import font_manager as fm

# 設置全局默認字體
plt.rcParams['font.sans-serif'] = ['Times New Roman']

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

# 設置背景色
ax.set_facecolor('#333333')
fig.set_facecolor('#333333')

# 圖層1:緩沖區輪廓
ax = (
    sf_bounds
    .plot(ax=ax, facecolor='none', edgecolor='#cccccc', linewidth=1)
)

# 圖層2:帶有樹木統計信息的社區面
ax = (
    sf_trees
    .plot(color=sf_trees['顏色'], edgecolor='#333333',
          linewidth=0.5, ax=ax)
)

# 圖層3:osm路網
ax = (
    roads
    .plot(linewidth=0.05, edgecolor='#3c3d3d',
          ax=ax)
)

# 設置x軸
ax.set_xticks([-122.5, -122.45, -122.4, -122.35])
ax.set_xticklabels(['122.5°W', '122.45°W', '122.4°W', '122.35°W'])

# 設置y軸
ax.set_yticks([37.72, 37.74, 37.76, 37.78, 37.8, 37.82])
ax.set_yticklabels(['37.72°N', '37.74°N', '37.76°N', '37.78°N', '37.8°N', '37.82°N'])

# 設置坐標軸樣式
ax.tick_params(axis='both', labelcolor='#737373', color='none', labelsize=8)

# 隱藏周圍的spines線條
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_color('none')

# 導出圖像
fig.savefig('圖4.png', dpi=600, bbox_inches='tight')

如何用Python來仿制一張R語言的數據可視化圖

「輔助視覺元素的添加」

接下來我們只需要補充上各種點睛之筆的小元素即可,其中值得一提的是下方的圖例我們用inset_axes()插入子圖的方式靈活實現。

并且外部字體文件的使用也是很添彩的,我們這里就分別在「標題」「刻度標簽」處使用到了兩種特殊的字體(你可以在開頭的Github倉庫找到我用到的所有字體文件):

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

# 設置背景色
ax.set_facecolor('#333333')
fig.set_facecolor('#333333')

# 圖層1:緩沖區輪廓
ax = (
    sf_bounds
    .plot(ax=ax, facecolor='none', edgecolor='#cccccc', linewidth=1)
)

# 圖層2:帶有樹木統計信息的社區面
ax = (
    sf_trees
    .plot(color=sf_trees['顏色'], edgecolor='#333333',
          linewidth=0.5, ax=ax)
)

# 圖層3:osm路網
ax = (
    roads
    .plot(linewidth=0.05, edgecolor='#3c3d3d',
          ax=ax)
)

# 設置x軸
ax.set_xticks([-122.5, -122.45, -122.4, -122.35])
ax.set_xticklabels(['122.5°W', '122.45°W', '122.4°W', '122.35°W'])

# 設置y軸
ax.set_yticks([37.72, 37.74, 37.76, 37.78, 37.8, 37.82])
ax.set_yticklabels(['37.72°N', '37.74°N', '37.76°N', '37.78°N', '37.8°N', '37.82°N'])

# 設置坐標軸樣式
ax.tick_params(axis='both', labelcolor='#737373', color='none', labelsize=8)

# 隱藏周圍的spines線條
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_color('none')

# 以插入子圖的方式添加下方圖例
ax_bar = ax.inset_axes((0.25, -0.12, 0.5, 0.015))
ax_bar.set_facecolor('#333333')
ax_bar.spines['left'].set_color('none')
ax_bar.spines['right'].set_color('none')
ax_bar.spines['top'].set_color('none')
ax_bar.spines['bottom'].set_color('none')

ax_bar.bar(range(5), [1]*5, width=0.975, color=['#e4f1e1', '#c0dfd1', '#67a9a2', '#3b8383', '#145e64'])
ax_bar.set_yticks([])
ax_bar.set_xticks([i+0.5 for i in range(4)])
ax_bar.set_xticklabels(['2500', '5000', '7500', '10000'], 
                       fontdict={'fontproperties': fm.FontProperties(fname="RobotoCondensed-Regular.ttf")})
ax_bar.tick_params(color='none', labelcolor='#ffffff', labelsize=8, pad=0)

ax.set_title('Street trees of San Francisco', 
             fontsize=24,
             color='#ffffff',
             pad=40,
             fontproperties=fm.FontProperties(fname="Amaranth-Bold.ttf"))

ax.text(0.5, 1.08, '''There are a total of 192987 trees in San Francisco regrouped into 571 species.
The district with the most number of trees is Mission whereas the one with
the least number of trees is LincoLn Park / Ft. Miley.''', transform=ax.transAxes, ma='center',
        ha='center', va='top', color='#ffffff')

ax.text(0.5, -0.22, 'Visualization by CNFeffery', fontsize=8,
        color='#737373', ha='center', transform=ax.transAxes)

# 導出圖像
fig.savefig('圖5.png', dpi=600, bbox_inches='tight')

關于如何用Python來仿制一張R語言的數據可視化圖問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆化县| 肥乡县| 安平县| 娄底市| 大新县| 筠连县| 靖宇县| 肇东市| 花莲市| 仙居县| 英超| 蛟河市| 平顶山市| 东海县| 公安县| 新和县| 乌海市| 鹤峰县| 邵阳县| 莱州市| 仲巴县| 唐山市| 中卫市| 永年县| 斗六市| 洛扎县| 子洲县| 石门县| 安溪县| 安平县| 永城市| 观塘区| 会同县| 尚义县| 舞钢市| 长白| 虞城县| 瑞安市| 邯郸市| 上栗县| 同德县|