Parameter size_unit in Geoms geom_point(), geom_text() and geom_label()

The size_unit parameter relates the size of a geometry to the length of the unit step along one of the axes.

In [1]:
from lets_plot import *
In [2]:
LetsPlot.setup_html()
In [3]:
size = 10
data = {
    'x': [0, 0, 0],
    'y': [-size, 0, size],
    'text': ['A', 'b', '0'],
}
In [4]:
def title(geom_name, size_unit=None):
    if size_unit is None:
        size_unit_text = "size_unit - default"
    else:
        size_unit_text = "size_unit='{0}'".format(size_unit)
    return ggtitle("{geom}: size={size}, {size_unit_text}".format(
        geom=geom_name,
        size=size,
        size_unit_text=size_unit_text
    ))
In [5]:
p = ggplot(data, aes('x', 'y')) + scale_y_continuous(limits=[-size, size], expand=[.15, 0])
In [6]:
gggrid([
    p + geom_point(size=size) + title("Point"),
    p + geom_point(size=size, size_unit='y') + title("Point", 'y'),
])
Out[6]:
In [7]:
gggrid([
    p + geom_text(aes(label='text'), size=size) + title("Text"),
    p + geom_text(aes(label='text'), size=size, size_unit='y') + title("Text", 'y'),
])
Out[7]:
In [8]:
gggrid([
    p + geom_label(aes(label='text'), size=size) + title("Label"),
    p + geom_label(aes(label='text'), size=size, size_unit='y') + title("Label", 'y'),
])
Out[8]:

Use Case: Drawing a Venn Diagram

In [9]:
from math import sqrt
In [10]:
r = .5
h = r * sqrt(3)/2
sets_data = {
    'x': [0, r, r/2],
    'y': [0, 0, h],
    'size': [2*r, 2*r, 2*r],
    'color': ['#e24462', '#306998', '#ffe873'],
}
texts_data = {
    'x': [-r/2, r + r/2, r/2, r/2, -r/8, r + r/8, r/2],
    'y': [-r/4, -r/4, h + r/2, -3*r/8, 5*r/8, 5*r/8, 5*r/16],
    'text': ["Kotlin", "Geospatial\nVisualization", "Grammar\nof\nGraphics", "ArcGIS", "Kandy", "ggmap", "Lets-Plot"],
    'size': [.4*r]*7,
}
In [11]:
ggplot() + \
    geom_point(aes('x', 'y', size='size', fill='color'), \
               data=sets_data, size_unit='x', \
               shape=21, alpha=.5, color='black', \
               tooltips='none') + \
    geom_text(aes('x', 'y', label='text', size='size'), \
              data=texts_data, size_unit='x') + \
    scale_size_identity() + scale_fill_identity() + \
    xlim(-r, 2*r) + ylim(-r, h + r) + \
    coord_fixed() + \
    ggsize(600, 600) + \
    theme_void()
Out[11]: