Hướng dẫn change size of 3d plot python - thay đổi kích thước của python cốt truyện 3d

Ví dụ mã dưới đây cung cấp một cách để mở rộng từng trục so với các trục khác. Tuy nhiên, để làm như vậy, bạn cần sửa đổi chức năng Axes3D.Get_Proj. Dưới đây là một ví dụ dựa trên ví dụ được cung cấp bởi matplot lib: http://matplotlib.org/1.4.0/mpl_toolkits/mplot3d/tutorial.html#line-plots

(Có một phiên bản ngắn hơn ở cuối câu trả lời này)

from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d import proj3d

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt

#Make sure these are floating point values:                                                                                                                                                                                              
scale_x = 1.0
scale_y = 2.0
scale_z = 3.0

#Axes are scaled down to fit in scene                                                                                                                                                                                                    
max_scale=max(scale_x, scale_y, scale_z)

scale_x=scale_x/max_scale
scale_y=scale_y/max_scale
scale_z=scale_z/max_scale

#Create scaling matrix                                                                                                                                                                                                                   
scale = np.array([[scale_x,0,0,0],
                  [0,scale_y,0,0],
                  [0,0,scale_z,0],
                  [0,0,0,1]])
print scale

def get_proj_scale(self):
    """                                                                                                                                                                                                                                    
    Create the projection matrix from the current viewing position.                                                                                                                                                                        

    elev stores the elevation angle in the z plane                                                                                                                                                                                         
    azim stores the azimuth angle in the x,y plane                                                                                                                                                                                         

    dist is the distance of the eye viewing point from the object                                                                                                                                                                          
    point.                                                                                                                                                                                                                                 

    """
    relev, razim = np.pi * self.elev/180, np.pi * self.azim/180

    xmin, xmax = self.get_xlim3d()
    ymin, ymax = self.get_ylim3d()
    zmin, zmax = self.get_zlim3d()

    # transform to uniform world coordinates 0-1.0,0-1.0,0-1.0                                                                                                                                                                             
    worldM = proj3d.world_transformation(
        xmin, xmax,
        ymin, ymax,
        zmin, zmax)

    # look into the middle of the new coordinates                                                                                                                                                                                          
    R = np.array([0.5, 0.5, 0.5])

    xp = R[0] + np.cos(razim) * np.cos(relev) * self.dist
    yp = R[1] + np.sin(razim) * np.cos(relev) * self.dist
    zp = R[2] + np.sin(relev) * self.dist
    E = np.array((xp, yp, zp))

    self.eye = E
    self.vvec = R - E
    self.vvec = self.vvec / proj3d.mod(self.vvec)

    if abs(relev) > np.pi/2:
    # upside down                                                                                                                                                                                                                          
      V = np.array((0, 0, -1))
    else:
      V = np.array((0, 0, 1))
    zfront, zback = -self.dist, self.dist

    viewM = proj3d.view_transformation(E, R, V)
    perspM = proj3d.persp_transformation(zfront, zback)
    M0 = np.dot(viewM, worldM)
    M = np.dot(perspM, M0)

    return np.dot(M, scale);

Axes3D.get_proj=get_proj_scale

"""
You need to include all the code above.
From here on you should be able to plot as usual.
"""

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure(figsize=(5,5))
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
ax.legend()

plt.show()

Sản lượng tiêu chuẩn:

Hướng dẫn change size of 3d plot python - thay đổi kích thước của python cốt truyện 3d

Được chia tỷ lệ bởi (1, 2, 3):

Hướng dẫn change size of 3d plot python - thay đổi kích thước của python cốt truyện 3d

Được chia tỷ lệ bởi (1, 1, 3):

Hướng dẫn change size of 3d plot python - thay đổi kích thước của python cốt truyện 3d

Lý do tôi đặc biệt thích phương pháp này, hoán đổi z và x, tỷ lệ theo (3, 1, 1):

Hướng dẫn change size of 3d plot python - thay đổi kích thước của python cốt truyện 3d

Dưới đây là phiên bản ngắn hơn của mã.

from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d import proj3d

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure(figsize=(5,5))
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)


"""                                                                                                                                                    
Scaling is done from here...                                                                                                                           
"""
x_scale=1
y_scale=1
z_scale=2

scale=np.diag([x_scale, y_scale, z_scale, 1.0])
scale=scale*(1.0/scale.max())
scale[3,3]=1.0

def short_proj():
  return np.dot(Axes3D.get_proj(ax), scale)

ax.get_proj=short_proj
"""                                                                                                                                                    
to here                                                                                                                                                
"""

ax.plot(z, y, x, label='parametric curve')
ax.legend()

plt.show()

Làm thế nào để bạn tăng kích thước của âm mưu 3D trong Python?

Matplotlib với Python..
Tạo một hình hoặc kích hoạt một hình hiện có bằng phương thức Hình () ..
Phiên bản trục 3D Instantaite sử dụng lớp Axes3d () ..
Để chia tỷ lệ trục x, sử dụng phương thức set_xlim3d () ..
Để mở rộng trục y, hãy sử dụng phương thức set_ylim3d () ..
Để tỷ lệ trục z, sử dụng phương thức set_zlim3d () ..
Để hiển thị cốt truyện, sử dụng phương thức show () ..

Làm cách nào để khắc phục kích thước của một âm mưu trong Python?

Matplotlib với Python..
Để kiểm tra kích thước hình mặc định, sử dụng PLT.RCPARAM ["Hình. Hình"] trên vỏ ipython ..
Bây giờ để đặt kích thước hình, ghi đè PLT.rcparams ["Hình. Hình"] biến với một tuple, tức là, (20, 10) ..
Sau khi ghi đè PLT.rcparams ["Hình ..

Làm thế nào để bạn thay đổi quy mô của một âm mưu trong Python?

Để thay đổi phạm vi của trục X và Y, chúng ta có thể sử dụng các phương thức xlim () và ylim ().use xlim() and ylim() methods.

Làm thế nào để bạn thay đổi kích thước của một con số trong Python?

Đặt đối số Figsize trước tiên, cách dễ nhất để thay đổi kích thước của hình là sử dụng đối số hình.Bạn có thể sử dụng đối số này trong việc khởi tạo của Pyplot hoặc trên một đối tượng hình hiện có.Ở đây, chúng tôi đã gán rõ ràng giá trị trả về của hàm hình () cho một đối tượng hình.use the figsize argument. You can use this argument either in Pyplot's initialization or on an existing Figure object. Here, we've explicitly assigned the return value of the figure() function to a Figure object.