AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

一圖勝千言!深度掌握 Python 繪圖

來源: 責編: 時間:2024-05-29 08:56:34 144觀看
導讀據可視化是數據科學家傳達洞見和講述數據故事的關鍵工具。作為 Python 開發者,我們擁有豐富的可視化庫和工具,能夠創建各種引人入勝的圖表。本文將探索一些鮮為人知但實用的可視化類型,如桑基圖(Sankey Diagrams)、脊線

據可視化是數據科學家傳達洞見和講述數據故事的關鍵工具。作為 Python 開發者,我們擁有豐富的可視化庫和工具,能夠創建各種引人入勝的圖表。本文將探索一些鮮為人知但實用的可視化類型,如桑基圖(Sankey Diagrams)、脊線圖(Ridge Plots)、內嵌圖(Insets)、雷達圖(Radar Chart)和詞云圖(Word Cloud Plots)。我們將主要使用流行的 Matplotlib、Seaborn 和 Plotly 這些 Python 庫來實現這些有趣的可視化效果,讓你的數據講述更加生動有趣。bRU28資訊網——每日最新資訊28at.com

我們將使用形狀、大小、顏色、方向、面積和標記符號等屬性,為十種不同的使用案例創建繪圖。在每個使用案例中,我們的目標都是創建有效、高效和美觀的可視化效果。描述這些詞語在圖表中的含義如下:bRU28資訊網——每日最新資訊28at.com

(a) 有效:圖表中包含了所有需要傳達的信息(b) 高效:圖表中沒有多余的數據(c) 美觀:圖表以清晰的方式展示數據,吸引注意力bRU28資訊網——每日最新資訊28at.com

所有圖表都是二維圖,因為從效率和效果的角度來看,二維圖比三維圖更清晰易懂,同時更容易描繪距離。文中還將介紹每個用例的代碼,并討論代碼和圖表中的要點。bRU28資訊網——每日最新資訊28at.com

用例 1

描述大學之間學生交流流動的桑基圖。

這些圖展示了資源流動的情況,下面的代碼展示了用例的實現。 字符 "A" 代表第一所大學,字符 "B" 代表第二所大學。 數字 3、4、5 分別代表不同的系,即{Statistics, Math, Physics}。第 25 行創建了一個圖表,其中 node 和 link是字典。 node 使用的 label 對象由唯一的 Depts 院系組成,而 link 使用的兩個列表分別由 sending"院系的索引和 acepting 院系的索引組成。bRU28資訊網——每日最新資訊28at.com

import pandas as pdimport plotly.graph_objects as grdata = {    'Sending_Dept':   ['5A', '4A', '5B', '5A', '4B', '4A', '3A', '3B', '3A', '3B', '3A', '3B'],    'Accepting_Dept': ['4B', '5B', '5A', '5B', '4A', '4B', '5B', '5A', '4B', '4A', '3B', '3A'],    'FlowValue': [1, 3, 4, 3, 4, 4, 1, 1, 3, 2, 5, 3]}df = pd.DataFrame(data)unique_departments = set(df['Sending_Dept']).union(set(df['Accepting_Dept']))Depts = list(unique_departments)Dept_indices = {}for i, dept in enumerate(Depts):    Dept_indices[dept] = isending_indices = []for dept in df['Sending_Dept']:    dept_index = Dept_indices[dept]    sending_indices.append(dept_index)    print(f"Sending indices are: {sending_indices}")accepting_indices = []for dept in df['Accepting_Dept']:    dept_index = Dept_indices[dept]    accepting_indices.append(dept_index)flowvalues = df['FlowValue'].tolist()# Sankey diagramfig = gr.Figure(data=[gr.Sankey(    node=dict( pad=10,thickness=25,line=dict(color="red", width=0.8),label=Depts,),    link=dict(source=sending_indices,target=accepting_indices,value=flowvalues    ))])fig.update_layout(title_text="Sankey Diagram of exchange students flow between University Depts", font_size=12)fig.show()

生成的"桑基圖"圖(1)中,節點3A旁的橙色矩形顯示了光標放置在節點上時的情況。當光標位于節點"3A"上時,我們可以看到A大學3系接受和派遣交換生的頻率。它接受學生1次,派遣學生3次。我們還可以從上面代碼片段中的 data 字典推斷出這一點,因為"3A"在Sending_Dept列表中出現了3次,在Accepting_Dept列表中出現了1次。節點 "3A" 左邊的數字9是它向B大學派出的交換生總數。我們還可以通過在Sending_Dept列表中添加與3A相對應的FlowValues來推斷。bRU28資訊網——每日最新資訊28at.com

我們還注意到,當我們點擊節點 "3A" 時,從它發出的箭頭會變暗,并顯示出與 "3A" 交換學生的其他節點。箭頭的粗細與 FlowValues 相對應。總之,桑基圖利用箭頭的方向和粗細來傳遞流動信息,并以文字為基礎為每個節點形成累積流動。bRU28資訊網——每日最新資訊28at.com

圖 1. 桑基圖顯示了兩所大學各系之間的學生交流流圖 1. 桑基圖顯示了兩所大學各系之間的學生交流流bRU28資訊網——每日最新資訊28at.com

用例 2

繪制一家房地產中介公司的房屋銷售數據。

一位數據科學家在房地產中介公司工作,機構要求繪制上個月售出房屋信息的二維圖。每棟售出的房屋需包含房價、距離市中心、方向、代理傭金和銷售代理的公司級別(助理、副總裁、合伙人)的信息。二維圖形信息量大,可使用復雜對象描述地塊上的每棟房屋。具體來說,使用“笑臉表情符號”實現方法的代碼片段如下。bRU28資訊網——每日最新資訊28at.com

import matplotlib.pyplot as pltimport numpy as npnp.random.seed(125)num_houses = 10distances = np.random.uniform(0, 30, num_houses)  # distance from city centerprices = np.random.uniform(400, 2000, num_houses) * 1000  # sale price in thousandsdirections = np.random.choice(['N', 'S', 'E', 'W'], num_houses)  # direction from city centeragent_levels = np.random.choice([1, 2, 3], num_houses)  # agent's leveldef get_emoji_size(level):    size_map = {1: 250, 2: 380, 3: 700}    return size_map.get(level, 120)  # Increased size for better visibilitydef get_emoji_color_new(price):    if price < 600000:        return 'white'  # Light yellow for $400k-$600k    elif price < 800000:        return 'yellow'        # White for $600k-$800k    elif price < 1000000:        return 'pink'         # Pink for $800k-$1 million    else:        return 'lime'         # Lime for $1 million-$2 milliondef rotate_smiley(direction):    rotation_map = {'N': 0, 'E': 270, 'S': 180, 'W': 90}    return rotation_map.get(direction, 0)  # default no rotation if direction not foundplt.figure(figsize=(12, 8))for i in range(num_houses):    plt.scatter(distances[i], prices[i], s=get_emoji_size(agent_levels[i]),/    c=get_emoji_color_new(prices[i]),                 marker='o', edgecolors='black', alpha=0.8)    plt.text(distances[i], prices[i], " 
                

本文鏈接:http://www.tebozhan.com/showinfo-26-91360-0.html一圖勝千言!深度掌握 Python 繪圖

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python 中 Globals 函數的妙用

下一篇: 每個前端開發人員都應該了解的軟件工程原理

標簽:
  • 熱門焦點
Top