【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)
策略模式 策略模式:百度百科中引述为:指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
