Вертикальные линии от трехмерного графика поверхности к двухмерному контурному графикуPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Вертикальные линии от трехмерного графика поверхности к двухмерному контурному графику

Сообщение Anonymous »

У меня есть трехмерный график поверхности и двухмерный контурный график в плоскости xy. Я хочу создать несколько вертикальных линий от графика поверхности до компьютерного графика (в идеале, по одной вертикальной линии на каждый контур).
Требования к образцу (скопировано отсюда):
Требования к образцу (скопировано отсюда):
Strong>
Изображение

Однако мне не удалось добиться такого же сюжета, как указано выше. Ниже приведен мой фиктивный минимальный рабочий пример, в котором я добавил красную вертикальную линию с жестко запрограммированным кодом, но мне хотелось бы иметь аналогичные вертикальные линии.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

# Create a quadratic surface
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = X**2 + Y**2 # Quadratic surface
Z = Z + 20

# Mask a circular region (e.g., radius > 2)
mask = (X**2 + Y**2) > 4
Z_masked = np.ma.masked_where(mask, Z)

# Create plot
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# Plot the surface
surf = ax.plot_surface(X, Y, Z_masked, cmap=cm.viridis, edgecolor='none', alpha=0.8)

# Add contours on the XY plane at Z_min level
z_min = Z_masked.min() - 20
contour = ax.contour(X, Y, Z_masked, zdir='z', offset=z_min, colors='black', linewidths=1)

# Calculate the center of the valid region
valid_mask = ~Z_masked.mask
x_valid = X[valid_mask]
y_valid = Y[valid_mask]
z_valid = Z_masked[valid_mask]

# Find the approximate center
x_center = np.mean(x_valid)
y_center = np.mean(y_valid)
z_center = np.mean(z_valid)

# Plot the vertical line in red
ax.plot([x_center, x_center], [y_center, y_center], [z_min, z_center],
color='red', linewidth=2, alpha=0.9)

# Add markers for clarity
ax.scatter(x_center, y_center, z_center, color='red', s=50, label='Surface Center')
ax.scatter(x_center, y_center, z_min, color='red', s=50, label='Contour Center')

# Labels and legend
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')
ax.legend()

# Show plot
plt.show()

print


Подробнее здесь: https://stackoverflow.com/questions/793 ... ntour-plot
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»