In [1]:
from lets_plot import *
In [2]:
LetsPlot.setup_html()
In [3]:
def plot(value, label_format, exponent_format, *, text_size=None, color=None):
    return ggplot() + \
        geom_text(x=0, label=value, size=text_size, label_format=label_format) + \
        theme_void() + \
        theme(
            exponent_format=exponent_format,
            plot_background=element_rect(color="white", fill=color, size=1),
        )

class Cell:

    def __init__(self, row, col, value, label_format, exponent_format, color):
        self.row = row
        self.col = col
        self.value = value
        self.format = label_format
        self.exponent_format = exponent_format
        self.color = color

class Table:

    DEF_COLOR = "#eeeeee"

    cells = []

    def __init__(self, width, height, text_size):
        self.width = width
        self.height = height
        self.text_size = text_size

    def add(self, row, col, value, *, exponent_format=None, color=DEF_COLOR):
        if exponent_format is None:
            label_format = ".14~f"
        else:
            label_format = "g"
        self.cells.append(Cell(row, col, value, label_format, exponent_format, color))

    def plot(self):
        bunch = GGBunch()
        for cell in self.cells:
            p = plot(cell.value, cell.format, cell.exponent_format, text_size=self.text_size, color=cell.color)
            bunch.add_plot(p, cell.col * self.width, cell.row * self.height, self.width, self.height)
        return bunch
In [4]:
header_color = "#dddddd"

table = Table(120, 60, 10)

table.add(0, 0, "limits", color=header_color)
table.add(0, 1, "value", color=header_color)
table.add(0, 2, "'e'", color=header_color)
table.add(0, 3, "'pow'", color=header_color)
table.add(0, 4, "'pow_full'", color=header_color)

for r in range(1, 16):
    table.add(r, 0, "default" if r == 8 else "")

table.add(1, 1, 0.0000001)
table.add(1, 2, 0.0000001, exponent_format='e')
table.add(1, 3, 0.0000001, exponent_format='pow')
table.add(1, 4, 0.0000001, exponent_format='pow_full')

table.add(2, 1, 0.000001)
table.add(2, 2, 0.000001, exponent_format='e')
table.add(2, 3, 0.000001, exponent_format='pow')
table.add(2, 4, 0.000001, exponent_format='pow_full')

table.add(3, 1, 0.1)
table.add(3, 2, 0.1, exponent_format='e')
table.add(3, 3, 0.1, exponent_format='pow')
table.add(3, 4, 0.1, exponent_format='pow_full')

table.add(4, 1, 1)
table.add(4, 2, 1, exponent_format='e')
table.add(4, 3, 1, exponent_format='pow')
table.add(4, 4, 1, exponent_format='pow_full')

table.add(5, 1, 10)
table.add(5, 2, 10, exponent_format='e')
table.add(5, 3, 10, exponent_format='pow')
table.add(5, 4, 10, exponent_format='pow_full')

table.add(6, 1, 100000)
table.add(6, 2, 100000, exponent_format='e')
table.add(6, 3, 100000, exponent_format='pow')
table.add(6, 4, 100000, exponent_format='pow_full')

table.add(7, 1, 1000000)
table.add(7, 2, 1000000, exponent_format='e')
table.add(7, 3, 1000000, exponent_format='pow')
table.add(7, 4, 1000000, exponent_format='pow_full')

table.add(8, 1, 0.0000002)
table.add(8, 2, 0.0000002, exponent_format='e')
table.add(8, 3, 0.0000002, exponent_format='pow')
table.add(8, 4, 0.0000002, exponent_format='pow_full')

table.add(9, 1, 0.000002)
table.add(9, 2, 0.000002, exponent_format='e')
table.add(9, 3, 0.000002, exponent_format='pow')
table.add(9, 4, 0.000002, exponent_format='pow_full')

table.add(10, 1, 200000)
table.add(10, 2, 200000, exponent_format='e')
table.add(10, 3, 200000, exponent_format='pow')
table.add(10, 4, 200000, exponent_format='pow_full')

table.add(11, 1, 2000000)
table.add(11, 2, 2000000, exponent_format='e')
table.add(11, 3, 2000000, exponent_format='pow')
table.add(11, 4, 2000000, exponent_format='pow_full')

table.add(12, 1, -1000000)
table.add(12, 2, -1000000, exponent_format='e')
table.add(12, 3, -1000000, exponent_format='pow')
table.add(12, 4, -1000000, exponent_format='pow_full')

table.add(13, 1, -0.0000001)
table.add(13, 2, -0.0000001, exponent_format='e')
table.add(13, 3, -0.0000001, exponent_format='pow')
table.add(13, 4, -0.0000001, exponent_format='pow_full')

table.add(14, 1, -2000000)
table.add(14, 2, -2000000, exponent_format='e')
table.add(14, 3, -2000000, exponent_format='pow')
table.add(14, 4, -2000000, exponent_format='pow_full')

table.add(15, 1, -0.0000002)
table.add(15, 2, -0.0000002, exponent_format='e')
table.add(15, 3, -0.0000002, exponent_format='pow')
table.add(15, 4, -0.0000002, exponent_format='pow_full')

for c in range(5):
    table.add(16, c, "", color="white")

table.add(17, 0, "limits", color=header_color)
table.add(17, 1, "value", color=header_color)
table.add(17, 2, "'e'", color=header_color)
table.add(17, 3, "'pow'", color=header_color)
table.add(17, 4, "'pow_full'", color=header_color)

for r in range(18, 27):
    table.add(r, 0, "(-2, 3)" if r == 22 else "")

table.add(18, 1, 0.01)
table.add(18, 2, 0.01, exponent_format=('e', -2, 3))
table.add(18, 3, 0.01, exponent_format=('pow', -2, 3))
table.add(18, 4, 0.01, exponent_format=('pow_full', -2, 3))

table.add(19, 1, 0.1)
table.add(19, 2, 0.1, exponent_format=('e', -2, 3))
table.add(19, 3, 0.1, exponent_format=('pow', -2, 3))
table.add(19, 4, 0.1, exponent_format=('pow_full', -2, 3))

table.add(20, 1, 1)
table.add(20, 2, 1, exponent_format=('e', -2, 3))
table.add(20, 3, 1, exponent_format=('pow', -2, 3))
table.add(20, 4, 1, exponent_format=('pow_full', -2, 3))

table.add(21, 1, 100)
table.add(21, 2, 100, exponent_format=('e', -2, 3))
table.add(21, 3, 100, exponent_format=('pow', -2, 3))
table.add(21, 4, 100, exponent_format=('pow_full', -2, 3))

table.add(22, 1, 1000)
table.add(22, 2, 1000, exponent_format=('e', -2, 3))
table.add(22, 3, 1000, exponent_format=('pow', -2, 3))
table.add(22, 4, 1000, exponent_format=('pow_full', -2, 3))

table.add(23, 1, 0.02)
table.add(23, 2, 0.02, exponent_format=('e', -2, 3))
table.add(23, 3, 0.02, exponent_format=('pow', -2, 3))
table.add(23, 4, 0.02, exponent_format=('pow_full', -2, 3))

table.add(24, 1, 0.2)
table.add(24, 2, 0.2, exponent_format=('e', -2, 3))
table.add(24, 3, 0.2, exponent_format=('pow', -2, 3))
table.add(24, 4, 0.2, exponent_format=('pow_full', -2, 3))

table.add(25, 1, 200)
table.add(25, 2, 200, exponent_format=('e', -2, 3))
table.add(25, 3, 200, exponent_format=('pow', -2, 3))
table.add(25, 4, 200, exponent_format=('pow_full', -2, 3))

table.add(26, 1, 2000)
table.add(26, 2, 2000, exponent_format=('e', -2, 3))
table.add(26, 3, 2000, exponent_format=('pow', -2, 3))
table.add(26, 4, 2000, exponent_format=('pow_full', -2, 3))

for c in range(5):
    table.add(27, c, "", color="white")

table.add(28, 0, "limits", color=header_color)
table.add(28, 1, "value", color=header_color)
table.add(28, 2, "'e'", color=header_color)
table.add(28, 3, "'pow'", color=header_color)
table.add(28, 4, "'pow_full'", color=header_color)

for r in range(29, 38):
    table.add(r, 0, "(0, 0)" if r == 33 else "")

table.add(29, 1, 0.1)
table.add(29, 2, 0.1, exponent_format=('e', 0, 0))
table.add(29, 3, 0.1, exponent_format=('pow', 0, 0))
table.add(29, 4, 0.1, exponent_format=('pow_full', 0, 0))

table.add(30, 1, 1)
table.add(30, 2, 1, exponent_format=('e', 0, 0))
table.add(30, 3, 1, exponent_format=('pow', 0, 0))
table.add(30, 4, 1, exponent_format=('pow_full', 0, 0))

table.add(31, 1, 10)
table.add(31, 2, 10, exponent_format=('e', 0, 0))
table.add(31, 3, 10, exponent_format=('pow', 0, 0))
table.add(31, 4, 10, exponent_format=('pow_full', 0, 0))

table.add(32, 1, 0.2)
table.add(32, 2, 0.2, exponent_format=('e', 0, 0))
table.add(32, 3, 0.2, exponent_format=('pow', 0, 0))
table.add(32, 4, 0.2, exponent_format=('pow_full', 0, 0))

table.add(33, 1, 2)
table.add(33, 2, 2, exponent_format=('e', 0, 0))
table.add(33, 3, 2, exponent_format=('pow', 0, 0))
table.add(33, 4, 2, exponent_format=('pow_full', 0, 0))

table.add(34, 1, 20)
table.add(34, 2, 20, exponent_format=('e', 0, 0))
table.add(34, 3, 20, exponent_format=('pow', 0, 0))
table.add(34, 4, 20, exponent_format=('pow_full', 0, 0))

table.add(35, 1, -0.1)
table.add(35, 2, -0.1, exponent_format=('e', 0, 0))
table.add(35, 3, -0.1, exponent_format=('pow', 0, 0))
table.add(35, 4, -0.1, exponent_format=('pow_full', 0, 0))

table.add(36, 1, -1)
table.add(36, 2, -1, exponent_format=('e', 0, 0))
table.add(36, 3, -1, exponent_format=('pow', 0, 0))
table.add(36, 4, -1, exponent_format=('pow_full', 0, 0))

table.add(37, 1, -10)
table.add(37, 2, -10, exponent_format=('e', 0, 0))
table.add(37, 3, -10, exponent_format=('pow', 0, 0))
table.add(37, 4, -10, exponent_format=('pow_full', 0, 0))

table.plot()
Out[4]: