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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在vscode 中ssh连接虚拟ubuntu,不能使用code打开文件

这是参考别人的文章:https://blog.csdn.net/weixin_44465434/article/details/130035032找到vscode的版本信息,提交后面是需要的打开home/(用户)/.bashrc,添加环境变量 export PATH"~/.vscode-server/bin/5437499feb04f7a586f677b155b03…

6.22套题

B. Dark 题意:每次能在数列中能使相邻两个数-1,求当数列没有连续非0值的最小贡献 解法:设表示前i个数中前i-1个数是否为0,当前数是j的最小贡献。表示i1以后减掉d的最小贡献。 C. 幸运值 D. 凤凰院真凶

Docker 日志

日志记录是任何生产应用程序中至关重要的一部分。当出现问题时,日志可以是恢复服务的关键工具,所以它们需要做好。在 Linux 系统上,我们期望通过一些常见方式与应用程序日志交互,有些方式更好。如果您在一台计算机上运行应用程序进…

文华财经盘立方均线-支撑压力自动画线多空声音预警指标公式源码

文华财经盘立方多空均线-支撑压力自动画线指标公式源码: //MA5:MA(C,5); //MA10:MA(C,10); MA20:MA(C,20),COLORRED; MA60:MA(C,60),COLORGREEN; TY:CLOSE; HD:FILTER(BACKSET(FILTER(REF(TY,10)HHV(TY,2*101),10),101),10); LD:FILTER(BACKSET(FILTER(REF(T…

openlayer 图层绘制成多种颜色的一个图层

技术栈: 因为是旧项目的优化功能,这里主要介绍实现思路。技术栈:openlayer 6.5^、jquery、layui组件。 背景: 在创建一个地图对象后,如何创建此处省略。这里主要讲解如何根据接口的数据来把水深测量时间的图层根据不同…

vue2的待办事项案例

头部组件 <template><div class"todo-header"><input type"text" placeholder"请输入你的任务名称&#xff0c;按回车键确认" keyup.enter"add"/></div> </template><script>import {nanoid} fro…

智能语音抽油烟机:置入WTK6900L离线语音识别芯片 掌控厨房新风尚

一、抽油烟机语音识别芯片开发背景 在繁忙的现代生活中&#xff0c;人们对于家居生活的便捷性和舒适性要求越来越高。传统的抽油烟机操作方式往往需要用户手动调节风速、开关等功能&#xff0c;不仅操作繁琐&#xff0c;而且在烹饪过程中容易分散注意力&#xff0c;增加安全隐…

【5G射频基本架构】

平台框架 平台演进及搭配 5G NR频谱 NSA/SA/ENDC

Java登录管理功能的自我理解(尚庭公寓)

登录管理 背景知识 1. 认证方案概述 有两种常见的认证方案&#xff0c;分别是基于Session的认证和基于Token的认证&#xff0c;下面逐一进行介绍 基于Session 基于Session的认证流程如下图所示 该方案的特点 登录用户信息保存在服务端内存&#xff08;Session对象&#xff…

安全技术和防火墙(iptables)

安全技术 入侵检测系统&#xff1a;特点是不阻断网络访问&#xff0c;主要是提供报警和事后监督&#xff0c;不主动介入&#xff0c;类似于监控。 入侵防御系统&#xff1a;透明模式工作&#xff0c;对数据包&#xff0c;网络监控&#xff0c;服务攻击&#xff0c;木马&#…

【数据结构】(C语言):栈

栈&#xff1a; 线性的集合。后进先出&#xff08;LIFO&#xff0c;last in first out&#xff09;。两个指针&#xff1a;指向栈顶和栈底。栈顶指向最后进入且第一个出去的元素。栈底指向第一个进入且最后一个出去的元素。两个操作&#xff1a;入栈&#xff08;往栈尾添加元素…

力扣最新详解5道题:两数之和三数之和四数之和

目录 一、查找总价格为目标值的两个商品 题目 题解 方法一&#xff1a;暴力枚举 方法二&#xff1a;对撞指针 二、两数之和 题目 题解 方法一&#xff1a;暴力枚举 方法二&#xff1a;哈希表法 三、三数之和 题目 题解 方法一&#xff1a;排序暴力枚举set去重 …

C++ | Leetcode C++题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution { private:void dfs(vector<vector<char>>& grid, int r, int c) {int nr grid.size();int nc grid[0].size();grid[r][c] 0;if (r - 1 > 0 && grid[r-1][c] 1) dfs(grid, r - 1, c);if (r …

智能革新:AI写作工具如何重塑论文生成的艺术

在学术探索的征途中&#xff0c;AI论文工具本应是助力前行的风帆&#xff0c;而非让人陷入困境的漩涡。我完全理解大家在面对论文压力的同时&#xff0c;遭遇不靠谱AI工具的沮丧与无奈。毕竟&#xff0c;时间可以被浪费&#xff0c;但金钱和信任却不可轻弃。 作为一名资深的AI…

解锁数据资产的无限潜能:深入探索创新的数据分析技术,挖掘其在实际应用场景中的广阔价值,助力企业发掘数据背后的深层信息,实现业务的持续增长与创新

目录 一、引言 二、创新数据分析技术的发展 1、大数据分析技术 2、人工智能与机器学习 3、可视化分析技术 三、创新数据分析技术在实际应用场景中的价值 1、市场洞察与竞争分析 2、客户细分与个性化营销 3、业务流程优化与风险管理 4、产品创新与研发 四、案例分析 …

Redis 缓存一致性

Redis 业务结构 流程图 缓存一致性 Redis 和 MySQL 中数据保持一致 双检加锁策略 主要用于解决多线程环境下的并发问题&#xff0c;确保在高并发场景下对共享资源的访问是互斥的&#xff0c;避免因竞争条件导致的不一致状态 public User findUserById(Integer id) {User user …

使用新H5标签dialog,实现点击按钮显示分享链接弹出层交互功能

使用新H5标签&#xff0c;实现点击按钮显示分享链接弹出层交互功能 在现代网页开发中&#xff0c;使用新技术和标签来提升用户体验是非常重要的。今天&#xff0c;我们就来聊聊如何利用HTML5的<dialog>标签来实现一个简洁实用的分享链接功能。 在过去&#xff0c;我们通常…

简单的springboot整合activiti5.22.0

简单的springboot整合activiti5.22.0 1. 需求 我们公司原本的流程服务是本地workflow模块以及一个远程的webService对应的activiti服务&#xff0c;其中activiti版本为5.22.0&#xff0c;之前想将activiiti5.22.0进行升级&#xff0c;选择了camunda&#xff0c;也对项目进行了…

《梦醒蝶飞:释放Excel函数与公式的力量》6.1 DATE函数

6.1 DATE函数 第一节&#xff1a;DATE函数 1&#xff09;DATE函数概述 DATE函数是Excel中的一个内置函数&#xff0c;用于根据指定的年、月、日返回对应的日期序列号。这个函数非常有用&#xff0c;尤其是在处理日期数据时&#xff0c;它可以帮助你构建特定的日期&#xff0…

20-OWASP top10--XXS跨站脚本攻击

目录 什么是xxs&#xff1f; XSS漏洞出现的原因 XSS分类 反射型XSS 储存型XSS DOM型 XSS XSS漏洞复现 XSS的危害或能做什么&#xff1f; 劫持用户cookie 钓鱼登录 XSS获取键盘记录 同源策略 &#xff08;1&#xff09;什么是跨域 &#xff08;2&#xff09;同源策略…