Refactoring

This commit is contained in:
Matthias Bisping 2023-01-17 13:43:12 +01:00
parent 54484d9ad0
commit 0f6cbec1d5

View File

@ -421,71 +421,51 @@ class RandomTable(RandomContentRectangle):
def __init__(self, x1, y1, x2, y2, seed=None):
super().__init__(x1, y1, x2, y2, seed=seed)
# def generate_random_table(self, rectangle: Rectangle):
# """Generates the image of a random table.
#
# Reference: https://stackoverflow.com/questions/35634238/how-to-save-a-pandas-dataframe-table-as-a-png
# """
# # df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
# df = self.generate_random_dataframe(rectangle, 12)
# print(df)
#
# from pandas.plotting import table
#
# ax = plt.subplot(111, frame_on=False)
# ax.xaxis.set_visible(False)
# ax.yaxis.set_visible(False)
#
# table(ax, df)
# plt.savefig('/tmp/mytable.png')
#
# image = dump_plt_to_image(rectangle)
# image.show()
#
# self.content = image
def generate_random_table(self, rectangle: Rectangle):
"""Generates the image of a random table.
Reference: https://stackoverflow.com/questions/35634238/how-to-save-a-pandas-dataframe-table-as-a-png
"""
import dataframe_image as dfi
df = self.generate_random_dataframe(rectangle, 11)
table_lines = self.generate_random_ascii_table(rectangle, 11)
print(df)
text_table = self.generate_random_ascii_table(rectangle)
table_lines = text_table.split("\n")
image = write_lines_to_image(table_lines, rectangle)
# df_styled = df.style.background_gradient()
# buf = io.BytesIO()
# dfi.export(df_styled, buf)
# image = Image.open(buf)
# image = image.resize((rectangle.width, rectangle.height))
self.content = image
def generate_random_dataframe(self, rectangle: Rectangle, font_size: int):
def generate_random_dataframe(self, rectangle: Rectangle):
"""Generates a random dataframe that has as many rows and columns as to fit the given rectangle."""
h_factor = font_size * 5
v_factor = font_size * 2
image = Image.new("RGB", (rectangle.width, rectangle.height), color="white")
draw = ImageDraw.Draw(image)
text_size = draw.textsize("dummy", font=ImageFont.load_default())[1]
rows = rectangle.height // h_factor
cols = rectangle.width // v_factor
rows = rectangle.height // text_size
col_names = list(string.ascii_uppercase)
cols = min(rectangle.width // text_size, len(col_names))
df = pd.DataFrame(
np.random.randint(0, 100, size=(rows, cols)),
columns=list(string.ascii_uppercase[:cols]),
columns=col_names[:cols],
)
return df
def generate_random_ascii_table(self, rectangle: Rectangle, font_size: int):
df = self.generate_random_dataframe(rectangle, font_size)
text_table = tabulate(df, headers="keys", tablefmt="psql")
lines = text_table.split("\n")
return lines
def generate_random_ascii_table(self, rectangle: Rectangle):
df = self.generate_random_dataframe(rectangle)
table_format = random.choice(
[
"simple",
"grid",
"presto",
"psql",
"rst",
]
)
text_table = tabulate(df, headers="keys", tablefmt=table_format)
return text_table
def dump_plt_to_image(rectangle):