Reputation: 81
I'm facing the problem with two heatmaps in seaborn and matplotlib.
My problem is, that I need to combine two heatmaps to show main differences. I have some data points (x, y) some points are for red heatmap some are for blue. The goal is combination of these and it should looks like this.
Now I have this two maps:
My code looks like this.
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
data=pd.read_csv('data.csv')
data.head(10)
red = data.loc[data.type == "red"]
blue = data.loc[data.type == "blue"]
ax = sns.kdeplot(blue.x_pos, blue.y_pos,
cmap="Blues", n_levels=15, shade=True, shade_lowest=False, legend=False)
ax = sns.kdeplot(red.x_pos, red.y_pos,
cmap="Reds", n_levels=15, shade=True, shade_lowest=False, legend=False)
plt.ylim(-300, 300)
plt.xlim(-300, 300)
ax.set_frame_on(False)
ax.set_yticklabels([])
ax.set_xticklabels([])
plt.gca().axes.get_yaxis().set_visible(False)
plt.gca().axes.get_xaxis().set_visible(False)
plt.show()
CSV FILE
x_pos,y_pos,type
108,-204,red
108,-168,red
108,-228,red
108,-192,red
108,-144,red
108,108,red
108,180,red
108,192,red
108,228,red
108,-240,red
108,-216,red
108,-180,red
108,-156,blue
108,-132,red
108,-120,red
108,-108,blue
108,-96,red
108,-84,red
108,-72,red
108,-60,blue
108,-48,red
108,-24,blue
108,0,red
108,72,red
108,120,red
108,132,red
108,144,red
108,156,blue
108,204,red
108,240,red
108,-12,red
108,168,blue
108,216,blue
108,252,blue
96,-156,red
96,-36,red
96,-192,red
96,-72,red
96,-48,red
96,144,red
96,204,red
96,-240,red
96,-228,red
96,-204,red
96,-168,red
96,-144,blue
96,-120,blue
96,-96,blue
96,-12,red
96,12,blue
96,36,red
96,72,red
96,96,red
96,108,red
96,168,blue
96,192,red
96,228,blue
96,252,blue
96,-108,red
96,-60,red
96,48,red
96,156,blue
96,180,blue
96,-252,red
96,-180,red
96,-132,blue
96,120,red
-108,-168,red
-108,108,red
-108,-240,blue
-108,-228,blue
-108,-216,blue
-108,-204,blue
-108,-156,red
-108,-144,red
-108,-120,red
-108,-108,blue
-108,-96,red
-108,-84,red
-108,-60,red
-108,0,blue
-108,36,blue
-108,48,red
-108,60,red
-108,120,red
-108,144,red
-108,180,red
-108,192,blue
-108,204,blue
-108,240,red
-108,-192,blue
-108,-180,blue
-108,-36,blue
-108,-12,red
-108,24,blue
-108,156,red
-108,168,red
-108,252,red
-108,-132,red
-108,-24,red
-108,72,red
-108,84,blue
-108,264,red
-108,96,red
-108,228,red
-96,-156,red
-96,180,red
-96,-240,blue
-96,-204,red
-96,-192,blue
-96,-180,blue
-96,-168,red
-96,-96,red
-96,-48,red
-96,-24,red
-96,0,red
-96,72,blue
-96,84,blue
-96,96,blue
-96,132,red
-96,192,blue
-96,228,blue
-96,-252,blue
-96,-216,red
-96,-144,red
-96,48,red
-96,108,red
-96,-132,red
-96,-60,blue
-96,36,blue
-96,-84,blue
132,168,red
132,-216,red
132,-192,red
132,-168,blue
132,-156,blue
132,-120,red
132,-84,red
132,-48,blue
132,-36,red
132,0,red
132,24,red
132,84,red
132,120,red
132,144,red
132,192,red
132,216,red
132,240,red
132,-240,red
132,-228,red
132,-180,red
132,48,red
132,156,blue
132,228,red
132,96,red
132,108,red
132,-132,red
132,-24,red
132,60,red
228,36,red
228,48,blue
228,-72,blue
228,-60,red
228,-36,blue
228,-12,blue
228,0,blue
228,24,blue
228,72,blue
228,84,red
228,96,red
228,192,red
228,204,red
228,240,red
228,-108,red
228,-84,blue
228,-192,red
228,-156,red
228,60,blue
228,180,red
228,156,red
228,12,blue
144,72,red
144,-240,red
144,-192,red
144,-180,red
144,-156,blue
144,0,blue
144,24,red
144,36,red
144,48,red
144,84,blue
144,108,red
144,216,red
144,228,red
144,-276,red
144,-228,red
144,-144,red
144,-132,blue
144,-48,red
144,120,blue
144,156,red
144,192,red
144,-72,red
144,-12,red
144,-84,red
144,60,blue
216,-228,red
216,12,red
216,-240,red
216,-168,red
216,-108,blue
216,-96,blue
216,-48,blue
216,-36,blue
216,0,blue
216,60,blue
216,84,red
216,108,red
216,180,red
216,-216,red
216,48,blue
216,96,blue
216,168,red
216,-72,blue
216,-12,red
216,-156,red
216,228,blue
156,-156,red
156,60,red
156,-144,red
156,-84,red
156,-48,red
156,-36,red
156,-24,red
156,84,red
156,180,red
156,192,red
156,204,blue
156,228,red
156,-252,red
156,-240,red
156,-108,blue
156,0,blue
156,240,red
156,-216,red
156,-192,blue
156,-60,red
156,48,blue
156,132,red
156,252,red
156,276,red
-216,0,red
-216,84,red
-216,-276,red
-216,-144,blue
-216,-84,blue
-216,-36,red
-216,-12,red
-216,12,red
-216,24,blue
-216,60,red
-216,108,red
-216,120,red
-216,-156,red
-216,-48,blue
-216,36,blue
-216,72,red
-216,96,red
-216,-240,blue
-216,-72,blue
-216,132,red
-216,264,red
-192,-216,red
-192,-144,red
-192,-120,red
-192,-108,red
-192,-36,red
-192,-12,red
-192,24,red
-192,36,red
-192,72,blue
-192,96,red
-192,216,red
-192,-48,blue
-192,12,red
-192,48,red
-192,84,red
-192,108,red
-192,276,red
-192,-252,red
-192,-192,red
-192,132,red
-192,156,blue
-192,-180,red
-192,264,red
-156,-216,red
-156,-156,red
-156,-132,red
-156,-120,blue
-156,-84,red
-156,-72,red
-156,-12,red
-156,0,red
-156,12,red
-156,36,blue
-156,48,red
-156,132,blue
-156,156,red
-156,180,red
-156,192,blue
-156,-192,red
-156,-168,red
-156,-108,blue
-156,108,red
-156,144,red
-156,-276,red
-156,-96,red
-156,-24,red
-156,120,blue
-156,-36,blue
-156,216,red
-156,228,red
-156,264,red
-144,204,blue
-144,-192,blue
-144,-156,blue
-144,-120,red
-144,-108,blue
-144,-72,red
-144,-60,red
-144,24,red
-144,48,red
-144,96,red
-144,156,red
-144,168,red
-144,-276,red
-144,-36,red
-144,-24,red
-144,0,red
-144,72,red
-144,216,blue
-144,-84,blue
-144,108,blue
-144,-252,red
-144,-180,blue
192,-12,blue
192,-228,red
192,-144,red
192,-48,red
192,-24,blue
192,36,red
192,84,blue
192,144,red
192,156,red
192,180,red
192,228,blue
192,-108,blue
192,24,blue
192,216,red
192,240,red
192,-240,red
192,-204,red
192,-60,blue
-180,-228,blue
-180,-132,red
-180,-120,red
-180,-96,red
-180,-72,red
-180,-48,blue
-180,-36,red
-180,-12,red
-180,96,red
-180,156,blue
-180,-240,red
-180,-144,blue
-180,-24,blue
-180,36,red
-180,48,red
-180,132,red
-180,-168,red
-180,-84,blue
-180,12,blue
-180,168,red
-180,204,red
-180,-264,red
-180,24,blue
-120,108,red
-120,-240,blue
-120,-192,red
-120,-156,red
-120,-132,red
-120,-120,red
-120,-108,red
-120,-96,red
-120,48,red
-120,96,red
-120,144,red
-120,168,red
-120,192,red
-120,-84,red
-120,0,red
-120,24,red
-120,120,red
-120,156,red
-120,180,red
-120,216,red
-120,252,red
-120,-36,red
-120,36,red
-120,60,blue
-120,132,red
-120,240,blue
120,-240,red
120,-216,red
120,-192,red
120,-180,red
120,-84,blue
120,-36,red
120,108,red
120,192,blue
120,204,red
120,228,red
120,-264,blue
120,-204,red
120,36,red
120,72,red
120,96,blue
120,0,red
120,-252,red
120,-168,red
120,-156,blue
120,-120,red
120,-60,red
120,24,blue
120,216,blue
120,-108,red
120,144,blue
-204,204,red
-204,-264,red
-204,-216,red
-204,-96,blue
-204,24,red
-204,72,red
-204,96,red
-204,144,red
-204,168,red
-204,240,red
-204,-168,red
-204,-132,red
-204,-60,blue
-204,-48,red
-204,-36,blue
-204,0,red
-204,48,red
-204,108,red
-204,156,red
-204,-84,blue
-204,-24,blue
-204,60,blue
-204,-252,blue
-204,12,red
-132,-132,red
-132,-216,red
-132,-144,red
-132,-60,red
-132,-24,red
-132,-12,red
-132,0,blue
-132,24,red
-132,36,red
-132,48,red
-132,72,blue
-132,84,red
-132,168,red
-132,-84,red
-132,-36,blue
-132,96,red
-132,132,red
-132,-204,red
-132,-96,red
-132,-48,blue
-132,156,blue
-132,192,blue
-132,-192,red
-132,-108,blue
-132,-72,blue
180,-252,red
180,-204,red
180,-84,blue
180,-48,red
180,0,blue
180,144,red
180,180,red
180,192,blue
180,240,red
180,228,red
180,-264,red
180,-132,blue
180,36,blue
180,-36,red
180,84,blue
180,216,red
180,-228,red
180,168,red
204,60,red
204,-120,red
204,-108,red
204,-48,red
204,-36,blue
204,-24,red
204,0,blue
204,12,blue
204,108,red
204,156,red
204,180,red
204,228,red
204,-228,red
204,-192,red
204,-84,blue
204,48,blue
204,-240,red
204,-180,red
204,-96,red
204,240,blue
204,252,red
204,-276,red
204,-72,blue
240,60,blue
240,-36,blue
240,-24,blue
240,24,blue
240,36,blue
240,48,red
240,144,red
240,156,red
240,168,red
240,-72,red
240,72,red
240,-132,red
240,108,red
240,84,blue
240,-120,red
-228,-216,red
-228,-108,red
-228,-84,red
-228,-36,blue
-228,-24,red
-228,-12,red
-228,12,blue
-228,24,blue
-228,72,red
-228,48,red
-228,-48,blue
-228,36,blue
-228,84,blue
-228,108,red
-228,-180,red
-168,12,red
-168,-132,red
-168,-120,blue
-168,-84,blue
-168,0,red
-168,60,red
-168,84,blue
-168,216,red
-168,276,red
-168,24,red
-168,-240,blue
-168,-228,blue
-168,36,red
-168,96,red
-168,120,blue
-168,168,red
-168,-144,red
-168,-12,red
-168,48,red
-168,-252,red
-168,-72,blue
-168,156,blue
-240,24,red
-240,-132,blue
-240,-24,red
-240,0,red
-240,36,blue
-240,60,blue
-240,72,blue
-240,228,red
-240,-60,red
-240,48,blue
-240,-96,red
-240,-48,blue
168,-252,red
168,-228,red
168,-216,red
168,-72,red
168,48,red
168,84,red
168,120,red
168,168,red
168,180,red
168,240,red
168,228,red
168,-132,red
168,144,red
168,192,red
168,-108,blue
168,108,blue
168,156,blue
168,0,blue
168,132,red
-84,-120,red
-84,-96,red
-84,-60,red
-84,-24,red
-84,0,red
-84,84,red
-84,132,red
-84,144,red
-84,228,red
-84,252,red
-84,-192,red
-84,96,red
-84,108,red
-84,-276,red
-84,-204,red
-84,60,red
-84,192,red
84,240,red
84,-216,red
84,-108,blue
84,-72,red
84,-48,red
84,-36,blue
12,-168,red
12,-132,red
12,168,red
12,-216,red
12,-12,red
12,0,red
12,204,red
12,72,red
-252,0,red
-252,24,red
-252,36,red
-252,60,red
-24,-228,red
-24,-216,red
-24,96,red
-24,180,red
-24,-240,red
-24,-132,red
-24,-12,red
-24,72,red
-24,108,red
-24,144,red
-12,-108,red
-12,132,red
-12,228,red
-12,-156,red
-12,156,red
-12,216,red
36,-264,red
36,-228,red
36,-108,red
36,-12,red
36,156,red
36,180,red
36,-144,red
36,-36,red
36,96,red
-72,-204,red
-72,-24,red
-72,0,red
-72,-240,red
-72,-96,red
-72,24,red
-72,216,red
-36,-156,red
-36,-72,red
-36,168,red
-36,144,red
-36,156,red
48,-60,red
48,144,red
48,216,red
48,-36,red
48,168,red
48,-216,red
60,-84,red
60,264,red
60,-276,red
60,168,red
-60,-144,red
-60,-48,red
-60,240,red
-60,-96,red
-48,-228,red
-48,180,red
-48,-60,red
-48,192,red
0,84,red
0,204,red
0,-36,red
0,-240,red
0,192,red
0,-12,red
0,120,red
0,264,red
24,-180,red
24,-252,red
24,-240,red
24,-24,red
252,96,red
252,216,red
252,180,red
72,-252,red
108,-36,blue
108,12,blue
108,36,blue
108,24,blue
108,84,blue
108,276,blue
108,96,blue
108,-264,blue
-96,204,blue
-96,-36,blue
-96,60,blue
-96,-264,blue
-96,-120,blue
-96,240,blue
-96,252,blue
96,-84,blue
96,60,blue
96,264,blue
96,-264,blue
96,-216,blue
-108,-252,blue
228,-24,blue
228,120,blue
228,132,blue
228,-120,blue
228,-264,blue
228,-180,blue
228,-132,blue
228,252,blue
228,-96,blue
240,-192,blue
240,-180,blue
240,-108,blue
240,-12,blue
240,0,blue
240,12,blue
240,132,blue
240,192,blue
240,228,blue
240,-168,blue
132,-60,blue
132,12,blue
132,132,blue
132,-108,blue
132,264,blue
132,-276,blue
156,-72,blue
156,-168,blue
156,-120,blue
156,36,blue
156,108,blue
156,144,blue
156,168,blue
156,216,blue
156,-204,blue
156,-180,blue
156,-132,blue
156,-12,blue
156,120,blue
156,264,blue
192,-84,blue
192,-216,blue
192,-192,blue
192,-132,blue
192,-120,blue
192,48,blue
192,60,blue
192,96,blue
192,-264,blue
192,-252,blue
192,108,blue
192,132,blue
192,-96,blue
192,192,blue
216,-120,blue
216,-84,blue
216,-60,blue
216,144,blue
216,216,blue
216,120,blue
216,192,blue
216,204,blue
216,240,blue
216,24,blue
-240,-204,blue
-240,-120,blue
-240,-84,blue
-240,-216,blue
-240,96,blue
-240,144,blue
-240,-192,blue
180,-24,blue
180,-72,blue
180,-12,blue
180,24,blue
180,96,blue
180,156,blue
180,132,blue
180,-180,blue
180,48,blue
180,-144,blue
180,276,blue
-216,-216,blue
-216,-60,blue
-216,192,blue
-216,-192,blue
-216,-168,blue
-216,216,blue
-216,252,blue
120,-72,blue
120,-12,blue
120,132,blue
120,156,blue
120,-228,blue
120,180,blue
120,120,blue
120,-96,blue
144,-168,blue
144,-36,blue
144,12,blue
144,180,blue
144,-108,blue
144,264,blue
144,-252,blue
144,-120,blue
144,-96,blue
144,144,blue
144,252,blue
-144,-48,blue
-144,84,blue
-144,240,blue
-144,-240,blue
-144,-144,blue
-144,-96,blue
-144,36,blue
-144,144,blue
-144,60,blue
-204,-156,blue
-204,-120,blue
-204,-108,blue
-204,-72,blue
-204,132,blue
-204,-240,blue
-204,-228,blue
-204,-144,blue
-204,228,blue
-204,264,blue
-204,192,blue
-132,-180,blue
-132,60,blue
-132,120,blue
-132,228,blue
-132,-120,blue
-132,204,blue
-132,216,blue
-132,-240,blue
-132,-228,blue
-192,-156,blue
-192,-228,blue
-192,-168,blue
-192,192,blue
-192,-84,blue
-192,-240,blue
-192,228,blue
-168,-192,blue
-168,-180,blue
-168,-36,blue
-168,72,blue
-168,228,blue
-168,-96,blue
-168,-60,blue
-168,108,blue
-168,144,blue
-168,-156,blue
-168,132,blue
-156,-240,blue
-156,-228,blue
-156,-180,blue
-156,-60,blue
-156,204,blue
-156,-204,blue
-156,168,blue
-156,-48,blue
-156,84,blue
-156,60,blue
168,252,blue
168,-276,blue
168,-60,blue
168,60,blue
168,264,blue
168,-144,blue
168,-120,blue
168,-12,blue
168,-264,blue
168,-84,blue
-228,-120,blue
-228,-60,blue
-228,144,blue
-228,-96,blue
-228,96,blue
-228,120,blue
-228,156,blue
-228,-156,blue
-228,60,blue
-228,216,blue
-180,84,blue
-180,192,blue
-180,-204,blue
-180,60,blue
-180,-276,blue
-180,-156,blue
-180,264,blue
204,-204,blue
204,-156,blue
204,-132,blue
204,84,blue
204,120,blue
204,132,blue
204,144,blue
204,-216,blue
204,24,blue
204,-264,blue
204,96,blue
-120,-180,blue
-120,204,blue
-120,228,blue
-120,-12,blue
-120,72,blue
-120,-204,blue
-120,-48,blue
84,-132,blue
84,-12,blue
84,24,blue
84,84,blue
84,156,blue
84,180,blue
84,192,blue
84,-228,blue
84,-156,blue
84,48,blue
84,-264,blue
-84,216,blue
-252,72,blue
-252,108,blue
-252,-60,blue
12,216,blue
12,-264,blue
12,-228,blue
12,60,blue
12,108,blue
-60,-192,blue
-60,-252,blue
-60,-204,blue
-60,-156,blue
-60,-36,blue
36,0,blue
36,48,blue
36,120,blue
36,144,blue
36,-204,blue
36,84,blue
36,-72,blue
-12,-72,blue
-12,120,blue
-12,-84,blue
-48,-216,blue
-48,168,blue
-48,-168,blue
-48,228,blue
-48,144,blue
-48,0,blue
-36,108,blue
-36,-204,blue
-36,-132,blue
-24,-204,blue
-24,60,blue
-24,240,blue
0,180,blue
0,-120,blue
24,48,blue
24,-228,blue
24,-204,blue
48,36,blue
48,-228,blue
48,-24,blue
48,72,blue
60,192,blue
60,0,blue
60,12,blue
60,228,blue
252,-84,blue
252,-72,blue
252,36,blue
252,-60,blue
252,-48,blue
72,228,blue
72,84,blue
72,156,blue
72,12,blue
Does exist some way how to do it in seaborn? Thank you
Upvotes: 0
Views: 1199
Reputation: 547
Ok this works, it's blatantly copied/readapted from here.
Put your data in 'data.csv'
import numpy as np
import pandas as pd
# import seaborn as sns # No longer used
import matplotlib.pyplot as plt
from scipy import stats
df = pd.read_csv('data.csv')
red_df = df[df['type']=='red']
blue_df = df[df['type']=='blue']
def compute_KDE_from_pos(x_pos,y_pos):
xmin = x_pos.min()
xmax = x_pos.max()
ymin = y_pos.min()
ymax = y_pos.max()
X, Y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([X.ravel(), Y.ravel()])
values = np.vstack([x_pos, y_pos])
kernel = stats.gaussian_kde(values)
Z = np.reshape(kernel(positions).T, X.shape)
return Z
Z_red = compute_KDE_from_pos(red_df.x_pos,red_df.y_pos)
Z_blue = compute_KDE_from_pos(blue_df.x_pos,blue_df.y_pos)
Z_diff = Z_red-Z_blue
fig, ax = plt.subplots()
ax.imshow(np.rot90(Z_diff), cmap='RdBu',
extent=[df.x_pos.min(), df.x_pos.max(), df.y_pos.min(), df.y_pos.max()])
ax.plot(red_df.x_pos, red_df.y_pos, 'r.', markersize=2)
ax.plot(blue_df.x_pos, blue_df.y_pos, 'b.', markersize=2)
ax.set_xlim([df.x_pos.min(), df.x_pos.max()])
ax.set_ylim([df.y_pos.min(), df.y_pos.max()])
plt.show()
Output:
EDIT:
I wrote a cleaner version of the code. You may still want to check whether the colour map used corresponds to what you expect, or whether you must invert the reds with the blues. Either ways, this code answers the question.
Upvotes: 0