import random, string
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
np.random.seed(42)
def gen_word(length):
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for _ in range(length))
def gen_word_set(n):
random.seed(1)
word_set = set()
while len(word_set) < n:
word_set.add(gen_word(5))
return word_set
def data(n, word_set):
word_choice = list(word_set)
words=[]
groups = []
for _ in range(n):
words.append(np.random.choice(word_choice))
groups.append(np.random.choice(['a','b','c']))
return dict(word=words, g=groups)
N = 500
word_set = gen_word_set(N)
dat = data(1000, word_set)
p = ggplot(dat, aes(x='word'))
# Default sampling on bar chart.
p + geom_bar(size=.1)
# Draw plot with 'pick' sampling.
p + geom_bar(sampling=sampling_pick(50), size=.1)
# 'pick' sampling preserves groups on bar chart.
p + geom_bar(aes(fill='g'), sampling=sampling_pick(50), size=.1)
# Also, to orger words by `count` might be a good idea.
from lets_plot.mapping import as_discrete
p + geom_bar(aes(x=as_discrete('word', order_by='..count..'), fill='g'), sampling=sampling_pick(50), size=.1)