В этом примере волна тепла определяется, когда дневная температура превышает порог температуры, а интенсивность определяется разницей между наблюдаемой температурой и порогом температуры.
Перед визуальным представлением я применил скрипт, который вычисляет связь между пикселями во время волны тепла. Этот скрипт позволяет изолировать многие события волн тепла с помощью метода кластеризации. В целом, событие тепловой волны определяется связностью соседних пикселей тепловой волны на временной и пространственной оси. Текстовые файлы долготы, широты, времени и интенсивности для каждого события тепловой волны сохраняются.
Затем я применил сценарий, который представляет событие тепловой волны в 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()
Моя основная цель этого поста — выяснить, есть ли у вас какие-либо идеи по улучшению читабельности этого рисунка. Во-вторых, я хотел бы спроецировать свой график на «стенки» трехмерной гистограммы, чтобы лучше читать значения z. Как мне это сделать?
Я пытался использовать контурф(), но это не сработало, возможно, из-за 3D-гистограммы.
Подробнее здесь: https://stackoverflow.com/questions/798 ... ram-python
Мобильная версия