【科學計算與可視化】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.pswp.cn/diannao/36086.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36086.shtml
英文地址,請注明出處:http://en.pswp.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 級全球地表土壤水…