Scatterplot с контурным наложением тепла с использованием matplotlib - PullRequest
0 голосов
/ 26 июня 2018

У меня есть большой ряд данных, который включает> 200k значений.

Цель состоит в том, чтобы показать разброс данных и приблизительный тренд, а не отдельные точки. Я хотел бы добавить контурное наложение тепла, аналогичное этому вопросу, но с использованием matplotlib и с возможностью указать количество контуров и их интервалы:

https://stats.stackexchange.com/questions/31726/scatterplot-with-contour-heat-overlay

Надеюсь, это понятно. Пожалуйста, дайте мне знать, если нет!

1 Ответ

0 голосов
/ 27 июня 2018

Kdeplot Seaborn позволит вам наносить только оттенки, а не отображать все точки данных. Количество контуров можно настроить, указав параметр n_levels. Для меньших наборов данных наложение совместного участка и kdeplot позволяет отображать как точки данных, так и контурные линии. Эстетика фигуры может широко варьироваться, поэтому я собрал несколько разных вариантов ниже. Сюжет с объединенными участками был создан с использованием ответа ImportanceOfBeingErnest на этот вопрос .

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
mean = [0, 0]
cov = [[50, 0], [0, 100]] 
x, y = np.random.multivariate_normal(mean, cov, 5000).T

# For large data sets
plt.subplots(1, 2)
plt.subplot(1, 2, 1)
cmap = sns.cubehelix_palette(as_cmap=True, dark=0, light=1, reverse=True)
a = sns.kdeplot(x, y, n_levels=20, shade=True, cmap=cmap, gridsize=200, cbar=True)
a.set_xlabel('x')
a.set_ylabel('y')
plt.subplot(1, 2, 2)
b = sns.kdeplot(x, y, n_levels=60, shade=True, gridsize=100, cmap="RdBu_r", cbar=True)
b.set_xlabel('x')
b.set_ylabel('y')

enter image description here

# For smaller data sets - jointplot and kdeplot overlayed. 
# Plain overlay
c = (sns.jointplot(x, y, color="g", marker='.').plot_joint(sns.kdeplot, n_levels=20)).set_axis_labels('x', 'y')
# with shade=True
d = (sns.jointplot(x, y, color="g").plot_joint(sns.kdeplot, n_levels=20, shade=True)).set_axis_labels('x', 'y')
# with transparency control, alpha=
e = (sns.jointplot(x, y, color="g", marker='.').plot_joint(sns.kdeplot, n_levels=20, shade=True, alpha=0.5)).set_axis_labels('x', 'y')
# diverging colour palette - blue to red
f = (sns.jointplot(x, y, marker='.').plot_joint(sns.kdeplot, n_levels=20, cmap="RdBu_r")).set_axis_labels('x', 'y')
# diverging colour palette and shade and reg
g = (sns.jointplot(x, y, marker='.', kind='reg').plot_joint(sns.kdeplot, n_levels=20, cmap="RdBu_r")).set_axis_labels('x', 'y')
# diverging colour palette, shade, 
h = (sns.jointplot(x, y).plot_joint(sns.kdeplot, n_levels=20, shade=True, cmap="RdBu_r")).set_axis_labels('x', 'y')

enter image description here

...