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 data1, 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[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]]
# Print some of the AFM data2, mà chúng tôi cần cho ô 3D của mình
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]]
# 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 data3 sẽ tải trực tiếp dữ liệu của chúng tôi vào mảng 2D
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]]
# Print some of the AFM data4
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]]
# 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 parametersBản đồ nhiệt
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'
Để hiển thị bản đồ nhiệt, chúng tôi sẽ sử dụng chức năng
# Print some of the AFM data5 để 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ệ
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]]
# 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 data6 — 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[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]]
# Print some of the AFM data7, chúng tôi buộc điểm gốc là góc dưới cùng bên trái
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]]
# Print some of the AFM data8 — bản đồ màu cho hình ảnh của chúng ta. Tất cả các bản đồ màu
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]]
# Print some of the AFM data9 có sẵn có thể được tìm thấy ở đây và việc thêm
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]]
# 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 data5 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
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]]
# 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ôiSơ đồ 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 parameters1 — giá trị y trên cùng [tương ứng với các giá trị của
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'
# Convert data to nanometers [nm]
afm_data *= [10**9]
8] của hình đã điền của chúng taax.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 parameters4 — vị trí y của văn bản
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'
# Edit overall plot parameters# Font parameters5 — chuỗi văn bản
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'
# Edit overall plot parameters# Font parameters6 — căn chỉnh theo chiều dọc [
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'
# Edit overall plot parameters# Font parameters7 có nghĩa là
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'
# Edit overall plot parameters# Font parameters4 tương ứng với phần dưới cùng của văn bản]
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'
# Edit overall plot parameters# Font parameters9 — căn lề ngang [
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'
# Create figure and add axis0 có nghĩa là
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[[]]
# 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 axis2. Chúng tôi chuyển đối tượng trục ban đầu của mình
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[[]]
# Create figure and add axis3 cho hàm
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[[]]
# Create axis for colorbar
cbar_ax = make_axes_locatable[ax].append_axes[position='right', size='5%', pad=0.1]
# Create figure and add axis4 — 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
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[[]]
# Create figure and add axis5 — kích thước của các trục mới dọc theo hướng
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[[]]
# Create figure and add axis4, so với các trục ban đầu [5% chiều rộng hình ảnh]
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[[]]
# Create figure and add axis7 — phần đệm [theo tọa độ tuyệt đối] giữa hai trục
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 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 axis8 — hình ảnh/âm mưu để ánh xạ tới thanh màu [chúng tôi đã tạo
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[[]]
# Create figure and add axis9 khi chúng tôi sử dụng
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[[]]
# Print some of the AFM data5 trước đó]
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]]
# 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àuCuố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']
2Biể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']
3Sơ đồ đườ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 data5 không được ghi lại đầy đủ trong
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]]
# 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ấtCốt truyện 3DCho đế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']
4Cá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']
5Trụ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']
6Bâ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ị zSơ đồ 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']
8Thê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 data0
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]]
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ậnTô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