【科学计算与可视化】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()

在这里插入图片描述

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

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

相关文章

负载组指南说明-负载柜

什么是负载组? 负载组是一种设备,旨在准确模拟电源在实际应用中看到的负载。这种负载组可以用电阻、电感或电容元件构建。它是一种电阻装置,以热量的形式消散一定量的能量,可以通过自然对流、强制空气或水冷系统去除。 为什么要使…

江协科技51单片机学习- p11 Proteus安装模拟51单片机

前言: 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记,在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用: Proteus快速入门&…

可溶性聚四氟乙烯离子交换柱PFA层析柱微柱一体成型

PFA微柱,也叫PFA层析柱、PFA离子交换柱等,主要用于地质同位素超净化、痕量、超痕量、微量元素分析实验室。 规格参考:1.5ml、15ml、30ml等。 其主要特性有: 1、PFA层析柱(微柱)专为离子交换设计&#xff…

SAP ERP公有云(全称 SAP S/4HANA Cloud Public Edition),赋能企业成为智能可持续的企业

在数字化浪潮中,每一家企业都需要应对快速的市场变化,不断追求降本增效,为创新提供资源,发展新的业务模式,安全无忧地完成关键任务系统的转型。 10年前,SAP进入云领域,用云ERP和覆盖全线业务的云…

双通道源表KEITHELY2636B详情参数吉时利2636B

Keithley的2636B是一款2600B系列双通道系统源表(SMU)仪器(0.1fA, 10A脉冲)。它是业界领先的电流/电压源和测量解决方案。这种双通道模型结合了精密电源,真电流源,6 1/2位DMM,任意波形发生器,脉冲发生器和电子负载的能力&#xff0…

锐起RDV5高性能云桌面

锐起是上海锐起信息技术有限公司旗下品牌。该公司创立于 2001 年,是桌面虚拟化产品和解决方案提供商,专注于桌面管理系统和私有云存储系统的系列软件产品研发,致力于简化 IT 管理、增强系统安全,提供简单、易用、稳定、安全的产品…

我在高职教STM32——GPIO入门之按键输入(1)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就…

【观察】戴尔科技+AMD:释放技术创新“乘数效应”,助力制造业打造“新质生产力”...

在今年的政府工作报告中,“人工智能”首次被写入报告,同时“大力推进现代化产业体系建设,加快发展新质生产力”也被列为2024年的首项政府工作任务,其重要性不言而喻。 尤其是最近几年,以人工智能、大模型、大数据、云计…

java设计模式(六)代理模式(Proxy Pattern)

1、模式介绍: 代理模式(Proxy Pattern)是一种结构型设计模式,它允许你在不改变客户端代码的情况下,向某个对象提供一个代理,以控制对该对象的访问。代理对象通常会在实际对象的方法调用前后添加一些附加逻…

《UDS协议从入门到精通》系列——图解0x35:请求上传

《UDS协议从入门到精通》系列——图解0x35:请求上传 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 三、通信示例 Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快…

AMSR-E/Aqua 第 3 级全球地表土壤水分月平均值 V005 (AMSRE_AVRMO)

AMSR-E/Aqua level 3 global monthly Surface Soil Moisture Averages V005 (AMSRE_AVRMO) at GES DISC AMSR-E/Aqua level 3 global monthly Surface Soil Moisture Standard Deviation V005 (AMSRE_STDMO) at GES DISC 简介 GES DISC 的 AMSR-E/Aqua 第 3 级全球地表土壤水…

操作系统入门 -- 内存管理

操作系统入门 – 内存管理 1.内存种类 1.1 虚拟内存(VIRT) 进程需要的虚拟内存大小,包括进程使用的库、代码、数据以及malloc、new分配的堆空间和栈空间等。若进程申请了10MB内存但实际使用了1MB,则物理空间会增长10MB。 1.2 …

如何以智能方式安装 Python

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

学习笔记——动态路由——RIP(附加度量值配置)

六、附加度量值配置 RIP协议cost开销值:默认值为0,路由信息每传递一次,值增加1,最大15,(路由器不能超过15台)16代表不可达。 入接口附加度量值 rip metricin 5 //可以修改开销改变路径。只能增加,不能减小 …

count(*) over (partition by ……)用法详解

select id,count(*) over(partition by pro_id) from sal; 以pro_id分组,统计分组后每个pro_id的记录总数及对应的id; 类似还有count(*) over(order by ……)、sum(amount) over(partition by ……)等,略有区别

降低企业运营成本的API服务有哪些?

通过API服务,企业可以实现许多功能和服务的自动化和优化,从而有效降低企业的运营成本。API服务可以帮助企业简化流程、减少人工操作、提高效率,并提供数据支持和决策依据,从而实现成本的有效控制和降低。无论是人力资源管理、客户…

【D3.js in Action 3 精译】1.2.2 可缩放矢量图形(一)

译注 由于 1.2.2 小节介绍 SVG 的篇幅过多,为了方便查阅,后续将分多个小节依次进行翻译。为了确保整个 1.2.2 小节的完整性,特意将上一篇包含的 SVG 小节的内容整理出来重新编排。敬请留意。 1.2.2 SVG - 可缩放矢量图形 可伸缩矢量图形&…

【Spring Cloud Alibaba AI】简单使用

本文基于官方文档。 Spring AI 官方文档:Spring AI :: Spring AI Reference 中文文档:Spring AI 简介 - spring 中文网 (springdoc.cn) Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用…

道路元素位置和方向的坐标系统: 点 线 面 连接点

道路元素位置和方向的坐标系统: 下图道路元素在地球坐标系中的位置,该位置由三个坐标轴(x, y, z)组成的笛卡尔坐标系来确定。这种描述特别适用于三维建模和地理信息系统(GIS)中,其中道路被视为一个三维模型…

使用 position:absolute; 定位的元素在ios上被遮盖

在ios上一个元素使用position:absolute;定位后,被其它元素遮盖 在使用absolute的元素上加一行代码 -webkit-transform: translate3d(0, 0, 0);