Как я могу сделать график рассеяния, окрашенный по плотности в matplotlib?

Я хотел бы сделать график рассеяния, где каждая точка окрашена пространственной плотностью соседних точек.

Я столкнулся с очень похожим вопросом, который показывает пример этого с помощью R:

R Scatter Plot: цвет символа представляет собой количество перекрывающихся точек

Каков наилучший способ выполнения чего-то подобного в python с использованием matplotlib?

  • Почему даты рассчитаны с 1 января 1970 года?
  • Переопределить имя поля формы Django attr
  • PyMySQL и OrderedDict
  • Lxml html xpath context
  • Python - Дерево элементов удаляет XML-объявление
  • Несколько входов и выходов в подпроцессе python
  • Как добавить вкладку в оболочку Python?
  • Чтение XML-файла и выбор его атрибутов в Python
  • 2 Solutions collect form web for “Как я могу сделать график рассеяния, окрашенный по плотности в matplotlib?”

    В дополнение к hist2d или hexbin как предлагается @askewchan, вы можете использовать тот же метод, что и принятый ответ в вопросе, который вы связали с использованием.

    Если вы хотите сделать это:

     import numpy as np import matplotlib.pyplot as plt from scipy.stats import gaussian_kde # Generate fake data x = np.random.normal(size=1000) y = x * 3 + np.random.normal(size=1000) # Calculate the point density xy = np.vstack([x,y]) z = gaussian_kde(xy)(xy) fig, ax = plt.subplots() ax.scatter(x, y, c=z, s=100, edgecolor='') plt.show() 

    введите описание изображения здесь

    Если вы хотите, чтобы точки были построены по порядку плотности, чтобы самые плотные точки всегда были сверху (аналогично связанному примеру), просто отсортируйте их по значениям z. Я также собираюсь использовать меньший размер маркера здесь, поскольку он выглядит немного лучше:

     import numpy as np import matplotlib.pyplot as plt from scipy.stats import gaussian_kde # Generate fake data x = np.random.normal(size=1000) y = x * 3 + np.random.normal(size=1000) # Calculate the point density xy = np.vstack([x,y]) z = gaussian_kde(xy)(xy) # Sort the points by density, so that the densest points are plotted last idx = z.argsort() x, y, z = x[idx], y[idx], z[idx] fig, ax = plt.subplots() ax.scatter(x, y, c=z, s=50, edgecolor='') plt.show() 

    введите описание изображения здесь

    Вы можете сделать гистограмму:

     import numpy as np import matplotlib.pyplot as plt # fake data: a = np.random.normal(size=1000) b = a*3 + np.random.normal(size=1000) plt.hist2d(a, b, (50, 50), cmap=plt.cm.jet) plt.colorbar() 

    2dhist

    Interesting Posts

    Получите второе по величине число в списке в линейном времени

    получить значение R ^ 2 из scipy.linalg.lstsq

    Что лучше всего в Python: urllib2, PycURL или механизировать?

    Создание модуля расширения Python с distutils

    Оценка автокорреляции с использованием Python

    нужна проверка и добавление базы данных sqlite для ведения домашнего хозяйства и управления кодом

    Python import MySQLdb, Внутренняя ошибка сервера Apache

    Как изменить несколько имен файлов в каталоге с помощью Python

    Самый эффективный способ сделать заявление if-elif-elif-else, когда else сделан больше всего?

    Django Разрешение отклонено: '/ var / www / media / animals / user_uploads'

    bash: синтаксическая ошибка возле неожиданного токена `('- Python

    python oauth 2.0 new fbsr facebook cookie, ошибка проверки кода проверки

    Есть ли функция, которая проверяет, является ли символ в строке буквой в алфавите? (Swift)

    Создание графика с датой и временем в осях с меткой matplotlib

    Разделить строку на куски максимальной длины X – разделить только на пробелы

    Python - лучший язык программирования в мире.