【科学计算与可视化】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,一经查实,立即删除!

相关文章

双指针:比较含退格的字符串

题目链接:. - 力扣(LeetCode) 代码看起来繁琐,但实际思想并不难。核心思路是:倒序遍历,遇到#就记录跳过次数,遇到字母就跳过记录次数,最后比较不用跳过时的字母是否一样。 class S…

负载组指南说明-负载柜

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

江协科技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 管理、增强系统安全,提供简单、易用、稳定、安全的产品…

并发数据结构:ConcurrentHashMap深入分析

在Java并发编程中,ConcurrentHashMap是一个极其重要的类,它提供了比Hashtable和同步的HashMap更好的并发性能。本文将深入分析ConcurrentHashMap的内部结构、工作原理以及如何高效地使用它。 1. ConcurrentHashMap简介 ConcurrentHashMap是Java集合框架…

kubernetes Job yaml文件解析

一、yaml文件示例 apiVersion: batch/v1 kind: Job metadata:name: test-jobnamespace: mtactor spec:completions: 3parallelism: 1backoffLimit: 5activeDeadlineSeconds: 100template:spec:containers:- name: test-jobimage: centoscommand: ["echo","test…

linux创建逻辑盘再挂载

创建逻辑盘再挂载 原因:如果直接挂载整盘,后面想扩容会很麻烦。挂载逻辑卷的话就简单很多。为了以后方便。所以直接挂载逻辑卷 openEuler系统先装lvm2如果:-bash: pvcreate: command not found执行:yum install lvm2 df -hT ls…

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

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

Linux下创建虚拟磁盘

参考文档 https://blog.csdn.net/lujun9972/article/details/115762407 https://blog.csdn.net/Kiritow/article/details/118076034 1,创建挂载点 sudo mkdir /mnt/z //方式一,内存盘方式 2,创建内存盘 sudo mount -t ramfs -o size1G z /…

Java中的内存泄漏及其排查方法

Java中的内存泄漏及其排查方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java开发中,内存管理通常由Java虚拟机(JVM&#xff0…

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

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

如何在Spring Boot中使用RabbitMQ实现消息队列

如何在Spring Boot中使用RabbitMQ实现消息队列 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统中,消息队列是实现解耦、异步通信和削峰…

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

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

【LeetCode】每日一题:三数之和

解题思路 最开始是打算沿着二数之和的思路做,即固定了最大的,然后小的开始遍历,因为这种遍历方式只需要遍历一轮就能完成,所以复杂度应该是O(n2),但是最后几个示例还是超时了,可能进…

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

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

解决Java中的NoSuchElementException异常的常见方法

解决Java中的NoSuchElementException异常的常见方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在Java编程中,NoSuchElementException异常是一个…

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 级全球地表土壤水…