Imshow 3D Python

hình, rìu = plt. ô con[figsize=[12,6]] ax. cốt truyện[x, x+1, color="blue", linewidth=0. 25] rìu. cốt truyện[x, x+2, color="blue", linewidth=0. 50] rìu. cốt truyện[x, x+3, color="blue", linewidth=1. 00] rìu. cốt truyện[x, x+4, color="blue", linewidth=2. 00] # tùy chọn kiểu đường có thể có ‘-‘, ‘–’, ‘-. ’, ‘. ’, rìu ‘bước’. cốt truyện[x, x+5, color="red", lw=2, linestyle='-'] ax. cốt truyện[x, x+6, color="đỏ", lw=2, ls='-. '] cây rìu. cốt truyện [x, x+7, color="đỏ", lw=2, ls='. '] # dòng gạch ngang tùy chỉnh, = ax. cốt truyện[x, x+8, color="đen", lw=1. 50] dòng. set_dash[[5, 10, 15, 10]] # định dạng. chiều dài dòng, chiều dài không gian,. # ký hiệu đánh dấu có thể. điểm đánh dấu = '+', 'o', '*', 's', ',', '. ', '1', '2', '3', '4',. cây rìu. cốt truyện[x, x+ 9, color="green", lw=2, ls='*', marker='+'] ax. cốt truyện[x, x+10, color="green", lw=2, ls='*', marker='o'] ax. cốt truyện[x, x+11, color="green", lw=2, ls='*', marker='s'] ax. plot[x, x+12, color="green", lw=2, ls='*', marker='1'] # kích thước điểm đánh dấu và màu rìu. cốt truyện[x, x+13, color="purple", lw=1, ls='-', marker='o', markersize=2] ax. cốt truyện[x, x+14, color="purple", lw=1, ls='-', marker='o', markersize=4] ax. plot[x, x+15, color="purple", lw=1, ls='-', marker='o', markersize=8, markerfacecolor="red"] ax. plot[x, x+16, color="purple", lw=1, ls='-', marker='s', markersize=8, markerfacecolor="yellow", markeredgewidth=2, markeredgecolor="blue"]

Khi bạn đang đo sự phụ thuộc của một thuộc tính vào nhiều biến độc lập, bây giờ bạn cần vẽ dữ liệu theo ba chiều. Các ví dụ về điều này thường xảy ra với các phép đo không gian, trong đó có cường độ liên quan đến từng điểm [x, y], giống như trong phép đo kính hiển vi raster hoặc mẫu nhiễu xạ không gian. Để trực quan hóa dữ liệu này, chúng tôi có một số tùy chọn theo ý của mình — chúng tôi sẽ khám phá cách tạo bản đồ nhiệt, biểu đồ đường viền [không được lấp đầy và được lấp đầy] và biểu đồ 3D

Tập dữ liệu mà tôi sẽ sử dụng cho ví dụ này là một vi ảnh 2 µm x 2 µm từ kính hiển vi lực nguyên tử [AFM]. Đầu tiên, chúng tôi nhập các gói — hai gói mới mà chúng tôi sẽ thêm vào lần này là

# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
1, gói này sẽ giúp chúng tôi quản lý thanh màu cho các ô của mình và
# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
2, mà chúng tôi cần cho ô 3D của mình

# Import packages
%matplotlib inline
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

Bây giờ, chúng tôi sẽ tải dữ liệu AFM của mình, một lần nữa bằng cách sử dụng

# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
3 sẽ tải trực tiếp dữ liệu của chúng tôi vào mảng 2D
# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
4

# Import AFM data
afm_data = np.loadtxt['./afm.txt']

Sau đó, chúng tôi có thể kiểm tra một vài hàng mà dữ liệu đã tải của chúng tôi

# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]

Ta có một mảng 256 x 256 điểm với mỗi giá trị tương ứng với độ cao đo được [tính bằng mét] tại vị trí đó. Vì chúng tôi biết rằng dữ liệu của chúng tôi sẽ có ý nghĩa hơn nếu được trình bày bằng nanomet, chúng tôi có thể chia tỷ lệ tất cả các giá trị của mình theo tham số không đổi này

# Convert data to nanometers [nm]
afm_data *= [10**9]

Bây giờ chúng ta có thể tiếp tục và bắt đầu trực quan hóa dữ liệu của mình. Chúng tôi bắt đầu với việc đặt một số tham số chung [chỉnh sửa các tham số này theo ý muốn của bạn, nhưng đây là các cài đặt tôi sử dụng]

# Edit overall plot parameters# Font parameters
mpl.rcParams['font.family'] = 'Avenir'
mpl.rcParams['font.size'] = 18
# Edit axes parameters
mpl.rcParams['axes.linewidth'] = 2
# Tick properties
mpl.rcParams['xtick.major.size'] = 10
mpl.rcParams['xtick.major.width'] = 2
mpl.rcParams['xtick.direction'] = 'out'
mpl.rcParams['ytick.major.size'] = 10
mpl.rcParams['ytick.major.width'] = 2
mpl.rcParams['ytick.direction'] = 'out'
Bản đồ nhiệt

Để hiển thị bản đồ nhiệt, chúng tôi sẽ sử dụng chức năng

# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
5 để hiển thị dữ liệu của chúng tôi dưới dạng hình ảnh. Đầu tiên, chúng tôi tạo một hình và thêm một trục chính để hiển thị hình ảnh của chúng tôi. Ngoài ra, chúng tôi sẽ xóa các dấu kiểm vì chúng tôi sẽ thêm một thanh tỷ lệ

# Create figure and add axis
fig = plt.figure[figsize=[4,4]]
ax = fig.add_subplot[111]
# Remove x and y ticks
ax.xaxis.set_tick_params[size=0]
ax.yaxis.set_tick_params[size=0]
ax.set_xticks[[]]
ax.set_yticks[[]]

Bây giờ chúng tôi hiển thị hình ảnh của mình bằng lệnh sau

# Show AFM image
img = ax.imshow[afm_data, origin='lower', cmap='YlGnBu_r', extent=[0, 2, 0, 2], vmin=0, vmax=200]

# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
6 — hình ảnh thường được hiển thị với điểm gốc là góc trên cùng bên trái, vì vậy bằng cách sử dụng
# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
7, chúng tôi buộc điểm gốc là góc dưới cùng bên trái

# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
8 — bản đồ màu cho hình ảnh của chúng ta. Tất cả các bản đồ màu
# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
9 có sẵn có thể được tìm thấy ở đây và việc thêm
# Convert data to nanometers [nm]
afm_data *= [10**9]
0 vào bất kỳ tên bản đồ màu nào sẽ đảo ngược nó

# Convert data to nanometers [nm]
afm_data *= [10**9]
1 —
# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
5 sẽ vẽ hình ảnh của chúng tôi bằng pixel trừ khi chúng tôi cho nó biết những pixel này tương ứng với phạm vi nào. Trong trường hợp này, chúng tôi biết rằng hình ảnh của chúng tôi là 2 µm x 2 µm, vì vậy chúng tôi làm cho
# Convert data to nanometers [nm]
afm_data *= [10**9]
3 của chúng tôi bằng
# Convert data to nanometers [nm]
afm_data *= [10**9]
4

# Convert data to nanometers [nm]
afm_data *= [10**9]
5 — giá trị được đặt ở mức tối thiểu trong bản đồ màu của chúng tôi

# Convert data to nanometers [nm]
afm_data *= [10**9]
6 — giá trị được đặt ở mức tối đa trong bản đồ màu của chúng tôi

Sơ đồ hình ảnh của máy vi tính AFM của chúng tôi

Bây giờ, chúng ta nên thêm thanh tỷ lệ của mình, để bất kỳ ai nhìn vào cốt truyện đều có ý tưởng về tỷ lệ kích thước. Chúng tôi sẽ tạo thanh bằng cách sử dụng

# Convert data to nanometers [nm]
afm_data *= [10**9]
7 để tạo hình chữ nhật đầy, sau đó thêm nhãn văn bản ở trên cùng

# Create scale bar
ax.fill_between[x=[1.4, 1.9], y1=[0.1, 0.1], y2=[0.2, 0.2], color='white']

# Convert data to nanometers [nm]
afm_data *= [10**9]
8 — phạm vi x của hình được tô màu của chúng tôi [vì hình ảnh của chúng tôi đi từ [0, 2] phạm vi được chỉ định [1. 4, 1. 9] là 0. 5 µm hoặc 500 nm]

# Convert data to nanometers [nm]
afm_data *= [10**9]
9 — giá trị y dưới cùng [tương ứng với các giá trị của
# Convert data to nanometers [nm]
afm_data *= [10**9]
8] của hình dạng đã điền của chúng ta

# Edit overall plot parameters# Font parameters
mpl.rcParams['font.family'] = 'Avenir'
mpl.rcParams['font.size'] = 18
# Edit axes parameters
mpl.rcParams['axes.linewidth'] = 2
# Tick properties
mpl.rcParams['xtick.major.size'] = 10
mpl.rcParams['xtick.major.width'] = 2
mpl.rcParams['xtick.direction'] = 'out'
mpl.rcParams['ytick.major.size'] = 10
mpl.rcParams['ytick.major.width'] = 2
mpl.rcParams['ytick.direction'] = 'out'
1 — giá trị y trên cùng [tương ứng với các giá trị của
# Convert data to nanometers [nm]
afm_data *= [10**9]
8] của hình đã điền của chúng ta

ax.text[x=1.65, y=0.25, s='500 nm', va='bottom', ha='center', color='white', size=20]

# Convert data to nanometers [nm]
afm_data *= [10**9]
8 — vị trí x của văn bản

# Edit overall plot parameters# Font parameters
mpl.rcParams['font.family'] = 'Avenir'
mpl.rcParams['font.size'] = 18
# Edit axes parameters
mpl.rcParams['axes.linewidth'] = 2
# Tick properties
mpl.rcParams['xtick.major.size'] = 10
mpl.rcParams['xtick.major.width'] = 2
mpl.rcParams['xtick.direction'] = 'out'
mpl.rcParams['ytick.major.size'] = 10
mpl.rcParams['ytick.major.width'] = 2
mpl.rcParams['ytick.direction'] = 'out'
4 — vị trí y của văn bản

# Edit overall plot parameters# Font parameters
mpl.rcParams['font.family'] = 'Avenir'
mpl.rcParams['font.size'] = 18
# Edit axes parameters
mpl.rcParams['axes.linewidth'] = 2
# Tick properties
mpl.rcParams['xtick.major.size'] = 10
mpl.rcParams['xtick.major.width'] = 2
mpl.rcParams['xtick.direction'] = 'out'
mpl.rcParams['ytick.major.size'] = 10
mpl.rcParams['ytick.major.width'] = 2
mpl.rcParams['ytick.direction'] = 'out'
5 — chuỗi văn bản

# Edit overall plot parameters# Font parameters
mpl.rcParams['font.family'] = 'Avenir'
mpl.rcParams['font.size'] = 18
# Edit axes parameters
mpl.rcParams['axes.linewidth'] = 2
# Tick properties
mpl.rcParams['xtick.major.size'] = 10
mpl.rcParams['xtick.major.width'] = 2
mpl.rcParams['xtick.direction'] = 'out'
mpl.rcParams['ytick.major.size'] = 10
mpl.rcParams['ytick.major.width'] = 2
mpl.rcParams['ytick.direction'] = 'out'
6 — căn chỉnh theo chiều dọc [
# Edit overall plot parameters# Font parameters
mpl.rcParams['font.family'] = 'Avenir'
mpl.rcParams['font.size'] = 18
# Edit axes parameters
mpl.rcParams['axes.linewidth'] = 2
# Tick properties
mpl.rcParams['xtick.major.size'] = 10
mpl.rcParams['xtick.major.width'] = 2
mpl.rcParams['xtick.direction'] = 'out'
mpl.rcParams['ytick.major.size'] = 10
mpl.rcParams['ytick.major.width'] = 2
mpl.rcParams['ytick.direction'] = 'out'
7 có nghĩa là
# Edit overall plot parameters# Font parameters
mpl.rcParams['font.family'] = 'Avenir'
mpl.rcParams['font.size'] = 18
# Edit axes parameters
mpl.rcParams['axes.linewidth'] = 2
# Tick properties
mpl.rcParams['xtick.major.size'] = 10
mpl.rcParams['xtick.major.width'] = 2
mpl.rcParams['xtick.direction'] = 'out'
mpl.rcParams['ytick.major.size'] = 10
mpl.rcParams['ytick.major.width'] = 2
mpl.rcParams['ytick.direction'] = 'out'
4 tương ứng với phần dưới cùng của văn bản]

# Edit overall plot parameters# Font parameters
mpl.rcParams['font.family'] = 'Avenir'
mpl.rcParams['font.size'] = 18
# Edit axes parameters
mpl.rcParams['axes.linewidth'] = 2
# Tick properties
mpl.rcParams['xtick.major.size'] = 10
mpl.rcParams['xtick.major.width'] = 2
mpl.rcParams['xtick.direction'] = 'out'
mpl.rcParams['ytick.major.size'] = 10
mpl.rcParams['ytick.major.width'] = 2
mpl.rcParams['ytick.direction'] = 'out'
9 — căn lề ngang [
# Create figure and add axis
fig = plt.figure[figsize=[4,4]]
ax = fig.add_subplot[111]
# Remove x and y ticks
ax.xaxis.set_tick_params[size=0]
ax.yaxis.set_tick_params[size=0]
ax.set_xticks[[]]
ax.set_yticks[[]]
0 có nghĩa là
# Convert data to nanometers [nm]
afm_data *= [10**9]
8 tương ứng với trung tâm của văn bản]

Ảnh hiển vi AFM có thêm thanh tỷ lệ

Cuối cùng, chúng ta có thể thêm một thanh màu để hiển thị màu sắc trong hình ảnh của chúng ta tương ứng với giá trị chiều cao như thế nào. Đầu tiên, chúng tôi tạo một đối tượng trục mới cho thanh màu, chúng tôi thực hiện bằng cách nối thêm một trục mới ở bên phải của trục ban đầu bằng cách sử dụng hàm

# Create figure and add axis
fig = plt.figure[figsize=[4,4]]
ax = fig.add_subplot[111]
# Remove x and y ticks
ax.xaxis.set_tick_params[size=0]
ax.yaxis.set_tick_params[size=0]
ax.set_xticks[[]]
ax.set_yticks[[]]
2. Chúng tôi chuyển đối tượng trục ban đầu của mình
# Create figure and add axis
fig = plt.figure[figsize=[4,4]]
ax = fig.add_subplot[111]
# Remove x and y ticks
ax.xaxis.set_tick_params[size=0]
ax.yaxis.set_tick_params[size=0]
ax.set_xticks[[]]
ax.set_yticks[[]]
3 cho hàm

# Create axis for colorbar
cbar_ax = make_axes_locatable[ax].append_axes[position='right', size='5%', pad=0.1]

# Create figure and add axis
fig = plt.figure[figsize=[4,4]]
ax = fig.add_subplot[111]
# Remove x and y ticks
ax.xaxis.set_tick_params[size=0]
ax.yaxis.set_tick_params[size=0]
ax.set_xticks[[]]
ax.set_yticks[[]]
4 — nơi nối các trục tiếp theo, trong trường hợp này là ở bên phải của ảnh gốc

# Create figure and add axis
fig = plt.figure[figsize=[4,4]]
ax = fig.add_subplot[111]
# Remove x and y ticks
ax.xaxis.set_tick_params[size=0]
ax.yaxis.set_tick_params[size=0]
ax.set_xticks[[]]
ax.set_yticks[[]]
5 — kích thước của các trục mới dọc theo hướng
# Create figure and add axis
fig = plt.figure[figsize=[4,4]]
ax = fig.add_subplot[111]
# Remove x and y ticks
ax.xaxis.set_tick_params[size=0]
ax.yaxis.set_tick_params[size=0]
ax.set_xticks[[]]
ax.set_yticks[[]]
4, so với các trục ban đầu [5% chiều rộng hình ảnh]

# Create figure and add axis
fig = plt.figure[figsize=[4,4]]
ax = fig.add_subplot[111]
# Remove x and y ticks
ax.xaxis.set_tick_params[size=0]
ax.yaxis.set_tick_params[size=0]
ax.set_xticks[[]]
ax.set_yticks[[]]
7 — phần đệm [theo tọa độ tuyệt đối] giữa hai trục

Bây giờ, chúng ta biến đối tượng trục mới này thành một thanh màu

# Import AFM data
afm_data = np.loadtxt['./afm.txt']
0

# Create figure and add axis
fig = plt.figure[figsize=[4,4]]
ax = fig.add_subplot[111]
# Remove x and y ticks
ax.xaxis.set_tick_params[size=0]
ax.yaxis.set_tick_params[size=0]
ax.set_xticks[[]]
ax.set_yticks[[]]
8 — hình ảnh/âm mưu để ánh xạ tới thanh màu [chúng tôi đã tạo
# Create figure and add axis
fig = plt.figure[figsize=[4,4]]
ax = fig.add_subplot[111]
# Remove x and y ticks
ax.xaxis.set_tick_params[size=0]
ax.yaxis.set_tick_params[size=0]
ax.set_xticks[[]]
ax.set_yticks[[]]
9 khi chúng tôi sử dụng
# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
5 trước đó]

# Show AFM image
img = ax.imshow[afm_data, origin='lower', cmap='YlGnBu_r', extent=[0, 2, 0, 2], vmin=0, vmax=200]
1 — trục sử dụng cho thanh màu

Cuối cùng, chúng tôi điều chỉnh các dấu tick và nhãn cho thanh màu

# Import AFM data
afm_data = np.loadtxt['./afm.txt']
1

Ảnh hiển vi AFM với thanh tỷ lệ và thanh màu

Giống như trong bản đồ địa hình được tìm thấy ở hầu hết các lối mòn đi bộ đường dài, chúng tôi cũng có thể trình bày dữ liệu ba chiều với các đường đồng mức có cường độ không đổi. Bây giờ chúng ta sẽ vẽ cùng một dữ liệu AFM bằng cách sử dụng biểu đồ đường viền

Chúng tôi sử dụng mã giống như trước, với dòng sau đã thay đổi [Tôi đã thêm

# Show AFM image
img = ax.imshow[afm_data, origin='lower', cmap='YlGnBu_r', extent=[0, 2, 0, 2], vmin=0, vmax=200]
2 để đảm bảo rằng biểu đồ đường đồng mức nằm bên dưới thanh tỷ lệ vì các số thứ tự z thấp hơn được vẽ trước]

# Import AFM data
afm_data = np.loadtxt['./afm.txt']
2

Biểu đồ đường viền vi mô AFM với thanh tỷ lệ và thanh màu

Nếu chúng ta sử dụng

# Show AFM image
img = ax.imshow[afm_data, origin='lower', cmap='YlGnBu_r', extent=[0, 2, 0, 2], vmin=0, vmax=200]
3 thay vì
# Show AFM image
img = ax.imshow[afm_data, origin='lower', cmap='YlGnBu_r', extent=[0, 2, 0, 2], vmin=0, vmax=200]
4, chúng ta có thể tạo các đường bao đầy thay vì chỉ các đường bao

# Import AFM data
afm_data = np.loadtxt['./afm.txt']
3

Sơ đồ đường viền chứa đầy vi đồ AFM với thanh tỷ lệ và thanh màu

Trong trường hợp này, rất nhiều chi tiết tốt hơn từ

# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
5 không được ghi lại đầy đủ trong
# Show AFM image
img = ax.imshow[afm_data, origin='lower', cmap='YlGnBu_r', extent=[0, 2, 0, 2], vmin=0, vmax=200]
4 hoặc
# Show AFM image
img = ax.imshow[afm_data, origin='lower', cmap='YlGnBu_r', extent=[0, 2, 0, 2], vmin=0, vmax=200]
3. Nếu bạn có dữ liệu khá mượt mà không có nhiều chi tiết nhỏ hơn, hình ảnh đường viền có thể trông đẹp hơn bản đồ nhiệt. Cuối cùng, bạn muốn trình bày dữ liệu của mình theo cách minh bạch và đơn giản nhất có thể, vì vậy trong trường hợp này, bản đồ nhiệt với thanh màu có lẽ là tốt nhất

Cốt truyện 3D

Cho đến thời điểm này, chúng tôi đã giới hạn các ô của mình ở hai chiều và sử dụng thang màu để cho phép người đọc suy ra cường độ. Nếu chúng tôi muốn hiểu rõ hơn về các giá trị cường độ này, chúng tôi thực sự có thể vẽ dữ liệu của mình ở dạng 3D

Chúng tôi bắt đầu bằng cách tạo một trục 3D với đoạn mã sau, chìa khóa ở đây là chúng tôi đang sử dụng

# Show AFM image
img = ax.imshow[afm_data, origin='lower', cmap='YlGnBu_r', extent=[0, 2, 0, 2], vmin=0, vmax=200]
8 khi chúng tôi tạo đối tượng trục của mình

# Import AFM data
afm_data = np.loadtxt['./afm.txt']
4

Đối tượng trục 3D trống

Các ô màu xám và lưới trục tạo thêm sự lộn xộn cho biểu đồ của chúng ta, vì vậy hãy loại bỏ chúng. Ngoài ra, tôi sẽ thêm lại thanh màu cho chiều cao - trục z sẽ bị nén rất nhiều do chế độ xem phối cảnh, vì vậy tôi sẽ xóa nó

# Import AFM data
afm_data = np.loadtxt['./afm.txt']
5

Trục 3D trống không có ô nền và trục z

Đối với biểu đồ bề mặt, chúng ta cần các mảng 2D có giá trị x và y tương ứng với các giá trị cường độ. Chúng tôi làm điều này bằng cách tạo một lưới lưới với ____11_______9 — đầu vào của chúng tôi cho chức năng này là một mảng các giá trị x và giá trị y để lặp lại trong lưới, mà chúng tôi sẽ tạo bằng cách sử dụng ____24_______0

# Import AFM data
afm_data = np.loadtxt['./afm.txt']
6

Bây giờ chúng ta đã có lưới lưới, chúng ta có thể vẽ dữ liệu 3D của mình

# Import AFM data
afm_data = np.loadtxt['./afm.txt']
7

# Create scale bar
ax.fill_between[x=[1.4, 1.9], y1=[0.1, 0.1], y2=[0.2, 0.2], color='white']
1 — lưới các giá trị x

# Create scale bar
ax.fill_between[x=[1.4, 1.9], y1=[0.1, 0.1], y2=[0.2, 0.2], color='white']
2 — lưới các giá trị y

# Create scale bar
ax.fill_between[x=[1.4, 1.9], y1=[0.1, 0.1], y2=[0.2, 0.2], color='white']
3 — lưới các giá trị z

Sơ đồ 3D của máy vi tính AFM

Bây giờ, chúng ta có thể điều chỉnh chế độ xem của cốt truyện - có ba tham số mà chúng ta kiểm soát cho điều này. độ cao, góc phương vị [trong mặt phẳng x-y] và khoảng cách từ các trục, gần tương ứng với các giá trị hệ tọa độ cầu lần lượt là φ, θ và r. Tôi đang đặt góc phương vị thành 225˚ vì chúng tôi muốn trục x và y gặp nhau tại [0, 0]

# Import AFM data
afm_data = np.loadtxt['./afm.txt']
8

Thêm thanh màu

# Import AFM data
afm_data = np.loadtxt['./afm.txt']
9

# Create scale bar
ax.fill_between[x=[1.4, 1.9], y1=[0.1, 0.1], y2=[0.2, 0.2], color='white']
4 — mức độ thu nhỏ thanh màu so với kích thước mặc định của nó

Cuối cùng, chúng tôi chỉnh sửa một số tính thẩm mỹ — các dấu kiểm trên trục x và y, giới hạn trục và nhãn trục

# Print some of the AFM data
print[afm_data[0:5]]
>>> [[4.8379e-08 4.7485e-08 4.6752e-08 .. 6.0293e-08 5.7804e-08 5.4779e-08]
[5.0034e-08 4.9139e-08 4.7975e-08 .. 5.7221e-08 5.4744e-08 5.1316e-08]
[5.2966e-08 5.2099e-08 5.1076e-08 .. 5.4061e-08 5.0873e-08 4.7128e-08]
[5.7146e-08 5.6070e-08 5.4871e-08 .. 5.1104e-08 4.6898e-08 4.1961e-08]
[6.2167e-08 6.0804e-08 5.9588e-08 .. 4.7038e-08 4.2115e-08 3.7258e-08]]
0

Sơ đồ 3D của máy vi tính AFM với thanh màu

Biểu đồ này cho phép người đọc thực sự nhìn thấy các dao động độ cao ngoài việc sử dụng màu sắc cho các giá trị cường độ. Tuy nhiên, một bộ dữ liệu ồn ào hơn có thể dẫn đến một cốt truyện 3D rất lộn xộn

Phần kết luận

Tôi hy vọng hướng dẫn này hữu ích trong việc giải quyết các phương pháp khác nhau để vẽ các bộ dữ liệu ba chiều. Các ví dụ có sẵn tại kho lưu trữ Github này. Cảm ơn vì đã đọc

Làm cách nào để tạo biểu đồ bề mặt 3D bằng Python?

Chúng ta cũng có thể vẽ các bề mặt 3D bằng Python, chức năng vẽ các bề mặt 3D là plot_surface[X,Y,Z] , trong đó . Các chức năng vẽ đồ thị bề mặt phổ biến nhất là lướt sóng và đường viền. THỬ NÓ.

Imshow vs show trong Python là gì?

show[] hiển thị hình [và đi vào vòng lặp chính của bất kỳ phụ trợ gui nào bạn đang sử dụng] . Bạn không nên gọi nó cho đến khi bạn đã vẽ sơ đồ mọi thứ và muốn xem chúng được hiển thị. plt. imshow[] vẽ một hình ảnh trên hình hiện tại [tạo hình nếu không có hình hiện tại].

Imshow có nghĩa là gì trong Python?

imshow[ I ] hiển thị hình ảnh thang độ xám I trong một hình . imshow sử dụng phạm vi hiển thị mặc định cho kiểu dữ liệu hình ảnh và tối ưu hóa các thuộc tính đối tượng hình, trục và hình ảnh để hiển thị hình ảnh.

Chủ Đề