Как нанести контур на «стенки» трехмерной гистограммы PythonPython

Программы на Python
Ответить
Anonymous
 Как нанести контур на «стенки» трехмерной гистограммы Python

Сообщение Anonymous »

Для контекста я хочу представить пространственно-временную эволюцию волны тепла.
В этом примере волна тепла определяется, когда дневная температура превышает порог температуры, а интенсивность определяется разницей между наблюдаемой температурой и порогом температуры.
Перед визуальным представлением я применил скрипт, который вычисляет связь между пикселями во время волны тепла. Этот скрипт позволяет изолировать многие события волн тепла с помощью метода кластеризации. В целом, событие тепловой волны определяется связностью соседних пикселей тепловой волны на временной и пространственной оси. Текстовые файлы долготы, широты, времени и интенсивности для каждого события тепловой волны сохраняются.
Затем я применил сценарий, который представляет событие тепловой волны в 4D.
Первая часть сценария связана с картографическим представлением и «тенью» тепловой волны, отображаемой на карте красным цветом. Затем вторая часть связана с открытием ранее сохраненных текстовых файлов, соответствующих характеристикам тепловой волны.
Здесь изменена часть скрипта с измененными значениями долготы, широты, времени и интенсивности:

Код: Выделить всё

longitude = np.array([-9.4, -9.4, -9.4, -9.3, -9.3, -9.3])
latitude = np.array([38.8, 38.9, 39.0, 38.7, 38.8, 38.9])
z = np.array([1, 1, 1, 2, 2, 2])
intensity = np.array([1.0082481938068, 1.0974287307475, 1.115724032552,
1.4837606317027, 1.3200661292037, 1.2509449282401])
# Set the position and size of the bars
dx = dy = 1  # Width and depth of each bar
dz = 1       # Height of each bar

# Plot the 3D bars
ax.bar3d(longitude, latitude, z + 5, dx, dy, dz, color=plt.cm.Reds(intensity / np.max(intensity)))

# Set grid lines to dashed
ax.xaxis._axinfo['grid'].update(linestyle="--")
ax.yaxis._axinfo['grid'].update(linestyle="--")
ax.zaxis._axinfo['grid'].update(linestyle="--")

# Set z-axis ticks and labels
z_ticks = np.arange(5, 35, 5)  # Set a tick every 5 days
z_labels = ['Aug. 6', 'Aug. 11', 'Aug. 16', 'Aug. 21', 'Aug. 26', 'Aug. 31']  # Tick labels in chronological order
ax.set_zticks(z_ticks)
ax.set_zticklabels(z_labels)

# Set axis labels
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
#ax.set_zlabel('Date')

ax.set_xticklabels(ax.get_xticks(),
verticalalignment='baseline')
ax.set_yticklabels(ax.get_yticks(),
verticalalignment='baseline',
horizontalalignment='left')

# Adjust distance between tick labels and axes
ax.tick_params(axis='x', pad=2.5)  # Adjust distance for x-axis labels
ax.tick_params(axis='y', pad=0.5)  # Adjust distance for y-axis labels
ax.tick_params(axis='z', pad=8)    # Adjust distance for z-axis labels

# Format longitude and latitude labels
ax.xaxis.set_major_formatter(LongitudeFormatter())
ax.yaxis.set_major_formatter(LatitudeFormatter())

# Add colorbar
mappable = plt.cm.ScalarMappable(cmap=plt.cm.Reds)
mappable.set_array(intensity)
cbar = plt.colorbar(mappable, ax=ax, shrink=0.5, aspect=13)  # Specify the target axis
cbar.set_label('Intensity (°C)')

plt.show()
А вот пример вывода рисунка после кода: Heatwave_event
Моя основная цель этого поста — выяснить, есть ли у вас какие-либо идеи по улучшению читабельности этого рисунка. Во-вторых, я хотел бы спроецировать свой график на «стенки» трехмерной гистограммы, чтобы лучше читать значения z. Как мне это сделать?
Я пытался использовать контурф(), но это не сработало, возможно, из-за 3D-гистограммы.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ram-python
Ответить

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

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

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

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

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