Учитывая набор точек, которые должны быть представлены на трехмерном графике (в виде точечной диаграммы), я подумал, что было бы интересно отобразить те же данные в 2D, а не в 3D благодаря hist2d
и использованию weights
.
Эти данные имеют низкие и высокие значения (с разницей в несколько порядков), поэтому при представлении в виде графика hist2d
некоторые данные «теряются» (в основном, нижние точки).
Для того чтобы получить Для лучшего представления всех значений я представляю один и тот же график в логарифмическом масштабе c. В результате я заметил две разные вещи. Во-первых, все точки, кроме тех, которые включены в представляемые данные, отображаются в виде белых пикселей (похоже, что в логарифмическом масштабе c все эти точки игнорируются), а не окрашиваются как самые низкие точки (см. Также самую низкую часть цветового диапазона). , это белый, а не синий). Во-вторых, и это не так важно, значения шкалы в цветовой полосе представлены в виде степеней 10.
Так что мой вопрос касается этих двух моментов, как все эти «белые» области могут быть представлены синим цветом, что в цвете самых низких точек и как можно настроить цветовую полосу, чтобы не показывать степени 10 и вместо этого представлять числа как нормальные (1, 10, 100 ...)?
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
# Data
x = [8 for i in range(65)]
y = [75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11]
z = [895, 800, 710, 635, 565, 500, 440, 392, 347, 304, 268, 235, 205, 179, 156, 135, 117, 101, 89, 76, 64, 55, 47, 40, 34, 29, 25, 20, 16, 14, 12, 9, 7, 6, 5, 4, 3, 2.5, 2, 1.7, 1.3, 1, 0.775, 0.60, 0.45, 0.35, 0.25, 0.18, 0.14, 0.10, 0.07, 0.05, 0.035, 0.025, 0.020, 0.015, 0.010, 0.007, 0.006, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005]
fig = plt.figure()
# First plot
fig.add_subplot(211)
plt.hist2d(x, y, weights=z, bins=len(x), cmap='plasma')
cb = plt.colorbar(extend='both')
cb.set_label('height')
# Second plot. Using log scale
fig.add_subplot(212)
plt.hist2d(x, y, weights=z, bins=len(x), norm=mpl.colors.LogNorm(vmin=min(z), vmax=max(z)), cmap='plasma')
cb = plt.colorbar(extend='both')
cb.set_label('height')
plt.show()