Вопрос или проблема
Я хотел бы построить двухмерные контурные графики, сложенные вдоль оси 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()
Объяснение изменений:
-
Ось y: Теперь вместо четырех уровней "s" мы создаем массив из значений "s" в качестве координат y для каждого сечения. Это необходимо для корректного отображения контуров вдоль оси y.
-
Границы осей: Убедитесь, что вы правильно настроили границы для всех осей (x, y, z), чтобы ваши данные пресекали все сильные значения, которые вы хотите отобразить.
-
Рисунок осей и меток: Убедитесь, что метки и деления осей имеют смысл для отображаемых данных.
Заключение
Данный код позволит вам создать 3D график с 2D контурными уровнями, расположенными вдоль оси y, что отвечает вашему запросу. Не забудьте подкорректировать любые параметры для вашего конкретного случая, чтобы отобразить ожидаемый результат.