当前位置:首页 > 科技  > 软件

一图胜千言!深度掌握 Python 绘图

来源: 责编: 时间:2024-05-29 08:56:34 244观看
导读据可视化是数据科学家传达洞见和讲述数据故事的关键工具。作为 Python 开发者,我们拥有丰富的可视化库和工具,能够创建各种引人入胜的图表。本文将探索一些鲜为人知但实用的可视化类型,如桑基图(Sankey Diagrams)、脊线

据可视化是数据科学家传达洞见和讲述数据故事的关键工具。作为 Python 开发者,我们拥有丰富的可视化库和工具,能够创建各种引人入胜的图表。本文将探索一些鲜为人知但实用的可视化类型,如桑基图(Sankey Diagrams)、脊线图(Ridge Plots)、内嵌图(Insets)、雷达图(Radar Chart)和词云图(Word Cloud Plots)。我们将主要使用流行的 Matplotlib、Seaborn 和 Plotly 这些 Python 库来实现这些有趣的可视化效果,让你的数据讲述更加生动有趣。18I28资讯网——每日最新资讯28at.com

我们将使用形状、大小、颜色、方向、面积和标记符号等属性,为十种不同的使用案例创建绘图。在每个使用案例中,我们的目标都是创建有效、高效和美观的可视化效果。描述这些词语在图表中的含义如下:18I28资讯网——每日最新资讯28at.com

(a) 有效:图表中包含了所有需要传达的信息(b) 高效:图表中没有多余的数据(c) 美观:图表以清晰的方式展示数据,吸引注意力18I28资讯网——每日最新资讯28at.com

所有图表都是二维图,因为从效率和效果的角度来看,二维图比三维图更清晰易懂,同时更容易描绘距离。文中还将介绍每个用例的代码,并讨论代码和图表中的要点。18I28资讯网——每日最新资讯28at.com

用例 1

描述大学之间学生交流流动的桑基图。

这些图展示了资源流动的情况,下面的代码展示了用例的实现。 字符 "A" 代表第一所大学,字符 "B" 代表第二所大学。 数字 3、4、5 分别代表不同的系,即{Statistics, Math, Physics}。第 25 行创建了一个图表,其中 node 和 link是字典。 node 使用的 label 对象由唯一的 Depts 院系组成,而 link 使用的两个列表分别由 sending"院系的索引和 acepting 院系的索引组成。18I28资讯网——每日最新资讯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来推断。18I28资讯网——每日最新资讯28at.com

我们还注意到,当我们点击节点 "3A" 时,从它发出的箭头会变暗,并显示出与 "3A" 交换学生的其他节点。箭头的粗细与 FlowValues 相对应。总之,桑基图利用箭头的方向和粗细来传递流动信息,并以文字为基础为每个节点形成累积流动。18I28资讯网——每日最新资讯28at.com

图 1. 桑基图显示了两所大学各系之间的学生交流流图 1. 桑基图显示了两所大学各系之间的学生交流流18I28资讯网——每日最新资讯28at.com

用例 2

绘制一家房地产中介公司的房屋销售数据。

一位数据科学家在房地产中介公司工作,机构要求绘制上个月售出房屋信息的二维图。每栋售出的房屋需包含房价、距离市中心、方向、代理佣金和销售代理的公司级别(助理、副总裁、合伙人)的信息。二维图形信息量大,可使用复杂对象描述地块上的每栋房屋。具体来说,使用“笑脸表情符号”实现方法的代码片段如下。18I28资讯网——每日最新资讯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.28at.com/showinfo-26-91360-0.html一图胜千言!深度掌握 Python 绘图

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

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

下一篇: 每个前端开发人员都应该了解的软件工程原理

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的&ldquo;征求意见版&rdquo;:1、取消P序列
  • 苹果公司要求三星和LG Display生产「无边框」OLED iPhone显示屏

    据 The Elec 报道,苹果已要求其供应商为未来的 iPhone 型号开发「无边框」OLED 显示面板。苹果显然已要求三星和 LG Display 开发新的 OLED 显示面
  • 质感不错!OPPO K11渲染图曝光:旗舰IMX890传感器首次下放

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
Top