Как удалить пробелы в динамической таблице Plotly?

У меня есть динамическая таблица Plotly. Она получает фрейм данных из SQL-запроса с помощью Pandas. Высота таблицы постоянно меняется, и я не устанавливаю текущее значение. После сервировки стола она должна отправить фото с помощью телеграм-бота айограммы. Как удалить пробелы под таблицей, которые возникают, если я не устанавливаю текущую высоту?

figure = go.Figure(data=[go.Table(
    columnwidth=[300, 200, 500, 500, 150, 400, 500, 150],
    header=dict(
        values=['<b>Date</b>', '<b>Time</b>', '<b>Client</b>', '<b>Service</b>', '<b>Price</b>', '<b>Tips</b>', '<b>Additional</b>', '<b>Work time</b>'],
        align=['center'],
        height=40
    ),
    cells=dict(
        values=dataframe.transpose().values.tolist(),
        align=['center'],
        height=30
    ),
)])
figure.update_layout(autosize=False, margin = {'l': 0, 'r': 0, 't': 0, 'b': 0}, width=1280)
figure.write_image("db/records.png")

UPD: dataframe.head().to_dict() репост

{'0': {0: '2022-10-24'}, '1': {0: '15:00'}, '2': {0: 'Bob'}, '3': {0: 'Radiator replacement'}, '4': {0: '16'}, '5': {0: '4'}, '6': {0: 'No'}, '7': {0: '2.0 h'}}

Пожалуйста, добавьте некоторые данные к вашему вопросу, скопировав результат dataframe.head().to_dict().

Hamzah 29.10.2022 19:08

@Хамза я написал

Raleyph 30.10.2022 04:06

Вы можете установить высоту на 100 или что-то в этом роде. figure.update_layout(autosize=False, height=100, margin = {'l': 0, 'r': 0, 't': 0, 'b': 0}, width=1280)

r-beginners 30.10.2022 08:33

@r-beginners я написал, что у меня есть динамическая таблица, в которой количество строк будет постоянно меняться

Raleyph 30.10.2022 14:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил проблему. Я умножил количество строк на высоту строки и добавил к этому высоту заголовка. Чтобы избежать проблем с ячейками, содержащими две строки, я прошелся по фрейму данных и экспериментальным путем определил, сколько символов содержится в ячейке, содержащей две строки. Далее, используя эти значения, я определил высоту таблицы, грубо посчитав, что ячейка, содержащая две строки, в 1,6 больше, чем ячейка, состоящая из одной строки.

def get_table_height(dataframe):
    rows = []
    double_height = 0

    for index, data in dataframe.iterrows():
        rows.append(index)
        if len(data[2]) > 28 or len(data[3]) > 28 or len(data[5]) > 28 or len(data[6]) > 28:
            double_height += 1

    one_rows_count = (len(rows) - double_height)
    one_rows = one_rows_count * 30
    double_rows = double_height * 48

    return 40 + one_rows + double_rows

Другие вопросы по теме