matplotlib 相关问题

Matplotlib是Python的绘图库,可以交互使用或嵌入到独立的GUI中。其紧凑的“pyplot”界面类似于MATLAB®的绘图功能。

我正在用

graph = nx.DiGraph() graph.add_edge("a", "b") graph.add_edge("a", "a") nx.draw(graph) plt.show()

回答 1 投票 0

回答 2 投票 0


如何改变matplotlib

这是我的代码。 时间= sig [:,0]#数据第一列:时间 位移= sig [:,1]#数据第二colu ...

回答 1 投票 0


matplotlib多边形:旋转后多边形偏斜

import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from mpl_toolkits.mplot3d.art3d import Poly3DCollection import numpy as np # Create a new figure with 3D projection fig = plt.figure() ax = fig.add_subplot(111, projection='3d') def rotate_shape_to_normal(vertices, face_indices, target_normal): """ Rotate vertices so that the face specified by face_indices becomes normal to target_normal. :param vertices: List or numpy array of 3D points defining the shape :param face_indices: Indices of the vertices that form the face to align :param target_normal: The vector to which the face should be normal :return: Rotated vertices """ vertices = np.array(vertices) # Convert to numpy array if it isn't already face_vertices = vertices[face_indices] # Calculate the normal vector of the face v1 = face_vertices[1] - face_vertices[0] v2 = face_vertices[2] - face_vertices[0] face_normal = np.cross(v1, v2) print(face_normal) ax.quiver(*face_vertices[0], *face_normal, color='r', length=2) ax.quiver(*face_vertices[0], *target_normal, color='b', length=2) face_normal = face_normal / np.linalg.norm(face_normal) # Normalize # Normalize target_normal for consistency target_normal = target_normal / np.linalg.norm(target_normal) # Compute the rotation axis (perpendicular to both vectors) rotation_axis = np.cross(face_normal, target_normal) rotation_axis = rotation_axis / np.linalg.norm(rotation_axis)# if np.linalg.norm(rotation_axis) > 0 else np.array([1, 0, 0]) # Default to x-axis if parallel print("rotation_axis", rotation_axis) # Compute the angle between the vectors cos_theta = np.dot(face_normal, target_normal) print("cos_theta", np.degrees(cos_theta)) theta = np.arccos(np.clip(cos_theta, -1.0, 1.0)) # Clip to avoid floating-point issues print("theta", np.degrees(theta)) # Check if vectors are already aligned or opposite if np.isclose(theta, 0) or np.isclose(theta, np.pi): return vertices # No rotation needed # Rodrigues' rotation formula K = np.array([ [0, -rotation_axis[2], rotation_axis[1]], [rotation_axis[2], 0, -rotation_axis[0]], [-rotation_axis[1], rotation_axis[0], 0] ]) rotation_matrix = np.sin(theta) * K + (1 - np.cos(theta)) * np.outer(rotation_axis, rotation_axis) # Apply the rotation to all vertices return np.dot(vertices, rotation_matrix.T) # Define the vertices for a simple satellite model: vertices = np.array([ # Main body (cube) (0, 0, 0), # 0 - Base, front-left (1, 0, 0), # 1 - Base, front-right (1, 1, 0), # 2 - Base, back-right (0, 1, 0), # 3 - Base, back-left (0, 0, 1), # 4 - Top, front-left (1, 0, 1), # 5 - Top, front-right (1, 1, 1), # 6 - Top, back-right (0, 1, 1), # 7 - Top, back-left # Solar panels # Left panel (0.5, .25, -1.5), # 8 (0.5, .75, -1.5), # 9 (0.5, .75, 0), # 10 (0.5, .25, 0), # 11 # Right panel (0.5, .25, 2.5), # 12 (0.5, .75, 2.5), # 13 (0.5, .75, 1), # 14 (0.5, .25, 1) # 15 ]) # Translate spacecraft to origin vertices = [(x - .5, y - .5, z - .5) for x, y, z in vertices] # Original points ax.scatter(vertices[5][0], vertices[5][1],vertices[5][2], color='green', s=25) ax.scatter(vertices[1][0], vertices[1][1],vertices[1][2], color='green', s=25) ax.scatter(vertices[4][0], vertices[4][1],vertices[4][2], color='green', s=25) # Rotate spacecraft to point at specified vector face_to_align = [5, 1, 4] # Indexes of points that define the face I want to be normal to the specified vector (-Y) #vector = np.array([0, 0, 1]) # This rotation doesn't skew anything vector = np.array([0.56167836, 0.76075023, 0.32523301]) # This rotation skews everything vertices = rotate_shape_to_normal(vertices, face_to_align, vector) # Rotated points ax.scatter(vertices[5][0], vertices[5][1],vertices[5][2], color='blue', s=25) ax.scatter(vertices[1][0], vertices[1][1],vertices[1][2], color='blue', s=25) ax.scatter(vertices[4][0], vertices[4][1],vertices[4][2], color='blue', s=25) # Faces for the cube cube_faces = [ [vertices[0], vertices[1], vertices[5], vertices[4]], # (-Y) [vertices[1], vertices[2], vertices[6], vertices[5]], # (+X) [vertices[2], vertices[3], vertices[7], vertices[6]], # (+Y) [vertices[3], vertices[0], vertices[4], vertices[7]], # (-X) [vertices[0], vertices[1], vertices[2], vertices[3]], # (-Z) [vertices[4], vertices[5], vertices[6], vertices[7]], # (+Z) ] # Solar panel faces - note these are just rectangles left_panel = [vertices[8], vertices[9], vertices[10], vertices[11]] right_panel = [vertices[12], vertices[13], vertices[14], vertices[15]] # Combine all faces faces = cube_faces + [left_panel, right_panel] # Create Poly3DCollection poly3d = Poly3DCollection(faces, alpha=0.7) poly3d.set_edgecolor('k') # Set face color for different parts poly3d.set_facecolor([[1, 0, 0], [.7, .7, .7], [.7, .7, .7], [.7, .7, .7], [.7, .7, .7], [.7, .7, .7], [0, 0.5, 1], [0, 0.5, 1]]) ax.add_collection3d(poly3d) # Set the aspect ratio to ensure it looks like a cube ax.set_box_aspect((1, 1, 1)) # Remove axes for a cleaner look #ax.set_axis_off() # Set limits to see everything ax.set_xlim(-1, 2) ax.set_ylim(-1, 2) ax.set_zlim(-1, 2) # Origin ax.scatter(0, 0, 0, color='red', s=25) ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # Adjust view for better visualization ax.view_init(elev=20., azim=-45) plt.show()

回答 1 投票 0


我已经创建了一个用

类创建了一个图,我无法弄清楚如何保存此图。我找不到一种使用

回答 1 投票 0




峰matplotlib极地图显示了亚度运动(又称极地图()切片)

我想要下面的楔形形状,但是最小/最大theta角度至少为一个度。

回答 1 投票 0

峰matplotlib极地图显示了子度运动

我想要下面的楔形形状,但是最小/最大theta角度至少为一个度。

回答 1 投票 0

如何交换Arviz中的条纹背景颜色。plot_forest

这可能是一个简单的问题,但我无法弄清楚。在Arviz的Arviz.plot_forest中,如何交换阴影背景的顺序?例如,在此示例图中,来自他们的文档,ho ...

回答 1 投票 0

PyPlot表面图Z轴缩放标签

当z值变小时,z轴给出了错误的幅度。 例子: 导入numpy作为NP 导入matplotlib.pyplot作为PLT 导入matplotlib 打印('matplotlib版本:',matplotlib .__版本__) ...

回答 1 投票 0


Python3 -matplotlib -set_xdata/set_ydata不工作

我尝试使用set_xdata/set_ydata而不是情节显示传感器数据,以便更快地刷新 我找到了这个教程 问题:什么都没有出现 预期:我应该看到绘制的数据(用于工作的数据...

回答 1 投票 0



有一种方法可以说出用户在matplotlib中单击3D表面图的何处? 我正在使用matplotlib创建一个3D图。该图包含3D空间中显示的点,线和表面。使用“ picker = true”选项,用于行和点,我可以使它们可单击。和...

# Imports import matplotlib.pyplot as plt import numpy # If a point is selected, print its location def onPick(event): points = event.artist print(points.get_data_3d()) # Create a 3D plot fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # Create a plane in 3D space x = numpy.arange(-50, 50, 1) y = numpy.arange(-50, 50, 1) z = numpy.array([[5 for _ in x] for _ in y]) x, y = numpy.meshgrid(x, y) # Plot the plane ax.plot_surface(x, y, z, alpha=0.2, color="y", picker=True, pickradius=5) # Call a function if the plane is clicked on fig.canvas.mpl_connect('pick_event', onPick) # Show the plot plt.show()

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.