Создать таблицу закругленных углов matplotlib - PullRequest
0 голосов
/ 10 апреля 2020

Есть ли способы создать таблицу закругленных углов с помощью matplotlib?

  • Ожидаемый результат.

enter image description here

  • Текущий результат.

enter image description here

  • table.py
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    'Name':['alice','bob','charlie','dave','eve','frank','Sum'],
    'Age':[14,35,64,7,19,25,164]})[['Name','Age']]

fig, ax = plt.subplots(figsize=(2,2))
ax.axis('off')
ax.axis('tight')
ax.table(cellText=df.values,
         colLabels=df.columns,
         loc='center',
         bbox=[0,0,1,1])
plt.savefig('table.png')
  • Запуск в docker контейнере
$ export MPLBACKEND="agg"
$ python3 table.py

1 Ответ

1 голос
/ 10 апреля 2020

Я пытался использовать bbox из matplotlib.table, но это не сработало. Я попробовал другой (и очень хитрый) способ справиться с этим, сохранив его в формате HTML и вырезав его в изображение. (Это очень неудачный способ сделать это.)

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    'Name':['alice','bob','charlie','dave','eve','frank','Sum'],
    'Age':[14,35,64,7,19,25,164]})[['Name','Age']]

html_template = '''
<!DOCTYPE html>
<html lang="jp" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title>table</title>
        <style type="text/css">
            table {{
            border: 1px solid #ccc;
            border-collapse: separate;
            border-radius: 5px;
            border-spacing: 0;
            }}
            table th, table td {{
            border-bottom: 1px solid #ccc;
            padding: 10px 20px;
            }}
            table th {{
            border-right: 1px solid #ccc;
            background: #EEE;
            }}
            table tr:first-child th {{
            border-radius: 5px 0 0 0;
            }}
            table tr:first-child td {{
            border-radius: 0 5px 0 0;
            }}
            table tr:last-child th {{
            border-bottom: none;
            border-radius: 0 0 0 5px;
            }}
            table tr:last-child td {{
            border-bottom: none;
            border-radius: 0 0 5px 0;
            }}
        </style>
    </head>
    <body>
        <div class="container">
            {table}
        </div>
    </body>
</html>
'''
table = df.to_html(classes=['table',"table-bordered", "table-hover"])
html = html_template.format(table=table)

with open("table.html", "w") as f:
    f.write(html)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...