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()

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python 如何调用讯飞星火大模型API

1 讯飞星火简介 讯飞星火是科大讯飞推出的一款先进的人工智能大模型,它具备强大的语言理解和知识问答能力,能够在多种场景中提供智能化服务。2024年6月27日,科大讯飞发布了讯飞星火大模型V4.0版本,全面对标GPT-4 Turbo。现有的模…

某采招网爬虫数据采集逆向

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 目标网站 aHR0cHM6Ly9zZWFyY2guYmlkY2VudGVyLmNvbS5jbi9zZWFyY2g/a2V5d29yZHM9JWU0…

医院伤员消费点餐限制———未来之窗行业应用跨平台架构

一、点餐上限 医院点餐上限具有以下几方面的意义: 1. 控制成本 - 有助于医院合理规划餐饮预算,避免食物的过度供应造成浪费,从而降低餐饮成本。 2. 保障饮食均衡 - 防止患者或陪护人员过度点餐某一类食物,有利于引导合…

基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过ADC0808获取两路电压,通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行仿真,全部资源在页尾,提供…

大数据Flink(一百二十三):五分钟上手Flink MySQL连接器

文章目录 五分钟上手Flink MySQL连接器 一、创建数据库表 二、​​​​​​创建session集群 三、源表查询 四、​​​​​窗口计算 五、​​​​​​结果数据写回数据库 五分钟上手Flink MySQL连接器 MySQL Connector可以将本地或远程的MySQL数据库连接到Flink中&#x…

【Spring Cloud Alibaba】Nacos

【Spring Cloud Alibaba】Nacos 1. 什么是Nacos,它都能干什么?1.1 注册中心演变及其思想1.2 Nacos Discovery1.3 远程调用流程图1.4 一个微服务的流程1.4 常用注册中心对比 2. Nacos Server部署3. Nacos Client搭建附录 1. 什么是Nacos,它都能…

科研绘图系列:R语言误差连线图(errobar linechart)

文章目录 介绍加载R包导入数据数据预处理画图系统信息介绍 误差连线图是一种在数据可视化中常用的图表,它通过在数据点处添加线段(误差线)来表示数据的变异性或不确定性。这些误差线可以基于不同的统计度量,如标准差(Standard Deviation)、标准误差(Standard Error)或…

docker操作的基本命令加容器的基本命令(仅供自己参考)

1、docker build:本地将一个docker文件打包成镜像 2、docker push:将自己打包的镜像传到镜像服务器上 3、docker pull:将镜像服务器上的镜像拉取到本地 4、docker images: 查看镜像服务器上的镜像 5、docker rmi:删…

lte sss加扰序列c产生 MATLAB和c语言实现

参考3GPP 36.211 今日给大家介绍一下LTE SSS信号产生过程中加扰序列c的产生过程以及用MATLAB 和 c语言给大家实现一下: 加扰序列c产生过程如下: 1 首先产生公共的序列x的生成 X的初始值 两个加扰序列c0和c1 c语言实现 void lte_sss_gen_c(char *c,u…

初始Vitis——ZYNQ学习笔记1

一、Vitis是什么 Vitis 统一软件平台的前身为 Xilinx SDK,从 Vivado 2019.2 版本开始, Xilinx SDK 开发环境已统一整合到全功能一体化的 Vitis 中。 Vitis 开发平台除了启动方式、软件界面、使用方法与 SDK 开发平台略有区别,其他操作几乎一模…

针对 Linux SSH 服务器的新攻击:Supershell 恶意软件危害易受攻击的系统

ASEC 研究人员发现了针对保护不善的 Linux SSH 服务器的新攻击。 在其中,黑客使用了用Go编写的 Supershell恶意软件。 该后门使攻击者能够远程控制受感染的系统。 初次感染后,黑客启动扫描仪来寻找其他易受攻击的目标。 据信这些攻击是使用从已受感…

【多模态大模型】Qwen2-VL基本原理和推理部署实战

文章目录 Qwen2-VL基本原理Qwen-VL简要回顾Qwen2-VL的高级升级统一视觉处理方式原生动态分辨率处理(非大图切分方式)多模态旋转位置编码 Qwen2-VL推理实现|代码解析单图推理视觉信息预处理找到能被28整除的最合适size最大最小pixel数边界处理 多模态信息…

docker入门总结(附错误处理,持续更新)

安装、启动、卸载 卸载掉旧版本的 Docker yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engineDocker安装(选其一)…

解决DockerDesktop启动redis后采用PowerShell终端操作

如图: 在启动redis容器后,会计入以下界面 : 在进入执行界面后如图: 是否会觉得界面过于单调,于是想到使用PowerShell来操作。 步骤如下: 这样就能使用PowerShell愉快地敲命令了(颜值是第一生…

[SAP ABAP] 生成表维护视图

SAP由于数据量较大,很多自定义表都需要通过用户自行去维护,一般可以直接在SE16N对数据字典进行维护数据,但不是每个用户都有其操作权限,而且直接在数据字典上操作数据有很高的风险,因此SAP提供了表维护视图生成器&…

蓝桥杯【物联网】零基础到国奖之路:八. RTC

蓝桥杯【物联网】零基础到国奖之路:八. RTC 第一节 RTC的基本知识第二节 CubeMX配置第三节 代码 第一节 RTC的基本知识 RTC是实时时钟,指可以想时钟一样输出实际时间的电子设备,一般会是集成电路,也被称为是时钟芯片。总之,RTC只…

Matlab可视化│常用绘图全家桶

Matlab拥有强大的数据可视化功能,这也是其备受科研大佬们青睐的原因之一。利用Matlab的高级绘图全家桶,你能够轻松地呈现各种复杂数据,并使其变得更加易于阅读和理解。 效果图展示: colormap Matlab还提供了各种各样的颜色&#…

java 获取集合a比集合b多出来的对象元素

public class OrderListEntity {/*** deprecated 对象集合的处理* param aData 集合a* param bData 集合b* return 返回集合a比集合b多出来的部分, 通过id判断*/public static List<OrderListEntity> AHasMoreThanBData(List<OrderListEntity> aData, List<Ord…

机器人时代的“触觉革命”:一块小传感器如何颠覆你的认知?

你是否曾经想过,机器人也能像人类一样有“触觉”?不再是简单的机械操作,而是具备真正的感知能力,能够学会精细的任务。今天我想和你聊聊一种让机器人“长出触觉”的技术:一种小巧的触觉传感器,它的名字叫“AnySkin”。别看它小,它的潜力可一点都不小,或许能彻底改变我们…

如何使用ssm实现基于Web的数字家庭网站设计与实现+vue

TOC ssm661基于Web的数字家庭网站设计与实现vue 绪论 课题背景 身处网络时代&#xff0c;随着网络系统体系发展的不断成熟和完善&#xff0c;人们的生活也随之发生了很大的变化。目前&#xff0c;人们在追求较高物质生活的同时&#xff0c;也在想着如何使自身的精神内涵得到…