【科学计算与可视化】3. Matplotlib 绘图基础

news2024/11/19 3:19:04

安装 pip install matplotlib
官方文档 https://matplotlib.org/stable/api/pyplot_summary.html

主要介绍一些图片绘制的简要使用,更加详细和进阶需要可参考 以上官方文档。

1 绘制基础

方法名说明
title()设置图表的名称
xlabel()设置 x 轴名称
ylabel()设置 y 轴名称
xticks(x, ticks, rotation)设置 x 轴的刻度, rotation 为旋转角度
yticks()设置 y 轴的刻度
plot()绘制线性图表
show()显示图表
legend()显示图例
text(x, y, text)显示每条数据的值,x, y 为值的位置
figure(name, figsize=(w, h), dpi=n)设置图片大小,name 为图片名称,figsize 为图片宽高尺寸,dpi 为图片分辨率

1.1 基础方法

import matplotlib.pyplot as plt
plt.plot([0,2],[1,4]) # 将 (0,1) (2,4) 两点连成一条直线  
plt.show()  
  
# 绘制折线  
plt.plot([0,1,2,3],[0,1,4,9])  
plt.show()  
  
plt.plot([0,1,2,3],[0,1,4,9], linewidth=5)  # 设置线条宽度  
plt.title("y = x ^ 2")  # 设置图形的标题  
plt.xlabel("x") # 设置图形 x 轴标签  
plt.ylabel("y") # 设置图形 y 轴标签  
plt.show()  
  
# 绘制一元二次方程曲线  
x = range(-100, 100)  # x 的刻度越细  曲线越平滑  
y = [i**2 for i in x]  
plt.title("y = x ^ 2")  # 设置图形的标题  
plt.plot(x, y)  
plt.show()  
  
# 绘制正弦曲线和余弦曲线  
import numpy as np  
x = np.linspace(-2*np.pi, 2*np.pi, 100)  
y1 = np.sin(x)  
y2 = np.cos(x)  
plt.title("sin(x) and cos(x)")  
plt.xlabel("x")  
plt.ylabel("y")  
plt.plot(x, y1)  
plt.plot(x, y2)  
plt.legend(["sin(x)", "cos(x)"], loc="best")  
plt.show()

1.2 绘制子图

x = np.linspace(1, 10, 100)  
# 调整子图间距  
plt.subplots_adjust(wspace=0.4, hspace=0.6)  # 增加子图之间的宽度间距  
  
plt.subplot(2, 2, 1)  
plt.title("sin(x)")  
plt.xlabel("x")  
plt.ylabel("six(x)")  
plt.plot(x, np.sin(x))  
  
plt.subplot(2, 2, 2)  
plt.title("cos(x)")  
plt.xlabel("x")  
plt.ylabel("cos(x)")  
plt.plot(x, np.cos(x))  
  
plt.subplot(2, 2, 3)  
plt.title("tan(x)")  
plt.xlabel("x")  
plt.ylabel("tan(x)")  
plt.plot(x, np.tan(x))  
  
plt.subplot(2, 2, 4)  
plt.title("log(x)")  
plt.xlabel("x")  
plt.ylabel("log(x)")  
plt.plot(x, np.log(x))  
plt.show()

也可以获取子图的对象进行对应的设置

# 创建一些数据  
x = np.linspace(0, 10, 100)  
y1 = np.sin(x)  
y2 = np.cos(x)  
  
# 创建一个 figure 和两个子图  
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))  
  
# 绘制第一个子图  
ax1.plot(x, y1, color='blue')  
ax1.set_title('Sine Function')  
ax1.set_xlabel('X axis')  
ax1.set_ylabel('Y axis')  
  
# 绘制第二个子图  
ax2.plot(x, y2, color='red')  
ax2.set_title('Cosine Function')  
ax2.set_xlabel('X axis')  
ax2.set_ylabel('Y axis')  
  
# 调整子图间距  
plt.subplots_adjust(wspace=0.4)  # 增加子图之间的宽度间距  
  
# 显示图表  
plt.show()

在这里插入图片描述

2 绘制散点图

关于点样式的写法可参考 官网文档 https://matplotlib.org/stable/api/pyplot_summary.html

x = np.arange(6)  
plt.plot(x, x, "ro")  # 红色圆点  plt.plot(x, x ** 2, "g+")  # 绿色加号  
plt.show()  
plt.close()  # 关闭当前的 plt  重新开始绘图  
  
plt.scatter(x, x)  
plt.show()  
  
  
# 绘制 10种大小 100种颜色的散点图  
np.random.seed(42)  
x = np.random.rand(100)  
y = np.random.rand(100)  
colors = np.random.rand(100)  
size = np.tile(np.random.rand(10), 10) * 100   # 生成 10个大小  需要复制 10次  
np.random.shuffle(size) # 打乱大小  
plt.scatter(x, y, c=colors, s=size, alpha=0.5)

在这里插入图片描述

3 绘制柱状图

import numpy as np  
import matplotlib.pyplot as plt  
from matplotlib import font_manager  
my_font = font_manager.FontProperties(fname='./simhei.ttf')  
x= np.linspace(0, 20, 4)   # x 轴  柱的位置
x_labels=['2000 年','2001 年','2002 年','2003 年']    # x轴的标签
y=[1000,3000,4000,5000]  
plt.bar(x,y,width=3)  
plt.xticks(x,x_labels, fontproperties=my_font) # 修改 x 轴的 标签  
plt.xlabel('年份', fontproperties=my_font)  
plt.ylabel('销量', fontproperties=my_font)  
plt.title('根据年份销量对比图', fontproperties=my_font)  
plt.show()
real_names=['A 公司','B 公司','C 公司']  
real_num1=[2314,4521,5632]  
real_num2=[2211,1223,2222]  
real_num3=[1115,1111,3333]  
#生成 x 第 1 天 第 2 天 第 3 天  
x=np.arange(len(real_names))  
x_label=['第{}天'.format(i+1) for i in range(len(real_names))]  
#绘制柱状图  
#设置柱的宽度  
width=0.3  
plt.bar(x,real_num1,color='g',width=width,label=real_names[0])  
plt.bar([i+width for i in x],real_num2,color='b',width=width,label=real_names[1])  
plt.bar([i+2*width for i in x],real_num3,color='r',width=width,label=real_names[2])  
#修改 x 坐标  
plt.xticks([i+width for i in x],x_label, fontproperties=my_font)  
#添加图例  
plt.legend(loc="best", labels=real_names, prop=my_font)  
#添加标题  
plt.title('3 天的销售量', fontproperties=my_font)  
plt.show()

在这里插入图片描述

4 绘制饼状图

import matplotlib.pyplot as plt  
import numpy as np
male = 200  
female = 150  
male_percent = male / (male + female)  
female_percent = female / (male + female)  
labels = ['male', 'female']  
colors = ['lightblue', 'pink']  
  
paches, text, autotexts = plt.pie([male_percent, female_percent], labels=labels, colors=colors, autopct= '%0.1f%%')  
# 设置饼状图中的字体颜色与字体大小
for text in autotexts:  
    text.set_color('white')  
    text.set_fontsize(20)  
plt.title('Gender Distribution')  
plt.show()

pandas DataFrame 的某一列绘制饼状图

# Import  
import pandas as pd  
import matplotlib.pyplot as plt  
df_raw = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")  
plt.figure(figsize=(8, 8), dpi= 100)
# Prepare Data  
df = df_raw.groupby('class').size()  
  
# Make the plot with pandas  
df.plot(kind='pie', subplots=True, figsize=(8, 8))  
plt.title("Pie Chart of Vehicle Class - Bad")  
plt.ylabel("")  
plt.show()

在这里插入图片描述

5 绘制直方图

直方图和柱状图很类似。

直方图是用来观察分布状态的

柱状图是用来看每一个 X 坐标对应的 Y 值

直方图关注的是分布,并不关心具体的某个值。

import numpy as np  
import matplotlib.pyplot as plt  
x = np.random.randn(2000)  
# plt.hist(x)  
plt.hist(x, bins= 100) # 分成 100份  
plt.show()

同一个画布绘制三个直方图

import numpy as np  
import matplotlib.pyplot as plt  

plt.figure(figsize=(8,8), dpi=100)  # figsize用来设置图片大小, dpi 设置图像清晰度
x1 = np.random.normal(0, 0.8, 1000)  
x2 = np.random.normal(-1, 1, 1000)  
x3 = np.random.normal(2, 2, 1000)  
kwargs = dict(bins=100, alpha=0.5)  
  
plt.hist(x1, **kwargs)  
plt.hist(x2, **kwargs)  
plt.hist(x3, **kwargs)  
  
plt.show()

在这里插入图片描述

6 绘制等高线图

import matplotlib.pyplot as plt  
import numpy as np  
x = np.linspace(-5, 5, 100)  
y = np.linspace(-5, 5, 100)  
  
X, Y = np.meshgrid(x, y)  
Z = np.sqrt(X**2 + Y**2)  
plt.contourf(X, Y, Z)  
plt.contour(X, Y, Z)  
# 颜色越深表示值越小 中间的黑色表示 z = 0plt.show()

在这里插入图片描述

  1. 导入所需的库:matplotlib.pyplot和numpy。
  2. 使用numpy的linspace函数生成一个从-5到5的等间距数组,数组大小为100
  3. 使用numpy的meshgrid函数将x和y转换为网格
  4. 计算z=sqrt(x^2 + y^2),其中x和y是网格的坐标
  5. 使用matplotlib的contourf函数绘制等值线filled contour图。contourf函数会填充z值大于某个阈值的区域
  6. 使用matplotlib的contour函数绘制等值线contour图
  7. 最后,使用matplotlib的show函数显示图形。

7 绘制三维图

import numpy as np  
import matplotlib.pyplot as plt  
from mpl_toolkits.mplot3d import Axes3D  
  
# 创建 X、Y、Z 坐标  
X = 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))  
  
# 创建3D图  
fig = plt.figure()  
ax = fig.add_subplot(111, projection='3d')  
  
# 绘制3D曲面  
ax.plot_surface(X, Y, Z, cmap='viridis')  
  
# 设置坐标轴标签  
ax.set_xlabel('X')  
ax.set_ylabel('Y')  
ax.set_zlabel('Z')  
  
# 显示图形  
plt.show()

在这里插入图片描述

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

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

相关文章

基于DeepNLP AI Store真人点评和ShowCase分享社区-AI for Image Generator

来源 quora 社区: https://deepnlpaistore.quora.com/ github: https://rockingdingo.github.io/deepnlp/store/image_generator 内容 DeepNLP AI Store 网址:http://www.deepnlp.org/store/image-generator 网站针对图像生成类别 Image Generator下多个AI工具如 …

汽车免拆诊断案例 | 2016 款吉利帝豪EV车无法加速

故障现象 一辆2016款吉利帝豪EV车,累计行驶里程约为28.4万km,车主反映车辆无法加速。 故障诊断 接车后路试,行驶约1 km,踩下加速踏板,无法加速,车速为20 km/h左右,同时组合仪表上的电机及控制…

告别数据线!轻松实现iOS和安卓设备间的文件共享

用 AirDroid 的附近传输功能,完全免费,几十个G的文件也可以相互传输。不限制iPhone和iPad数量,多个设备同时登录也不会强迫下线。 当你要在苹果手机和安卓手机之间传输文件,请将AirDroid安装到两台手机上,然后登录同一…

ce学习第一天(例行性工作,chrony服务时间同步,两台服务器免密登录)

1、Linux 的例行性工作 1.1单一执行的例行性工作 at 单一执行的例行性工作:单一执行的例行性工作:仅处理执行一次就结束了,at -> atd 1.1.1 at 命令的实际工作过程 1、我们使用 at 命令来生成所要运行的工作,并将这个工作&a…

【项目实训】falsk后端连接数据库以及与前端vue进行通信

falsk连接数据库 我们整个项目采用vueflaskmysql的框架,之前已经搭建好了mysql数据库,现在要做的是使用flask连接到数据库并测试 安装flask 首先安装flask pip install flask 进行数据库连接 数据库连接需要使用到pymysql库以及flask库 连接数据库…

Unity之Hololens2开发MRTK Profile详解

前言 配置 MRTK 的主要方式之一是使用基础包中的配置文件。 场景中的主要 MixedRealityToolkit 对象具有活动配置文件 - 一个 ScriptableObject。 顶级 MRTK 配置配置文件包含主核心系统的每个核心的子配置文件数据,每个主核心系统都旨在配置其相应子系统的行为。 此外,这些…

最新自助下单彩虹云商城系统源码,含小储云商城模板免授权

最新彩虹商城源码,含小储云商城模板免授权,试用了一下还行,具体的大家可以看看 源码下载:https://download.csdn.net/download/m0_66047725/89405387 更多资源下载:关注我。

JavaWeb——MySQL数据库:约束

目录 1. 约束 1.1 概念: 1.2 分类: 1.3 使用: 1.4 外键约束; 1.5 总结 数据库:数据库都有约束,数据库设计,多表查询,事物这四方面的知识; 我们先按这个顺序进行学习&#xff…

如何以智能方式安装 Python

Python易于使用,对初学者友好,功能强大,几乎可以为任何应用程序创建强大的软件。 但与任何其他软件一样,Python 的设置和管理可能很复杂。 在本文中,我们将介绍如何正确设置 Python。 您将学习如何选择合适的版本、…

NISP国家信息安全水平考试

国家信息安全水平考试(NISP)是中国信息安全测评中心考试、发证,由国家网络空间安全人才培养基地运营管理,并授权网安世纪科技有限公司为NISP证书管理中心。 中国信息安全测评中心开展国家信息安全水平考试(NISP)考试项目,是为普及信息安全/网…

win11系统重装?正版系统Windows11安装重启!保姆级重装系统攻略!

随着科技的不断发展,Windows 11系统已经逐渐成为了众多电脑用户的新选择。然而,当当电脑出现严重故障、受到病毒攻击、软件冲突、系统升级失败、硬件更换或升级、系统性能下降或个性化需求等情况时,重装系统可能是一个有效的解决方案。本文将…

[YOLOv8单机多卡GPU问题解决]

问题: Transferred 319/355 items from pretrained weights DDP: debug command /home/user/miniconda3/bin/python -m tor ch.distributed.run --nproc_per_node 4 --master_port 54123/home/user/.config/Ultralytics/DDP/_temp_vpkq2tmy140546244784832.py Erro…

华为电脑重装系统如何操作?电脑Win11系统重装注意什么?图文详细解答

随着科技的不断进步,操作系统更新换代的步伐也日益加快。华为电脑作为市场中的佼佼者,其搭载的Windows 11系统凭借其强大的性能和丰富的功能受到了用户的广泛好评。然而,随着使用时间的推移,系统可能会出现各种问题,如…

UE引擎实现ShadowMap、体积光(C++)

前言 整体上参考了YivanLee大佬的这两篇文: 虚幻4渲染编程(灯光篇)【第一卷:各种ShadowMap】 虚幻4渲染编程(灯光篇)【第二卷:体积光】 正文 1、ShadowMap (1)创建工…

Golang | Leetcode Golang题解之第199题二叉树的右视图

题目: 题解: /** 102. 二叉树的递归遍历*/ func levelOrder(root *TreeNode) [][]int {arr : [][]int{}depth : 0var order func(root *TreeNode, depth int)order func(root *TreeNode, depth int) {if root nil {return}if len(arr) depth {arr a…

Open3D 显示带有强度的点云数据

目录 一、概述 1.1强度信息的意义 1.2应用场景 二、代码实现 三、实现效果 一、概述 在点云数据中,强度(Intensity)指的是激光雷达传感器在扫描环境时,每个点返回的反射强度值。这些强度值代表了激光脉冲返回的能量&#xff…

基于振弦采集仪的工程安全监测技术研究与应用

基于振弦采集仪的工程安全监测技术研究与应用 随着工程规模的不断扩大和复杂性的增加,工程安全监测变得越来越重要。工程安全监测的目的是保证工程的安全运行,预防事故的发生,保护人们的生命财产安全。其中,振弦采集仪作为一种重…

sys.stdout.write()方法——标准输出打印

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 Sys.Stdout是sys模块中的标准输出对象,可以实现将数据向屏幕、文件等进行输出。Sys.Stdout通过write 方法实现数据的标准输出。…

Pinia的基本用法

Pinia的安装和引入 1.安装Pinia npm install pinia2. 在vue项目的main.js文件中引入pinia import { createApp } from vue import { createPinia } from pinia import App from ./App.vueconst pinia createPinia() const app createApp(App)app.use(pinia) app.mount(#ap…

LabVIEW电梯钢丝绳实时监测系统

电梯作为现代高层建筑中不可或缺的交通工具,其安全性直接影响到乘客的生命财产安全。电梯钢丝绳作为承载乘客与货物的关键部件,其健康状况尤为重要。传统的钢丝绳检测方法大多依赖于定期检查,无法实现实时监控,存在一定的安全隐患…