Matplotlib绘图基础

1、散点图

绘制散点图是数据可视化中非常常见的操作,它用于显示两组数据之间的关系。Matplotlib 提供了 plt.scatter() 函数,可以轻松绘制散点图。以下是一个基础的散点图示例代码,并包含了一些优化可视化呈现的技巧。

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
np.random.seed(0)  # 设置随机种子以保证结果一致
x = np.random.rand(50) * 10  # 生成 50 个 0 到 10 之间的随机数
y = np.random.rand(50) * 10  # 生成 50 个 0 到 10 之间的随机数

# 绘制基础散点图
plt.figure(figsize=(8, 6))  # 设置图像大小
plt.scatter(x, y, color='blue')  # 绘制散点图,点为蓝色
plt.xlabel('X-axis')  # 设置 x 轴标签
plt.ylabel('Y-axis')  # 设置 y 轴标签
plt.title('Basic Scatter Plot')  # 设置图的标题
plt.grid(True)  # 显示网格线
plt.show()

 

1.1散点图的优化

如何优化散点图的可视化呈现:

  1. 改变点的大小和颜色:

    • 使用 s 参数调整点的大小,使用 c 参数改变颜色,颜色可以根据数据的另一列进行映射。
  2. 添加颜色映射(colormap):

    • 使用 ccmap 参数,为点设置颜色映射,颜色可以反映数据的数值大小。
  3. 增加透明度:

    • 使用 alpha 参数设置点的透明度(范围 0 到 1),防止点重叠时看不清楚。
  4. 为点添加边框:

    • 使用 edgecolor 参数为每个点添加边框,使得点更加明显。
  5. 添加数据点的注释:

    • 使用 plt.text() 在特定点旁边添加注释,方便展示数据含义。
  6. 调整坐标轴范围和样式:

    • 使用 plt.xlim()plt.ylim() 来调整坐标轴的显示范围。
import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
np.random.seed(0)  # 设置随机种子以保证结果一致
x = np.random.rand(50) * 10  # 生成 50 个 0 到 10 之间的随机数
y = np.random.rand(50) * 10  # 生成 50 个 0 到 10 之间的随机数
sizes = np.random.rand(50) * 300  # 随机生成点的大小
colors = np.random.rand(50)  # 随机生成颜色映射值

# 绘制优化后的散点图
plt.figure(figsize=(10, 8))  # 设置图像大小
scatter = plt.scatter(x, y, s=sizes, c=colors, cmap='viridis', alpha=0.7, edgecolor='k')  # 绘制散点图
plt.colorbar(scatter, label='Color Scale')  # 添加颜色条
plt.xlabel('X-axis')  # 设置 x 轴标签
plt.ylabel('Y-axis')  # 设置 y 轴标签
plt.title('Enhanced Scatter Plot')  # 设置图的标题
plt.grid(True)  # 显示网格线

# 调整坐标轴范围
plt.xlim(0, 10)
plt.ylim(0, 10)

# 显示图形
plt.show()

 

接下来我们用一个实际的例子来展示散点图的应用:

import matplotlib.pyplot as plt
import numpy as np

# 示例数据:房屋面积(平方英尺)和相应的价格(单位:万美元)
area = np.array([750, 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, 1400, 1450])
price = np.array([180, 200, 210, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420, 440])

# 绘制散点图
plt.figure(figsize=(10, 6))  # 设置图像大小
plt.scatter(area, price, s=100, c=price, cmap='coolwarm', alpha=0.7, edgecolor='k')  # 绘制散点图,点的颜色与价格相关

# 设置图表的标题和坐标轴标签
plt.title('House Prices vs. Area', fontsize=16)  # 设置标题
plt.xlabel('Area (Square Feet)', fontsize=14)  # 设置 x 轴标签
plt.ylabel('Price (10,000 USD)', fontsize=14)  # 设置 y 轴标签

# 显示颜色条以指示价格
plt.colorbar(label='Price (10,000 USD)')

# 添加网格线
plt.grid(True, linestyle='--', alpha=0.5)

# 显示绘图
plt.show()

 

Matplotlib 提供了丰富的颜色映射(colormap)选项,可以根据数据特点和视觉需求选择合适的颜色映射。颜色映射用于将数值映射到颜色空间,通过不同的颜色渐变来增强数据的可视化效果。以下是一些常用的颜色映射:

常用的颜色映射(colormap)示例:

  1. viridis:

    • 渐变色从深蓝到黄绿色,视觉效果优秀,色盲友好,常用于连续数据的显示。
  2. plasma:

    • 渐变色从深紫到黄色,色彩鲜艳且具有高对比度。
  3. inferno:

    • 渐变色从深紫到橙黄色,适用于高对比度的场景,尤其适合展示密集数据。
  4. magma:

    • 渐变色从深紫到亮橙色,适合显示连续且高对比度的数据。
  5. cividis:

    • 适合色盲友好的渐变色,从蓝色到黄色,适用于视觉要求高的数据展示。
  6. coolwarm:

    • 渐变色从蓝色到红色,适合展示有正负或冷热对比的数据,如温度、差异等。
  7. Blues:

    • 渐变色从浅蓝到深蓝,适用于单色调的场景。
  8. Reds:

    • 渐变色从浅红到深红,适用于单色调场景,突出数值的高低。
  9. Greens:

    • 渐变色从浅绿到深绿,适合展示自然、环保类数据。
  10. Spectral:

    • 具有多种颜色的渐变,从红到蓝再到绿和黄,色彩丰富,适合分段数据的展示。

1.2散点图的实现 

# 示例数据:汽车的重量和油耗
weight = [1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000]
mpg = [35, 34, 33, 32, 31, 30, 28, 26, 25, 24, 22, 20, 19, 17, 15, 14]

任务:

使用以上数据绘制一个散点图,尝试实现以下要求:

  1. 设置图形大小为 (10, 6)
  2. 绘制散点图,设置点的大小 s=100,透明度 alpha=0.7,为点添加边框 edgecolor='k'
  3. 使用 c=mpg 和适合的 cmap 映射颜色,尝试使用 cmap='coolwarm' 或其他你喜欢的颜色映射。
  4. 为图形添加标题、x 轴和 y 轴标签。
  5. 添加颜色条以解释油耗的数值范围。
  6. 添加网格线来提高图形的可读性。
import matplotlib.pyplot as plt
import numpy as np

# 示例数据:汽车的重量和油耗
weight = [1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000]
mpg = [35, 34, 33, 32, 31, 30, 28, 26, 25, 24, 22, 20, 19, 17, 15, 14]

# 设置图形大小
plt.figure(figsize=(10, 6))

# 绘制散点图
plt.scatter(weight, mpg, s=100, alpha=0.7, edgecolor='k', c=mpg, cmap='coolwarm')

# 设置图表的标题和坐标轴标签
plt.xlabel('Weight (lbs)', fontsize=14)  # 汽车重量,单位是磅
plt.ylabel('MPG (Miles per Gallon)', fontsize=14)  # 油耗,单位是每加仑英里数
plt.title('Car Weight vs. Fuel Efficiency', fontsize=16)  # 图的标题

# 显示颜色条,显示油耗的数值范围
plt.colorbar(label='MPG (Miles per Gallon)')

# 添加网格线
plt.grid(True, linestyle='--', alpha=0.5)

# 显示绘图
plt.show()

 

2、柱状图

柱状图(Bar Chart)是数据可视化中非常常见的图表类型,通常用于比较不同类别的数量或展示数据的变化趋势。下面是绘制柱状图的基础代码,并附有一些优化技巧,帮助你创建更美观和易于理解的柱状图。 

import matplotlib.pyplot as plt
import numpy as np

# 示例数据:类别和相应的值
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 78, 33]

# 设置图形大小
plt.figure(figsize=(10, 6))

# 绘制柱状图
plt.bar(categories, values, color='skyblue', edgecolor='black')

# 设置标题和坐标轴标签
plt.title('Basic Bar Chart', fontsize=16)
plt.xlabel('Categories', fontsize=14)
plt.ylabel('Values', fontsize=14)

# 显示网格线
plt.grid(True, axis='y', linestyle='--', alpha=0.5)

# 显示图形
plt.show()

 

下一步,我们为每个柱子添加标签:

for i, value in enumerate(values):
    plt.text(i, value + 1, str(value), ha='center', fontsize=12)
  • enumerate(values):

    • enumerate() 函数将 values 列表中的每个元素与其索引位置配对。它返回的是一个包含索引和元素值的元组。
    • 例如,values = [23, 45, 56, 78, 33]enumerate(values) 将返回 (0, 23), (1, 45), (2, 56), (3, 78), (4, 33)
  • 循环的作用 (for i, value in enumerate(values)):

    • i 是当前元素的索引(即柱子的 x 轴位置),value 是该柱子的高度(即柱子的 y 轴数值)。
    • 这个循环会遍历 values 列表中的每一个值及其索引,逐个处理柱状图中的每一个柱子。
  • plt.text() 函数:

    • plt.text() 用于在图表的指定位置添加文本。
    • 参数解释:
      • i: 文本的 x 坐标位置,即柱子的索引位置。
      • value + 1: 文本的 y 坐标位置,设置在柱子顶端稍微高出 1 个单位的位置,使得文本不会与柱子重叠。
      • str(value): 显示的文本内容,将当前柱子的数值转换为字符串,以便显示在图表中。
      • ha='center': 水平对齐方式,'center' 表示文本相对于 x 坐标居中对齐。
      • fontsize=12: 设置文本的字体大小,使得标签清晰可读。

这样图像就更加直观了。

 接下来我们展示一个优化后的代码:

import matplotlib.pyplot as plt
import numpy as np

# 示例数据:类别和两个系列的数值
categories = ['A', 'B', 'C', 'D', 'E']  # 类别名称
values = [23, 45, 56, 78, 33]           # 第一个系列的数值
values2 = [20, 35, 55, 70, 30]          # 第二个系列的数值

# 设置图形大小和风格
plt.style.use('ggplot')  # 使用 Matplotlib 内置的 'ggplot' 风格
plt.figure(figsize=(12, 6))  # 设置图形大小为 12x6 英寸

# 绘制分组柱状图
index = np.arange(len(categories))  # 生成类别的索引位置,用于 x 轴上的定位
bar_width = 0.35  # 设置每个柱子的宽度

# 绘制第一个数据系列的柱状图
plt.bar(index, values, bar_width, label='Series 1', color='skyblue', edgecolor='black')
# 绘制第二个数据系列的柱状图,位置向右偏移 bar_width 以便分组
plt.bar(index + bar_width, values2, bar_width, label='Series 2', color='orange', edgecolor='black')

# 为第一个数据系列添加数值标签
for i, value in enumerate(values):
    plt.text(i, value + 1, str(value), ha='center', fontsize=12)
    
# 为第二个数据系列添加数值标签
for i, value in enumerate(values2):
    plt.text(i + bar_width, value + 1, str(value), ha='center', fontsize=12)

# 设置标题和坐标轴
plt.title('Enhanced Bar Chart with Multiple Series', fontsize=16)
plt.xlabel('Categories', fontsize=14)
plt.ylabel('Values', fontsize=14)

# 调整 x 轴的刻度和标签,使其居中于两组柱子之间
plt.xticks(index + bar_width / 2, categories)

# 显示图例,用于区分不同的数据系列
plt.legend()

# 自动调整布局,避免元素重叠
plt.tight_layout()

# 显示绘图
plt.show()

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/881720.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

istio中如何使用serviceentry引入外部服务

假设需要引入一个外部服务,外部服务ip为10.10.102.90,端口为32033. 引入到istio中后,我想通过域名gindemo.test.ch:9090来访问这个服务。 serviceentry yaml内容如下: apiVersion: networking.istio.io/v1beta1 kind: ServiceEn…

53 语言模型(和之后用来训练语言模型的数据集)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录理论部分使用计数来建模N元语法总结 代码读取长序列数据随机采样顺序分区 小结练习 理论部分 在上一部分中,我们了解了如何将文本数据映射为词元,以及将这些词元可以视为一系列离散的观测,例如单词或字符…

构建与优化自定义进程池

1. 什么是进程池? 简单来说,进程池就是预先创建固定数量的工作进程,通过设计任务队列或调度算法来分配任务给空闲的进程 —— 实现“负载均衡”。 2. 进程池框架设计 枚举错误返回值: enum {UsageError 1,ArgError,PipeError };…

基于51单片机的汽车倒车防撞报警器系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 本课题基于微控制器控制器, 设计一款汽车倒车防撞报警器系统。 要求: 要求:1.配有距离, 用于把车和障碍物之间的距离信号送入控制器。 2.配有报警系…

如何安装和注册 GitLab Runner

如何安装和注册 GitLab Runner GitLab Runner 是一个用于运行 GitLab CI/CD (Continuous Integration/Continuous Deployment) 作业。它是一个与 GitLab 配合使用的应用程序,可以在本地或云中运行。Runner 可以执行不同类型的作业,例如编译代码、运行测…

传统软件应用技术的价值转换率越来越低

为什么感觉到卷?可能的一个原因是大家都在进步,用户和竞争对手也在进步,而自己却没有进步,也谈不上思维模式的改变。 我们不谈理论、不谈理想、不谈市场环境不好,就谈与用户接触过程的案例,这是最有说服力的…

传输层协议(TCP和UDP)

目录 一、UDP 1、UDPAPI 2、UDPAPI的使用 二、TCP 1、TCPAPI 2、TCP的相关特性 2.1 确认应答 2.2 超时重传 2.3 连接管理(三次握手,四次挥手) 2.4 滑动窗口 2.5 流量控制 2.6 拥塞控制 2.7 延时应答 2.8 捎带应答 2.9 面向字节…

1.3 计算机网络的分类

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言一、按分布范围分类二、按传输技术分类三、按拓扑结构分类四、按使用者分类五、按传输介质分类 前言 计算机网络根据不同的标准可以被分为多种类型,本章从分布…

SqlSugar的where条件中使用可空类型报语法错误

SQLServer数据表中有两列可空列,均为数值类型,同时在数据库中录入测试数据,Age和Height列均部分有值。   使用SqlSugar的DbFirst功能生成数据库表类,其中Age、Height属性均为可空类型。   当Where函数中的检索条件较多时&a…

【Elasticsearch系列四】ELK Stack

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

idea中java及java web项目的常见问题

1、乱码问题,主要有几处地方,需要检查。 ①确保文件编码,其实主要就是在idea启动文件中,增加了 -Dfile.encodingUTF-8的设置 ②编辑器默认编码,都改为UTF-8 ③Tomcat的运行配置,编码也改为UTF-8,同样使用…

Wpf使用NLog将日志输出到LogViewer

1 LogViewer LogViewer是通过UDP传输的高性能实时log查看器。 具有一下特性: 通过UDP读取日志通过文件导入日志导出日志到一个文件中排序、过滤(日志树,日志等级)和查找突出显示搜索文本从UPD接收日志时忽略IP地址列表多接收器支…

RabbitMQ08_保证消息可靠性

保证消息可靠性 一、生产者可靠性1、生产者重连机制(防止网络波动)2、生产者确认机制Publisher Return 确认机制Publisher Confirm 确认机制 二、MQ 可靠性1、数据持久化交换机、队列持久化消息持久化 2、Lazy Queue 惰性队列 三、消费者可靠性1、消费者…

【吊打面试官系列-MySQL面试题】MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么?

大家好,我是锋哥。今天分享关于【MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么?】面试题,希望对大家有帮助; MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么? 以下是 MySQL_fetch_array 和 MySQL_fe…

[数据结构与算法·C++] 笔记 1.4 算法复杂性分析

1.4 算法复杂性分析 算法的渐进分析 数据规模 n 逐步增大时, f(n)的增长趋势当 n 增大到一定值以后,计算公式中影响最大的就是 n 的幂次最高的项其他的常数项和低幂次项都可以忽略 大O表示法 函数f,g定义域为自然数,值域非负实数集定义: …

C++/Qt 集成 AutoHotkey

C/Qt 集成 AutoHotkey 前言AutoHotkey 介绍 方案一:子进程启动编写AutoHotkey脚本准备 AutoHotkey 运行环境编写 C/Qt 代码 方案二:显式动态链接方案探索编译动态链接库集成到C工程关于AutoHotkeyDll.dll中的函数原型 总结 前言 上一篇介绍了AutoHotkey…

动手学深度学习(李沐)PyTorch 第 1 章 引言

在线电子书 深度学习介绍 安装 使用conda环境 conda create -n d2l-zh python3.8 pip安装需要的包 pip install jupyter d2l torch torchvision下载代码并执行 wget https://zh-v2.d2l.ai/d2l-zh.zip unzip d2l-zh.zip jupyter notebookpip install rise如果不想使用jupyt…

Ubuntu20-xrdp与Windows-mstsc远程桌面连接

前期准备 两者在同一网段,网线连接。ubuntu端 sudo adduser yu //输入密码和确认密码,后面一路回车,新建用户yu,确保用户没有被登录 sudo apt install xrdp //安装xrdp sudo systemctl status xrdp //查看xrdp服务状态 sudo…

《飞机大战游戏》实训项目(Java GUI实现)(设计模式)(简易)

目录 一、最终实现后,效果如下。 (1)简单介绍本游戏项目(待完善) (2)运行效果图(具体大家自己可以试) 初始运行情况。 手动更换背景图。 通过子弹攻击敌机,累…

828华为云征文|Flexus云服务器X实例部署宝塔运维面板

本次华为云Flexus云服务器X实例部署宝塔运维面板教学,这次是推陈出新啊 之前的云耀云服务器L实例已经很不错了,大力赞叹华为云的 同时感谢华为云提供优惠卷,只能说白嫖真是太棒了 华为云近期正在筹办华为云828企业节活动,90款免…