PyPlot.Table работает с различными интервалами столбцов и строк.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 PyPlot.Table работает с различными интервалами столбцов и строк.

Сообщение Anonymous »

Я ищу способ добавления столбцов, которые могут охватывать несколько строк, и строк, которые могут охватывать несколько столбцов.
В настоящее время у меня есть код ниже, чтобы получить первую строку в .

Код: Выделить всё

# Calculate log-scaled widths
table_widths = [0.001, 0.002, 0.063, 2.0, 63.0, 150.0]
log_table_widths = np.diff(np.log10(table_widths))
log_table_widths = log_table_widths / log_table_widths.sum()

# Normalize widths to sum to 1
log_table_widths = log_table_widths / log_table_widths.sum()

table = ax.table(cellText=[['Clay', 'Silt', 'Sand', 'Gravel', 'Cobbles']], cellLoc='center', loc='bottom', colWidths=log_table_widths)
table_widths = []
table.auto_set_font_size(False)
table.set_fontsize(8)
table.scale(1, 1.5)
Чтобы получить следующий результат:
Изображение

Однако мне нужно добавить в таблицу еще одну строку, в которой несколько столбцов будут охватывать следующую строку. А ячейки в текущей строке должны будут охватывать несколько столбцов. Вот так:
Изображение
Предпочтительно, чтобы нижняя строка была верхней, но не катастрофа.
Я пробовал сделать это в одиночку и получить помощь от GitHub CoPilot и MS CoPilot. Однако, безуспешно, лучшее, что мы смогли придумать, это следующее:

Код: Выделить всё

# Calculate log-scaled widths
table_widths = [0.001, 0.002, 0.063, 2.0, 63.0, 150.0]
log_table_widths = np.diff(np.log10(table_widths))
log_table_widths = log_table_widths / log_table_widths.sum()

# Normalize widths to sum to 1
log_table_widths = log_table_widths / log_table_widths.sum()

# Create the table
cell_text = [
['Clay', 'Silt', 'Fine', 'Medium', 'Coarse', 'Fine', 'Medium', 'Coarse'],
['', '', 'Sand', 'Sand', 'Sand', 'Gravel', 'Gravel', 'Gravel'],
]
col_labels = ['Clay', 'Silt', 'Fine', 'Medium', 'Coarse', 'Fine', 'Medium', 'Coarse']
col_widths = [log_table_widths, log_table_widths, log_table_widths/3, log_table_widths/3, log_table_widths/3, log_table_widths/3, log_table_widths/3, log_table_widths/3]

# Add the table to the plot
table = ax.table(cellText=cell_text, colLabels=col_labels, cellLoc='center', loc='bottom', colWidths=col_widths)
table.auto_set_font_size(False)
table.set_fontsize(8)
table.scale(1, 1.5)

# Adjust cell alignment to avoid ambiguity
for key, cell in table.get_celld().items():
cell.set_text_props(ha='center', va='center')
Выдает следующую ошибку:

Код: Выделить всё

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Не знаю, как это решить.
Для воспроизводимости вы можете использовать:

Код: Выделить всё

fig, ax = plt.subplots()
fig.set_figwidth(18)
fig.set_figheight(12)
fig.set_dpi(80)
# draw vertical line at: 0.002mm, 0.063mm, 2.0mm, 63mm
ax.axvline(x=0.002, color='red', linestyle='--')
ax.axvline(x=0.063, color='red', linestyle='--')
ax.axvline(x=2.0, color='red', linestyle='--')
ax.axvline(x=63.0, color='red', linestyle='--')
ax.set_xlim(0.001, 150)

# Calculate log-scaled widths
table_widths = [0.001, 0.002, 0.063, 2.0, 63.0, 150.0]
log_table_widths = np.diff(np.log10(table_widths))
log_table_widths = log_table_widths / log_table_widths.sum()

# Normalize widths to sum to 1
log_table_widths = log_table_widths / log_table_widths.sum()

# Create the table
cell_text = [
['Clay', 'Silt', 'Fine', 'Medium', 'Coarse', 'Fine', 'Medium', 'Coarse'],
['', '', 'Sand', 'Sand', 'Sand', 'Gravel', 'Gravel', 'Gravel'],
]
col_labels = ['Clay', 'Silt', 'Fine', 'Medium', 'Coarse', 'Fine', 'Medium', 'Coarse']
col_widths = [log_table_widths, log_table_widths, log_table_widths/3, log_table_widths/3, log_table_widths/3, log_table_widths/3, log_table_widths/3, log_table_widths/3]

# Add the table to the plot
table = ax.table(cellText=cell_text, colLabels=col_labels, cellLoc='center', loc='bottom', colWidths=col_widths)
table.auto_set_font_size(False)
table.set_fontsize(8)
table.scale(1, 1.5)

# Adjust cell alignment to avoid ambiguity
for key, cell in table.get_celld().items():
cell.set_text_props(ha='center', va='center')

fig.savefig('fig.png', format='png', bbox_inches='tight')

РЕДАКТИРОВАТЬ:
Мне удалось избавиться от ошибки. Это было вызвано определением переменной col_widths, в которой я заполнял ее списками вместо соответствующих значений.
Сейчас я определил ее так, возможно, позже найду лучшее решение для этой проблемы.

Код: Выделить всё

col_widths = [log_table_widths[0], log_table_widths[1], log_table_widths[2] / 3, log_table_widths[2] / 3, log_table_widths[2] / 3, log_table_widths[3] / 3, log_table_widths[3] / 3, log_table_widths[3] / 3, log_table_widths[4]]
Моя таблица теперь выглядит так:
Изображение
< /p>
Хотя я не понял, как объединить строки и ячейки.
Я нашел этот пост: Таблица Matplotlib с двойными заголовками
Где создано несколько таблиц для отображения несколько заголовков. Но, к сожалению, это не сработает для объединения ячеек в столбце и только в строке.


Подробнее здесь: https://stackoverflow.com/questions/790 ... d-rowspans
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • PyPlot.Table работает с различными интервалами столбцов и строк.
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • PyPlot.Table работает с различными интервалами столбцов и строк.
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • PyPlot.Table работает с различными интервалами столбцов и строк.
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Укладка элементов div по вертикали при использовании display:table, table-row, table-cell
    Anonymous » » в форуме CSS
    0 Ответы
    127 Просмотры
    Последнее сообщение Anonymous
  • Ef core enum to table table table intrond
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»