Я большой поклонник «гистограммы разброса», но я не думаю, что другие решения полностью соответствуют им. Вот функция, которая их реализует. Основным преимуществом этой функции по сравнению с другими решениями является то, что она сортирует точки по историческим данным (см. Аргумент mode
). Это означает, что результат больше похож на традиционную гистограмму (т.е. вы не получите хаотичного перекрытия маркеров в разных ячейках).
MCVE для этого рисунка (используя мою функцию):
import numpy as np
import matplotlib.pyplot as plt
from hist_scatter import scatter_hist2d
fig = plt.figure(figsize=[5, 4])
ax = plt.gca()
x = randgen.randn(npoint)
y = 2 + 3 * x + 4 * randgen.randn(npoint)
scat = scatter_hist2d(x, y,
bins=[np.linspace(-4, 4, 42),
np.linspace(-25, 25, 42)],
s=5,
cmap=plt.get_cmap('viridis'))
ax.axhline(0, color='k', linestyle='--', zorder=3, linewidth=0.5)
ax.axvline(0, color='k', linestyle='--', zorder=3, linewidth=0.5)
plt.colorbar(scat)
Есть куда расти?
Основным недостатком этого подхода является то, что точки в областях с наибольшей плотностью перекрывают точки в областях с более низкой плотностью, что приводит к некоторому искажению областей каждой ячейки. Я потратил довольно много времени на изучение двух подходов к решению этой проблемы:
1) использование маркеров меньшего размера для бункеров с более высокой плотностью
2) применение маски отсечения к каждой ячейке
Первый дает слишком безумные результаты. Второй выглядит красиво, особенно если вы обрезаете только те ячейки, которые имеют> ~ 20 точек, но он чрезвычайно медленный (этот рисунок занял около минуты).
Итак, в конечном итоге я решил, что, тщательно выбирая размер маркера и размер ячейки (s
и bins
), вы можете получить визуально приятные результаты и не так уж плохи с точки зрения искажения данных. В конце концов, эти двухмерные гистограммы обычно предназначены для визуального использования основных данных, а не для их количественного представления. Поэтому я думаю, что этот подход намного превосходит «традиционные 2D-гистограммы» (например, plt.hist2d
или plt.hexbin
), и я предполагаю, что если вы нашли эту страницу, вы также не являетесь поклонником традиционных (одноцветных) диаграмм рассеяния.
Если бы я был королем науки, я бы позаботился о том, чтобы все двухмерные гистограммы делали что-то подобное на всю оставшуюся жизнь.
person
farenorth
schedule
20.02.2019