import numpy as np
from lets_plot import *
LetsPlot.setup_html()
np.random.seed(42)
cov0=[[1, -.8],
[-.8, 1]]
cov1=[[1, .8],
[.8, 1]]
cov2=[[ 10, .1],
[.1, .1]]
x0, y0 = np.random.multivariate_normal(mean=[-2,0], cov=cov0, size=400).T
x1, y1 = np.random.multivariate_normal(mean=[2,0], cov=cov1, size=400).T
x2, y2 = np.random.multivariate_normal(mean=[0,1], cov=cov2, size=400).T
data = dict(
x = np.concatenate((x0,x1,x2)),
y = np.concatenate((y0,y1,y2))
)
p = ggplot(data, aes('x', 'y')) + ggsize(600,300) \
+ geom_point(color='black', alpha=.1)
p
# Basic density
p + geom_density2d(color='red')
# Set contour color by "level".
# - change defailt position and size of colorbar.
p + geom_density2d(aes(color='..level..')) \
+ scale_color_gradient(low='dark_green', high='yellow', guide=guide_colorbar(barheight=10, barwidth=300)) \
+ theme(legend_position='bottom')
p1 = ggplot(data, aes('x', 'y')) + ggsize(600,300)
# Filled polygons are not always working well - see the missing polygon in the middle.
p1 + geom_polygon(aes(fill='..level..'), stat='density2d') + coord_fixed()
# 'density2df' is not dependent on the poligons order and works a lot better.
p1 + geom_density2df(aes(fill='..level..'))
p1 + geom_bin2d()
# Adjust the tile size - make them square and bigger.
# Show density instead of count.
p1 + geom_bin2d(aes(fill='..density..'), binwidth=[1, 1])