【Python】—— 如果使用matplotlib做数据可视化
matplotlib做数据可视化
- 相关知识
- 掌握matplotlib的基本使用方法
- 1. 折线图
- 2. 散点图
- 3. 柱状图
- 4. 饼图
- 5. 直方图
- 6. 等高线图
- 7. 图形定制
- 掌握数据处理的基本方法
- 1. 数据筛选
- 2. 缺失值处理
- 3. 异常值处理
- 理解数据可视化的原则和方法
- 1. 选择合适的图表类型
- 2. 避免数据混淆
- 3. 突出重要信息
- 内容
- 1、从网站中选取三个国家的从1960-2022年的GDP值,绘制一幅折线图。
- 方法1
- 方法2
- 2、在一幅图中绘制四幅子图
- 附录
相关知识
掌握matplotlib的基本使用方法
Matplotlib 是一个用于绘制二维图形的 Python 库,广泛用于数据可视化。它提供了一个类似于 MATLAB 的绘图接口,使得用户可以轻松地创建各种静态、动态、交互式的图形。
以下是 Matplotlib 的一些主要特点和组件:
-
简单易用: Matplotlib 提供了一个简单的 API,使得用户可以轻松创建图形,而无需深入了解图形学或复杂的绘图原理。
-
多种图形类型: Matplotlib 支持各种常见的图形类型,包括线图、散点图、柱状图、饼图、等高线图等。
-
定制性强: 用户可以对图形的各个方面进行精细的定制,包括线型、颜色、标签、标题等。
-
支持 LaTeX: Matplotlib 支持使用 LaTeX 标记在图形中添加数学公式。
-
多平台支持: Matplotlib 可以在多个平台上运行,包括 Windows、Linux 和 macOS。
-
图形导出: 用户可以将图形以多种格式导出,包括 PNG、PDF、SVG 等。
-
面向对象的接口: Matplotlib 提供了一个面向对象的接口,允许用户更灵活地控制图形的各个元素。
Matplotlib 的强大之处在于它的灵活性和广泛的应用领域,从简单的图形到复杂的数据可视化,都可以通过 Matplotlib 轻松实现。
以下是 Matplotlib 的一些主要功能:
1. 折线图
使用 plot 函数可以创建折线图,用于表示数据的趋势和变化。
import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]plt.plot(x, y)
plt.show()
2. 散点图
使用 scatter 函数可以创建散点图,用于显示两个变量之间的关系。
import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]plt.scatter(x, y)
plt.show()
3. 柱状图
使用 bar 或 barh 函数可以创建垂直或水平的柱状图,用于比较不同类别的数据。
import matplotlib.pyplot as pltcategories = ['A', 'B', 'C', 'D']
values = [3, 7, 2, 5]plt.bar(categories, values)
plt.show()
4. 饼图
使用 pie 函数可以创建饼图,用于显示各部分在整体中的占比。
import matplotlib.pyplot as pltsizes = [30, 20, 25, 15, 10]plt.pie(sizes, labels=['A', 'B', 'C', 'D', 'E'])
plt.show()
5. 直方图
使用 hist 函数可以创建直方图,用于显示数据的分布情况。
import matplotlib.pyplot as pltdata = [1, 2, 2, 3, 3, 3, 4, 4, 5]plt.hist(data, bins=5)
plt.show()
6. 等高线图
使用 contour 函数可以创建等高线图,用于表示二维数据的等高线。
import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))plt.contour(X, Y, Z, cmap='viridis')
plt.show()
7. 图形定制
用户可以定制图形的各个方面,包括颜色、线型、标签、标题等。
import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]plt.plot(x, y, color='red', linestyle='--', marker='o', label='Line A')
plt.title('Customized Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.legend()
plt.show()
这些只是 Matplotlib 的一小部分功能,该库还支持更多高级的功能,如图形的注释、图形的嵌套、3D 图形、动画等。Matplotlib 的文档和示例库是学习和探索更多功能的好资源。
访问以下链接https://matplotlib.org/stable/gallery/index.html可以了解到更多功能并获取官方教程。
掌握数据处理的基本方法
1. 数据筛选
使用 Pandas 进行数据筛选,例如选择满足某个条件的行。
import pandas as pd# 假设 df 是一个数据框
filtered_data = df[df['column'] > 10]
2. 缺失值处理
处理缺失值,可以使用 Pandas 的 dropna() 或 fillna() 方法。
import pandas as pd# 删除包含缺失值的行
df.dropna()# 使用特定值填充缺失值
df.fillna(0)
3. 异常值处理
识别和处理异常值,可以通过统计方法或可视化方法来检测异常值。
import pandas as pd# 使用描述性统计分析识别异常值
mean = df['column'].mean()
std = df['column'].std()
threshold = mean + 3 * std# 删除超过阈值的异常值
df = df[df['column'] < threshold]
理解数据可视化的原则和方法
1. 选择合适的图表类型
根据数据的特性和目标,选择合适的图表类型,例如使用折线图表示趋势,柱状图比较类别等。
2. 避免数据混淆
确保图表清晰易懂,避免使用过于复杂的图表或颜色,以防止数据混淆。
3. 突出重要信息
通过调整图表的样式,突出重要的数据信息,如使用颜色或标签来强调关键数据点。
能够根据实际需求选择合适的图表类型
选择适当的图表类型,考虑数据的结构和目标,例如使用散点图展示相关性,饼图表示比例,柱状图比较类别等。能够根据实际需求调整图表的属性和样式
根据图表的目标和观众,调整图表的属性和样式,包括颜色、线型、标签、标题等,以提高图表的可读性和美观性。
内容
1、从网站中选取三个国家的从1960-2022年的GDP值,绘制一幅折线图。
数据来自网站,点击以下链接可查看原网页:
https://www.kylc.com/stats/global/yearly_overview/g_gdp.html
网址内容截图(查看数据):

方法1
部分代码截图:

运行结果(折线图):

方法2
部分代码截图:

运行结果(折线图):

2、在一幅图中绘制四幅子图
- 反映国内或者国际上主要手机品牌在某年或者某季度的销量的饼图。
- 反映广东省各市的GDP。横
- 广州市房价平均值的柱状图。
- 绘制广东省2022年的高考一分段的散点图。
部分代码截图:

运行结果:

附录
- 从网站中选取三个国家的从1960-2022年的GDP值,绘制一幅折线图。:
方法1:
import os
import matplotlib.pyplot as plt
import pandas as pd# 设置支持中文的Matplotlib字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 读取数据
file_path = os.path.abspath('GDP.csv')
data = pd.read_csv(file_path, encoding='gbk')
# 提取数据
years = data['年份']
usa_gdp = data['美国GDP(万亿)']
uk_gdp = data['英国GDP(万亿)']
china_gdp = data['中国GDP (万亿)']
# 绘制折线图
fig, ax = plt.subplots()
ax.plot(years, usa_gdp, Label='美国')
ax.plot(years, uk_gdp, Label='英国')
ax.plot(years, china_gdp, label='中国')
ax.set_xlabel('年份')
ax.set_ylabel('GDP (万亿)')
ax.set_title('1960-2022年各国GDP')
ax.Tegend()
plt.show()
方法2:
import urllib.request
import re
import pandas as pd
import csv
import matplotlib.pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
#网页数据分析
def getdata(url):req = urllib.request.Request(url)req.add_header('User-Agent',' Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36')#设置请求头信息data = urllib.request.urlopen(req).read().decode('utf-8')str1 = str(data)pat = '''<tr><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)\(.*?</td><td>.*?</td></tr>'''#网页分析进行选定内容,正则表达result = re.compile(pat).findall(str1)return result
#网页数据存储
def datastorage():for i in range(1960, 2023):print('正在收集第%d年数据' % i)rank = []country = []zhou = []total = []url = 'https://www.kuaiyilicai.com/stats/global/yearly/g_gdp/' + str(i) + '.html'data = getdata(url)for j in range(0, len(data)):rank.append(data[j][0])#当页排名country.append(data[j][1])#国家zhou.append(data[j][2])#所在州total.append(data[j][3])#GDPdataframe = pd.DataFrame({'排名': rank, '国家/地区': country, '所在洲': zhou, 'GDP(美元计)': total})dataframe.to_csv(str(i) + "年世界gdp排名.csv", index=False, sep=',', encoding="utf_8_sig", mode="a+")print(i, '年数据收集完成')
datastorage()
#文字转数字
def str2value(valueStr):valueStr = re.sub(r'亿', '00000000', valueStr) # 将"亿"替换为8个零valueStr = re.sub(r'万', '0000', valueStr) # 将"万"替换为4个零valueStr = re.sub(r'\.|,', '', valueStr) # 去除小数点和逗号return int(valueStr)
timegdp = list(range(1960,2023))
zhongdata = []
meidata = []
yingdata = []
print("打开文件,搜索需要内容中.....")
for i in range(1960,2023):csv_reader = csv.reader(open(str(i) + "年世界gdp排名.csv",encoding="utf-8"))for row in csv_reader:if row[1]=='中国':zhongdata.append(row[3])if row[1]=='美国':meidata.append(row[3])if row[1]=='英国':yingdata.append(row[3])
result = [str2value(valueStr) for valueStr in zhongdata]
result1 = [str2value(valueStr) for valueStr in meidata]
result2 = [str2value(valueStr) for valueStr in yingdata]
# 画图
plt.plot(timegdp, result, 'b*--', alpha=0.5, linewidth=1, label='PRC')
plt.plot(timegdp, result1, 'rs--', alpha=0.5, linewidth=1, label='USA')
plt.plot(timegdp, result2, 'go--', alpha=0.5, linewidth=1, label='UK')
plt.legend() # 显示上面的label
plt.xlabel('时间')
plt.ylabel('GDP') # accuracy
# plt.ylim(-1,1)#仅设置y轴坐标范围
plt.show()
- 在一幅图中绘制四幅子图
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pdmatplotlib.use('TkAgg')
# 设置Matplotlib的默认字体,并忽略警告
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = Falsephone_brands = ['Apple(苹果)', 'samsung(三星)', 'Xiaomi(小米)', 'OPPO(欧珀)', 'vivo(维沃)', '其他']
phone_sales = [19, 22, 13, 9, 9, 28]cities = ['深圳', '广州', '佛山', '东莞', '惠州', '珠海', '茂名', '江门', '湛江', '中山', '汕头', '肇庆', '揭阳','清远', '韶关', '阳江', '汕尾', '梅州', '潮州', '河源', '云浮']
gdp_values = [32387.68, 28839, 12698.39, 11200.32, 5401.24, 4045.45, 3904.63, 3773.41, 3712.56, 3631.28, 3017.44,2705.05, 2260.98, 2032.02, 1563.93, 1535.02, 1322.02, 1318.21, 1312.98, 1294.57, 1162.43]districts = ['天河区', '越秀区', '海珠区', '荔湾区', '白云区', '番禺区', '黄埔区', '南沙区', '增城区', '花都区','从化区']
house_prices = [74723, 72121, 58268, 50631, 49639, 38788, 28890, 23567, 21942, 19420, 16160]# 柱状图
fig, axes = plt.subplots(2, 2, figsize=(18, 10))# 饼图 - 手机销量
axes[0, 0].pie(phone_sales, labels=phone_brands, autopct='%1.1f%%', startangle=90)
axes[0, 0].set_title('2022 年全年手机市场销售份额')# 柱状图 - GDP
axes[0, 1].bar(cities, gdp_values, color='skyblue')
axes[0, 1].set_title('2022年广东省21市GDP排名')
axes[0, 1].set_xlabel('城市')
axes[0, 1].set_ylabel('GDP (亿元)')# 柱状图 - 房价
axes[1, 0].barh(districts, house_prices, color='salmon')
axes[1, 0].set_title('广州市各区平均房价')
axes[1, 0].set_xlabel('房价 (元/平方米)')
axes[1, 0].set_ylabel('区域')# 散点图 - 高考一分段
df = pd.read_excel('分数.xlsx', engine='openpyxl')
# # 显示数据
# print(df)
# 提取需要绘制的数据列
province_scores = df['分数'] # np.random.randint(400, 700, 100)
province_ranks = df['人数'] # np.random.randint(1, 101, 100)axes[1, 1].scatter(province_scores, province_ranks, color='green', alpha=0.4)
axes[1, 1].set_title('广东省2022年历史类一分一段统计')
axes[1, 1].set_xlabel('分数')
axes[1, 1].set_ylabel('人数')
# 设置X轴刻度位置和标签
xticks = np.arange(0, 800, 50)
axes[1, 1].set_xticks(xticks)
axes[1, 1].set_xticklabels([str(x) for x in xticks])
# 设置Y轴刻度位置和标签
yticks = np.arange(0, 1300, 100)
axes[1, 1].set_yticks(yticks)
axes[1, 1].set_yticklabels([str(y) for y in yticks])plt.tight_layout()
plt.show()
相关文章:
【Python】—— 如果使用matplotlib做数据可视化
matplotlib做数据可视化 相关知识掌握matplotlib的基本使用方法1. 折线图2. 散点图3. 柱状图4. 饼图5. 直方图6. 等高线图7. 图形定制 掌握数据处理的基本方法1. 数据筛选2. 缺失值处理3. 异常值处理 理解数据可视化的原则和方法1. 选择合适的图表类型2. 避免数据混淆3. 突出重…...
【MyBatis-Plus】多数据源分页配置(低版本暂时就支持一种(可选),高版本多支持)
【转载】一、Mybatis Plus 3.4 版本之后分页插件的变化 1、地址 Mybatis Plus 3.4版本之后分页插件的变化 2、内容 1、MybatisPlusInterceptor 从 Mybatis Plus 3.4.0 版本开始,不再使用旧版本的 PaginationInterceptor,而是使用 MybatisPlusInterce…...
Linux 特殊符号
目录 1. # 注释 2. ;命令分隔符 3. .. 上级目录 4. . 当前目录 5. " " 换行,解析变量 6. 换行,不解析变量 7. \ 和 / 8. !历史命令调用,取反 9. * 通配符 10. $ 调用变量 11. | 管道 12. || …...
TDengine 签约中船九院,助力航运业智能化转型升级
在大数据时代背景下,船舶智能化已经成为船舶制造与航运领域发展的必然趋势。智能船舶作为《中国制造 2025》中明确重点发展的领域,代表了船舶未来的方向,对于航运业的转型升级至关重要。其中,大数据的处理和运用成为船舶智能化转型…...
upload-labs笔记
简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共21关,每一关都包含着不同上传方式。 文件上传漏洞是指: Web 服务器允许用户将文件上传至其…...
Android Studio好用的插件推荐
目录 一、插件推荐 二、如何下载 1.点击File—>Settings 2.点击Plugins然后进行搜索下载 三、Android Studio 模板 一、插件推荐 这个插件可以为您自动生成Parcelable代码。Parcelable是一种用于在Android组件之间传递自定义对象的机制,但手动编写Parcela…...
第三十九章 其他特殊主题 - 映射 IRIS ID 以供导出
文章目录 第三十九章 其他特殊主题 - 映射 IRIS ID 以供导出控制导出时的命名空间前缀XMLPREFIX 第三十九章 其他特殊主题 - 映射 IRIS ID 以供导出 当在顶层映射 IRIS 对象(而不是作为另一个对象的属性)时,其内部 ID、OID 和全局唯一 ID 不…...
文件操作(下)
标题的顺序是接着之前写的,希望这篇博客对你有帮助 七. 随机读写函数 实际上,无论是读还是写,在一次调用顺序读写函数,文件指针会移到已经读过或者写过的下一个位置,从那个位置开始下一次读和写(在文件没有…...
面试必问-vue3中ref与这个reactive的区别
ref和reactive是Vue 3中两种不同的响应式数据处理方式。 ref:ref函数可以将普通的Javascript值转换为一个响应式引用。它返回一个包含.value属性的对象,可以通过读取或修改.value来操作引用的值。当引用的值发生变化时,Vue会自动追踪依赖并更…...
网络(九)三层路由、DHCP以及VRRP协议介绍
目录 一、三层路由 1. 定义 2. 交换原理 3. 操作演示 3.1 图示 3.2 LSW1新建vlan10、20、30,分别对应123接口均为access类型,接口4为trunkl类型,允许所有vlan通过 3.3 LSW2新建vlan10、20、30,配置接口1为trunk类型&…...
深度学习 Day19——P8YOLOv5-C3模块实现
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU(如果设备上支持GPU就使用GPU,否则使用C…...
轻量封装WebGPU渲染系统示例<51>- 视差贴图(Parallax Map)(源码)
视差纹理是一种片段着色阶段增强材质表面凹凸细节的技术。 这里在WebGPU的实时渲染材质管线中实现了视差贴图计算,以便增强相关的纹理细节表现力。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/Para…...
YOLOv8改进 | 2023主干篇 | 华为最新VanillaNet主干替换Backbone实现大幅度长点
一、本文介绍 本文给大家来的改进机制是华为最新VanillaNet网络,其是今年最新推出的主干网络,VanillaNet是一种注重极简主义和效率的神经网络架构。它的设计简单,层数较少,避免了像深度架构和自注意力这样的复杂操作(需要注意的是…...
Leetcode 376 摆动序列
题意理解: 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 如果是摆动序列,前后差值呈正负交替出现 为保证摆动序列尽可能的长,我们可以尽可能的保留峰值,,删除上下坡的中间值&…...
51单片机控制1602LCD显示屏输出自定义字符二
51单片机控制1602LCD显示屏输出自定义字符二 1.概述 1602LCD除了内置的字符外还提供自定义字符功能,当内置的字符中没有我们想要输出的字符时,我们就可以自己创造字符让他显示,下面介绍1602如何创建自定义字符。 2.1602LCD创建字符原理 自…...
HarmonyOS自学-Day2(@Builder装饰器)
目录 文章声明⭐⭐⭐让我们开始今天的学习吧!Builder装饰器:自定义构建函数Builder介绍Builder使用说明自定义组件中创建自定义构建函数全局自定义构建函数 Builder参数传递规则按引用传递参数按值传递参数 文章声明⭐⭐⭐ 该文章为我(有编程…...
bottom-up-attention-vqa-master 成功复现!!!
代码地址 1、create_dictionary.py 建立词典和使用预训练的glove向量 (1)create_dictionary() 遍历每个question文件取出所关注的question部分,qs 遍历qs,对每个问题的文本内容进行分词,并将分词结果添加到字典中&…...
BigDecimal中divide方法详解
BigDecimal中divide方法详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一起深入探讨Java中BigDecimal的divide方法,揭开这个…...
视频推拉流EasyDSS互联网直播/点播平台构建户外无人机航拍直播解决方案
一、背景分析 近几年,国内无人机市场随着航拍等业务走进大众,出现爆发式增长。无人机除了在民用方面的应用越来越多,在其他领域也已经开始广泛应用,比如公共安全、应急搜救、农林、环保、交通 、通信、气象、影视航拍等。无人机使…...
行为型设计模式-策略模式(Strategy Pattern)
策略模式 策略模式:百度百科中引述为:指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
