首页 > 其他分享 >数据可视化——Matpoltlib库的使用

数据可视化——Matpoltlib库的使用

时间:2024-03-23 23:55:04浏览次数:28  
标签:plt data Matplotlib 可视化 ax np Matpoltlib import 数据

Matplotlib 是一个 Python 的 2D 绘图库,提供了一种绘制可视化图形的简单而有效的方式。它可以创建各种类型的图表,包括线图、散点图、直方图、饼图等,使用户能够以可视化的方式呈现数据。Matplotlib 的主要作用是提供一个灵活、可定制的工具集,用于创建高质量的图形。它使得数据分析、数据可视化、科学研究等领域的用户能够以直观的方式探索数据、观察数据之间的关系,并向他人有效传达数据和分析结果。

一、Matplotlib库概述

Matplotlib-Examples教程大全

1.1 Matplotlib库的应用

科学研究:在科学研究中,Matplotlib 可用于绘制实验数据、模拟结果、统计分析等,帮助研究人员更好地理解数据和发现规律。
数据分析:数据分析师和数据科学家可以使用 Matplotlib 将复杂的数据转化为易于理解的可视化图形,从而更好地探索数据并提取信息。
工程技术:在工程领域,Matplotlib 可用于绘制工程图、曲线图、三维图等,帮助工程师分析数据、设计系统并进行可视化展示。
教育:Matplotlib 可作为教学工具,用于向学生展示各种数学概念、科学原理和统计方法,使学习过程更加生动有趣。
金融:金融领域常用 Matplotlib 来绘制股票走势图、收益曲线等,帮助分析市场走势和制定投资策略。

1.2 Matplotlib库的优缺点

优点:
功能强大:Matplotlib 提供了丰富的绘图功能,用户可以创建各种类型的图表,并对其进行高度定制。
灵活性:Matplotlib 允许用户通过简单的命令和参数调整来控制图形的外观和布局,满足不同需求。
跨平台性:Matplotlib 支持在各种操作系统上运行,包括 Windows、Linux 和 macOS。
社区支持:Matplotlib 拥有庞大的用户社区,用户可以轻松获取支持和解决问题。
缺点:
绘图代码复杂:有时候,绘制复杂图形所需的代码可能相对较长,不够简洁。
默认样式较简单:Matplotlib 的默认样式可能不够吸引人,需要用户进行样式调整以获得更美观的图形。

二、Matplotlib库的作图示例

2.1 饼图Pie

import numpy as np
import matplotlib.pyplot as plt
data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])
# 绘制圆环图 : 外圆半径为 1.5, 楔形宽度为 0.7
plt.pie(data, radius=1.5, wedgeprops={'width': 0.8}, labels=pie_labels,
autopct='%3.1f%%', pctdistance=0.75)
plt.show()

2.2 直方图Hist

import matplotlib.pyplot as plt
import numpy as np
# 10000 个随机数
random_x = np.random.randn(10000)
# 绘制包含 25 个矩形条的直方图  
plt.hist(random_x, bins=25)
plt.show()

2.3 箱线图box

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
data_2018 = np.array([5200, 5254.5, 5283.4, 5107.8, 5443.3, 5550.6,
6400.2, 6404.9, 5483.1, 5330.2, 5543, 6199.9])
data_2017 = np.array([4605.2, 4710.3, 5168.9, 4767.2, 4947, 5203,
 6047.4, 5945.5, 5219.6, 5038.1, 5196.3, 5698.6])
# 绘制箱形图
plt.boxplot([data_2018, data_2017], labels=('2018 年 ', '2017 年 '),
meanline=True, widths=0.5, vert=True, patch_artist=True)
plt.show()

2.4 雷达图radar

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
dim_num = 6
data = np.array([[0.40, 0.32, 0.35, 0.30, 0.30, 0.88],
[0.85, 0.35, 0.30, 0.40, 0.40, 0.30],
[0.43, 0.89, 0.30, 0.28, 0.22, 0.30],
[0.30, 0.25, 0.48, 0.85, 0.45, 0.40],
[0.20, 0.38, 0.87, 0.45, 0.32, 0.28],
[0.34, 0.31, 0.38, 0.40, 0.92, 0.28]])
angles = np.linspace(0, 2 * np.pi, dim_num, endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
data = np.concatenate((data, [data[0]]))
# 维度标签
radar_labels = [' 研究型 (I)', ' 艺术型 (A)', ' 社会型 (S)', 
'企业型 (E)', ' 传统型 (C)', ' 现实型 (R)']
radar_labels = np.concatenate((radar_labels, [radar_labels[0]]))
# 绘制雷达图
plt.polar(angles, data)
# 设置极坐标的标签
plt.thetagrids(angles * 180/np.pi, labels=radar_labels)
# 填充多边形
plt.fill(angles, data, alpha=0.25)
plt.show()

三、Matplotkib库的进阶

3.1 多重直方图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data1 = np.random.normal(0, 1, 10000)
data2 = np.random.normal(3, 1.5, 10000)

# 创建画布,并设置大小和背景颜色
fig, ax = plt.subplots(figsize=(8, 6), facecolor='white')

# 绘制两个直方图
n1, bins1, patches1 = ax.hist(data1, bins=50, density=True, alpha=0.5, color='blue')
n2, bins2, patches2 = ax.hist(data2, bins=50, density=True, alpha=0.5, color='green')

# 设置坐标轴范围和标签
ax.set_xlim([-8, 12])
ax.set_xlabel('Value')
ax.set_ylabel('Frequency')

# 添加标题和图例
ax.set_title('Normal Distribution Histogram Comparison')
ax.legend(['Data 1', 'Data 2'])

# 显示图形
plt.show()

3.2 加正态分布的直方图

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm

# 生成随机数据
np.random.seed(42)
data = np.random.randn(1000)

# 创建画布并绘制直方图
fig, ax = plt.subplots(figsize=(8, 5))
n, bins, patches = ax.hist(data, bins=30, density=True, alpha=0.7)

# 计算均值和标准差
mu, std = np.mean(data), np.std(data)

# 添加均值线和注释
ax.vlines(mu, 0, 1.0, colors='r', linestyles='--', label=r'$\mu$')
ax.annotate(r'$\mu={:.2f}$'.format(mu), xy=(mu, 0.25), xytext=(mu + 1, 0.35), fontsize=12, color='r')

# 绘制正态分布曲线
x = np.linspace(min(bins), max(bins), 100)
p = norm.pdf(x, mu, std)
ax.plot(x, p, 'k', linewidth=2, label='Normal distribution')

# 添加图例、标题和标签
ax.legend(loc='best', frameon=False)
ax.set_title('Histogram of a Random Dataset')
ax.set_xlabel('Value')
ax.set_ylabel('Frequency')

plt.show()

3.3 折线图

import matplotlib.pyplot as plt

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# 赛程和得分数据
game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3',
        '3-G4', '3-G5', '总决赛-G1', '总决赛-G2', '总决赛-G3', '总决赛-G4', '总决赛-G5', '总决赛-G6']
scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28]

# 绘图
plt.figure(figsize=(20, 10), dpi=100)
plt.plot(game, scores, c='red', marker='o', linestyle='-')
plt.scatter(game, scores, c='red', marker='o')
y_ticks = range(50)
plt.yticks(y_ticks[::5])
plt.grid(True, linestyle='--', alpha=0.5)
plt.xlabel("赛程", fontdict={'size': 16})
plt.ylabel("得分", fontdict={'size': 16})
plt.title("NBA2020季后赛詹姆斯得分", fontdict={'size': 20})
plt.xticks(rotation=45)  # 旋转x轴刻度文字,以避免文字重叠
plt.tight_layout()  # 自动调整子图参数,使之填充整个图像区域
plt.show()

3.4 多幅图

import numpy as np
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(19680801)
x = np.random.rand(10)
y = np.random.rand(10)
z = np.sqrt(x**2 + y**2)

# 绘制散点图
plt.figure(figsize=(10, 12))

plt.subplot(321)
plt.scatter(x, y, s=80, c=z, marker=">")
plt.title("Marker: '>'")

plt.subplot(322)
plt.scatter(x, y, s=80, c=z, marker=(5, 0))
plt.title("Marker: 'pentagon'")

verts = np.array([[-1, -1], [1, -1], [1, 1], [-1, -1]])
plt.subplot(323)
plt.scatter(x, y, s=80, c=z, marker=verts)
plt.title("Marker: 'verts'")

plt.subplot(324)
plt.scatter(x, y, s=80, c=z, marker=(5, 1))
plt.title("Marker: 'pentagon' rotated")

plt.subplot(325)
plt.scatter(x, y, s=80, c=z, marker='+')
plt.title("Marker: '+'")

plt.subplot(326)
plt.scatter(x, y, s=80, c=z, marker=(5, 2))
plt.title("Marker: 'star'")

plt.tight_layout()
plt.show()

总结

Matplotlib 作为 Python 中最受欢迎的绘图库之一,其发展趋势主要体现在以下几个方面:性能优化:随着数据量的增加和计算需求的提高,Matplotlib 不断进行性能优化,使得绘图过程更加高效。交互性增强:近年来,Matplotlib 不断增强交互性,支持用户与图形进行交互操作,如缩放、平移、选择等,提升用户体验。美化样式:Matplotlib 社区不断开发新的样式库和美化工具,使用户能够轻松地创建出具有吸引力的图形。扩展功能:除了基本的绘图功能外,Matplotlib 还在不断扩展新的功能模块,如三维绘图、地理数据可视化等,以满足不同领域的需求。整合其他库:Matplotlib 与其他 Python 库的整合也在不断加强,如与 Pandas、NumPy、SciPy 等科学计算库的结合,使得数据处理和可视化更加便捷。综上Matplotlib 作为 Python 中功能强大、灵活易用的绘图库,将会继续保持其在数据可视化领域的重要地位,并随着技术的发展不断完善和扩展其功能。

参考文献

  1. matplotlib绘制直方图,饼图,散点图,气泡图,箱型图,雷达图
  2. Matplotlib数据可视化基础pandas统计分析基础
  3. python+matplotlib绘制具有多个子图的图表

标签:plt,data,Matplotlib,可视化,ax,np,Matpoltlib,import,数据
From: https://www.cnblogs.com/haohai9309/p/18091881

相关文章

  • 工业相机里面图像数据格式mono8,packetedmono10是什么意思,还有color是什么意思?
    mono8,即存储下来的图像为单色,8Bit的图片,一般是bmp,jpeg等。packedmono10,即存储下来的图片为单色,10Bit的图片,但是一般都是存储为16Bit图片,packed存储即将10Bit的数据以16Bit的方式填充,剩余的本应填充为0的6个bit被下一帧图片数据填充,这****样做可以减少数据量和数据冗余度,节省空......
  • 范式(Normal Form)是数据库设计中的概念。新的范式(paradigm)
    范式(NormalForm)是数据库设计中的概念,用于描述关系型数据库中的数据表结构是否符合特定的标准化要求。通过将数据库表设计规范化到特定的范式中,可以提高数据库的数据存储效率和数据的一致性,并减少数据冗余。在关系数据库中,存在不同的范式,常见的包括第一范式(1NF)、第二范式(2NF)、第......
  • perl:获取同花顺数据--业绩预告
    perldoc LWP::UserAgent如果没有安装,则安装模块,运行cpanm LWP::UserAgent 。编写  get_yjyg_10jqka.pl 如下#!/usr/bin/perl#perl获取同花顺数据--业绩预告useLWP::UserAgent;useEncodeqw(decodeencode);usePOSIX;useData::Dumper;useHTML::TreeBui......
  • 线路查询||基于Java+Spring Boot+MySQL的公交线路查询系统设计与实现(源码+数据库+文
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、其他案例七、源码获取作者介绍:✌️大厂全栈码农|毕设实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️作者博客:曾几何时​​​​​​​......
  • 可视化portainer
    0.简介​ Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。而且完全免费,基于容器化的安装方式,方便高效部署。​ 且支持多种docker编排方式,包括单机、dockerswarm、k8s等。1.安装官网:https://www.portainer.io/安装文档:htt......
  • long数据类型跨平台问题
    源代码#include<iostream>intmain(){ std::cout<<"sizeoflong:"<<sizeof(long)<<std::endl; return0;}Windowslong->32位Linuxlong->64位建议跨平台程序尽量采用跨平台库,如Boostnamespaceboost{using::int8_t;......
  • Python编程—Ajax数据爬取
    Python编程—Ajax数据爬取​在浏览器中可以看到正常显示的页面数据,而使用requests得到的结果中并没有这些数据。这是因为requests获取的都是原始HTML文档,而浏览器中的页面是JavaScript处理数据后生成的结果,这些数据有多种来源:可能是通过Ajax加载的,可能是包含在HTML文档中......
  • Python 潮流周刊第 43 期(摘要),赠书 5 本《Python数据结构与算法分析(第3版)》
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。周刊全文:https://pythoncat.top/posts/2024-03-23-weekly特别提醒:本期赠书5......
  • 【发疯毕设日志day7】hagrid_dataset_512数据集作者论文原文逐句翻译——大疆tello手
    论文原文::::2206.08219.pdf(arxiv.org)https://arxiv.org/pdf/2206.08219.pdf摘要     本文介绍了一个庞大的手势识别数据集——海格(HAndGestrueRecognitionImagedataset),以简历一个手势识别(HGR)系统,专注于与设备的交互管理。这就是为什么所选的18个手势都呗赋予......
  • 数据结构(五)——二叉树的遍历和线索二叉树
    5.3.二叉树的遍历和线索二叉树5.3.1_1二叉树的先中后序遍历遍历:按照某种次序把所有结点都访问一遍二叉树的递归特性:        ①要么是个空二叉树        ②要么就是由“根节点+左子树+右子树”组成的二叉树先序遍历:根左右(NLR)中序遍历:左根右(LNR)后序遍......