Biểu đồ bề mặt 4d Python

Tôi đang cố gắng vẽ một bề mặt 3d trong đó mỗi chiều trong số ba chiều trong một mảng giá trị riêng biệt và màu của bề mặt tại mỗi tọa độ là một hàm của x, y, z. Một loại numpy. pcolormesh nhưng ở dạng 4D, thay vì 3D. Cốt truyện 3D được đưa ra bởi

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
fig = plt.figure[]
ax = fig.gca[projection='3d']
x = np.logspace[-1.,np.log10[5],50]
y = np.linspace[6,9,50]
z = np.linspace[-1,1,50]
colors = LikeBeta[y,range[50],range[50]]
ax.plot_trisurf[x,y,z,cmap=colors,linewidth=0.2]

ở đâu

def LikeBeta[rho0,r0,beta]:
    M0 = 10**rho0*r0_array[r0]**3
    I = cst*M0*sigma_los_beta[beta,:,r0]
    S = dv**2+I
    res = [np.log[S] + [v-u]**2/S].sum[]
    return res/2.

Có thể là

----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4     I = cst*M0*sigma_los_beta[beta,:,r0]
    ValueError: operands could not be broadcast together with shapes [50,] [50,353]
2 sai, nhưng vấn đề nằm ở chỗ khác. Tôi nhận được lỗi sau đây

----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4     I = cst*M0*sigma_los_beta[beta,:,r0]
    ValueError: operands could not be broadcast together with shapes [50,] [50,353]

Thật vậy,

----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4     I = cst*M0*sigma_los_beta[beta,:,r0]
    ValueError: operands could not be broadcast together with shapes [50,] [50,353]
3 là một mảng tôi đánh giá riêng và có hình dạng
----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4     I = cst*M0*sigma_los_beta[beta,:,r0]
    ValueError: operands could not be broadcast together with shapes [50,] [50,353]
4 và 353 đó là dữ liệu mà tôi phải có

Làm cách nào tôi có thể chuyển chức năng này thành một biểu mẫu tương thích với các mục nhập khác của

----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4     I = cst*M0*sigma_los_beta[beta,:,r0]
    ValueError: operands could not be broadcast together with shapes [50,] [50,353]
5?

Xin lỗi, nhưng tôi không thể cung cấp mã làm việc tối thiểu, vì dv,v và u là dữ liệu. Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn. Chúc mừng

Câu trả lời này giải quyết vấn đề về sơ đồ bề mặt 4d. Nó sử dụng chức năng

----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4     I = cst*M0*sigma_los_beta[beta,:,r0]
    ValueError: operands could not be broadcast together with shapes [50,] [50,353]
6 của matplotlib thay vì
----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4     I = cst*M0*sigma_los_beta[beta,:,r0]
    ValueError: operands could not be broadcast together with shapes [50,] [50,353]
5

Về cơ bản, bạn muốn định hình lại các biến x, y và z của mình thành các mảng 2d có cùng kích thước. Để thêm thứ nguyên thứ tư dưới dạng bản đồ màu, bạn phải cung cấp một mảng 2d khác có cùng thứ nguyên với các biến trục của bạn

Dưới đây là mã ví dụ cho một ô 3d với bản đồ màu tương ứng với các giá trị x. Đối số

def LikeBeta[rho0,r0,beta]:
    M0 = 10**rho0*r0_array[r0]**3
    I = cst*M0*sigma_los_beta[beta,:,r0]
    S = dv**2+I
    res = [np.log[S] + [v-u]**2/S].sum[]
    return res/2.
0 được sử dụng để thay đổi bản đồ màu theo ý thích của bạn. Lưu ý rằng giá trị của nó được lấy từ hàm
def LikeBeta[rho0,r0,beta]:
    M0 = 10**rho0*r0_array[r0]**3
    I = cst*M0*sigma_los_beta[beta,:,r0]
    S = dv**2+I
    res = [np.log[S] + [v-u]**2/S].sum[]
    return res/2.
1 trong lớp
def LikeBeta[rho0,r0,beta]:
    M0 = 10**rho0*r0_array[r0]**3
    I = cst*M0*sigma_los_beta[beta,:,r0]
    S = dv**2+I
    res = [np.log[S] + [v-u]**2/S].sum[]
    return res/2.
2

import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# domains
x = np.logspace[-1.,np.log10[5],50] # [0.1, 5]
y = np.linspace[6,9,50]             # [6, 9]
z = np.linspace[-1,1,50]            # [-1, 1]

# convert to 2d matrices
Z = np.outer[z.T, z]        # 50x50
X, Y = np.meshgrid[x, y]    # 50x50

# fourth dimention - colormap
# create colormap according to x-value [can use any 50x50 array]
color_dimension = X # change to desired fourth dimension
minn, maxx = color_dimension.min[], color_dimension.max[]
norm = matplotlib.colors.Normalize[minn, maxx]
m = plt.cm.ScalarMappable[norm=norm, cmap='jet']
m.set_array[[]]
fcolors = m.to_rgba[color_dimension]

# plot
fig = plt.figure[]
ax = fig.gca[projection='3d']
ax.plot_surface[X,Y,Z, rstride=1, cstride=1, facecolors=fcolors, vmin=minn, vmax=maxx, shade=False]
ax.set_xlabel['x']
ax.set_ylabel['y']
ax.set_zlabel['z']
fig.canvas.show[]

rsn = datasets.fetch_atlas_smith_2009[]['rsn10'] rsn

Datasets are stored in: ['/home/yasmin/nilearn_data']
0

Nó là một tập tin nifti 4D. Chúng tôi tải nó vào bộ nhớ để in hình dạng của nó

Datasets are stored in: ['/home/yasmin/nilearn_data']
1

Datasets are stored in: ['/home/yasmin/nilearn_data']
2

Chúng tôi có thể truy xuất tập đầu tiên [lưu ý rằng việc lập chỉ mục Python bắt đầu từ 0]

Datasets are stored in: ['/home/yasmin/nilearn_data']
3

Datasets are stored in: ['/home/yasmin/nilearn_data']
4

first_rsn là hình ảnh 3D

Sau đó chúng ta có thể vẽ nó

Datasets are stored in: ['/home/yasmin/nilearn_data']
5

Datasets are stored in: ['/home/yasmin/nilearn_data']
6

Lặp lại trên tất cả các ổ đĩa trong tệp 4D#

Nếu chúng ta muốn vẽ tất cả các ổ đĩa trong tệp 4D này, chúng ta có thể sử dụng iter_img để lặp lại chúng

Sau đó, chúng tôi đưa ra một vài đối số cho plot_stat_map để có một màn hình nhỏ gọn hơn

Datasets are stored in: ['/home/yasmin/nilearn_data']
7

Lặp qua các ổ đã chọn trong tệp 4D#

Nếu chúng ta muốn vẽ các khối đã chọn trong tệp 4D này, chúng ta có thể sử dụng index_img với hàm tạo lát cắt để chọn các khối mong muốn

Sau đó, chúng tôi sẽ sử dụng iter_img để lặp qua chúng theo cùng một công thức như trước

Datasets are stored in: ['/home/yasmin/nilearn_data']
8

Nếu bạn chưa quen với Python, một điều cần lưu ý là hàm tạo lát sử dụng lập chỉ mục dựa trên 0. Bạn có thể xác nhận điều này bằng cách khớp các lát cắt này với ô trước đó ở trên

Datasets are stored in: ['/home/yasmin/nilearn_data']
9

âm mưu. show rất hữu ích để buộc hiển thị các số liệu khi chạy bên ngoài IPython

def LikeBeta[rho0,r0,beta]:
    M0 = 10**rho0*r0_array[r0]**3
    I = cst*M0*sigma_los_beta[beta,:,r0]
    S = dv**2+I
    res = [np.log[S] + [v-u]**2/S].sum[]
    return res/2.
80


Tóm lại, hình ảnh thần kinh [niimgs như chúng tôi gọi chúng] có nhiều hương vị khác nhau

  • Hình ảnh 3D, chỉ chứa một khối lượng não

  • Hình ảnh 4D, chứa nhiều khối lượng não

Thông tin chi tiết về các định dạng đầu vào trong nilearn cho hình ảnh 3D và 4D được cung cấp trong phần tài liệu. Nhập dữ liệu. tên tệp hoặc đối tượng hình ảnh .

Các hàm chấp nhận hình ảnh 3D hoặc 4D và chúng ta cần sử dụng một mặt

def LikeBeta[rho0,r0,beta]:
    M0 = 10**rho0*r0_array[r0]**3
    I = cst*M0*sigma_los_beta[beta,:,r0]
    S = dv**2+I
    res = [np.log[S] + [v-u]**2/S].sum[]
    return res/2.
81 hoặc
def LikeBeta[rho0,r0,beta]:
    M0 = 10**rho0*r0_array[r0]**3
    I = cst*M0*sigma_los_beta[beta,:,r0]
    S = dv**2+I
    res = [np.log[S] + [v-u]**2/S].sum[]
    return res/2.
82 để chia nhỏ hình ảnh 4D thành hình ảnh 3D và mặt khác
def LikeBeta[rho0,r0,beta]:
    M0 = 10**rho0*r0_array[r0]**3
    I = cst*M0*sigma_los_beta[beta,:,r0]
    S = dv**2+I
    res = [np.log[S] + [v-u]**2/S].sum[]
    return res/2.
83 để nhóm danh sách hình ảnh 3D thành hình ảnh 4D

Bạn có thể vẽ đồ thị 4D bằng Python không?

MatPlotLib với Python . Tạo một hình mới hoặc kích hoạt một hình hiện có. To make a 4D plot, we can create x, y, z and c standard data points. Create a new figure or activate an existing figure.

Bạn có thể vẽ đồ thị 3D bằng Python không?

Chúng ta cũng có thể vẽ các bề mặt 3D bằng Python , hàm vẽ các bề mặt 3D là plot_surface[X,Y,Z], trong đó X và Y là các mảng đầu ra từ lưới lưới . 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.

Chủ Đề