Нанизанные 2D контурные графики вдоль оси y в Python

Вопрос или проблема

Я хотел бы построить двухмерные контурные графики, сложенные вдоль оси y

Я написал следующий код на Python, который создает 2D контурные графики, сложенные вдоль оси z. Однако, когда я пытаюсь сложить их вдоль оси y, устанавливая переменную zdir на “y” и соответствующим образом перестраивая объявления для пределов, меток и отметок, полученный график оказывается пустым и показывает только оси. Необходимые переменные x, y, x3 и levels, а также функция FE_ethylene были предварительно объявлены. Кто-нибудь знает, как сложить контурные графики вдоль оси y? Спасибо

#Сложение вдоль оси z
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')

contours3D = []
for i, s in enumerate(x3):
    print(i, s)
    contours3D.append(ax.contourf(x, y, FE_ethylene(x, y, s), zdir="z", offset=s, levels=levels, cmap='rainbow', alpha=1.0-i/10))

ax.set_xlim3d(0.45, 2.45)
ax.set_ylim3d(0.55, 2.45)
ax.set_zlim3d(0.07, 0.13)

ax.set_xticks(np.linspace(0.6, 2.4, 5))
ax.set_yticks(np.linspace(0.6, 2.4, 5))
ax.set_zticks(np.linspace(0.08, 0.12, 5))

ax.set_xlabel("Содержание углерода (мг/см2)")
ax.set_ylabel("Содержание ПТФЭ (мг/см2)")
ax.set_zlabel("Содержание сайнеона (мг/см2)")

plt.show()

Ответ или решение

Для отображения 2D контурных графиков, расположенных вдоль оси y в Python, с использованием библиотеки Matplotlib и модуля для 3D-диаграмм, мы можем воспользоваться функцией contourf, а также правильно настроить параметры для осей. Ниже представлена модификация вашего кода, которая позволит создать желаемый результат.

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

# Примерные данные
x = np.linspace(0.45, 2.45, 100)
y = np.linspace(0.55, 2.45, 100)
x3 = np.linspace(0.07, 0.13, 5)  # Для оси y
levels = np.linspace(0, 1, 10)    # Уровни для контуров

# Пример функции FE_ethylene
def FE_ethylene(x, y, s):
    return np.sin(x) * np.cos(y + s)  # Пример функции

# Создание 3D графика
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')

contours3D = []
for i, s in enumerate(x3):
    print(i, s)
    # С помощью zdir="y" контуры будут проецироваться вдоль оси y
    contours3D.append(ax.contourf(x, s * np.ones_like(x), FE_ethylene(x, s * np.ones_like(x), s), zdir="y", offset=s, levels=levels, cmap='rainbow', alpha=1.0-i/10))

ax.set_xlim3d(0.45, 2.45)
ax.set_ylim3d(0.07, 0.13)  # Границы по оси y
ax.set_zlim3d(0.55, 2.45)  # Границы по оси z

ax.set_xticks(np.linspace(0.45, 2.45, 5))
ax.set_yticks(np.linspace(0.07, 0.13, 5))
ax.set_zticks(np.linspace(0.55, 2.45, 5))

ax.set_xlabel("Carbon content (mg/cm2)")
ax.set_ylabel("Sustainion content (mg/cm2)")
ax.set_zlabel("PTFE content (mg/cm2)")

plt.show()

Объяснение изменений:

  1. Ось y: Теперь вместо четырех уровней "s" мы создаем массив из значений "s" в качестве координат y для каждого сечения. Это необходимо для корректного отображения контуров вдоль оси y.

  2. Границы осей: Убедитесь, что вы правильно настроили границы для всех осей (x, y, z), чтобы ваши данные пресекали все сильные значения, которые вы хотите отобразить.

  3. Рисунок осей и меток: Убедитесь, что метки и деления осей имеют смысл для отображаемых данных.

Заключение

Данный код позволит вам создать 3D график с 2D контурными уровнями, расположенными вдоль оси y, что отвечает вашему запросу. Не забудьте подкорректировать любые параметры для вашего конкретного случая, чтобы отобразить ожидаемый результат.

Оцените материал
Добавить комментарий

Капча загружается...