Как построить кортеж с персонажем - PullRequest
0 голосов
/ 30 января 2019

У меня есть 2 кортежа, как показано ниже:

L1 = [(10955, 'A'), (10954, 'A'), (10953, 'A'), (10952, 'AB'), (10951, 'AB'), (10950, 'AB'), (10949, 'AB'), (10948, 'ABC')]

L2 = [(10956, 'AB'), (10955, 'AB'), (10954, 'A'), (10953, 'ABC'), (10952, 'DEF'), (10951, 'ABC'), (10950, 'AB'), (10949, 'ABC'), (10948, 'ABC'), (10947, 'ABCD')]

Я хочу построить их в matpltlib, как показано ниже:

10956 |     | AB
10955 | A   | AB
10954 | A   | A
10953 | A   | ABC
10952 | AB  | DEF
10951 | AB  | ABC
10950 | AB  | AB
10949 | AB  | ABC
10948 | ABC | ABC
10947 | ABCD| 
-------------------
      | L1  | L2

Как построить поля char в matplotlib.

1 Ответ

0 голосов
/ 31 января 2019

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

import pandas as pd

L1 = [(10955, 'A'), (10954, 'A'), (10953, 'A'), (10952, 'AB'), 
      (10951, 'AB'), (10950, 'AB'), (10949, 'AB'), (10948, 'ABC')]
L2 = [(10956, 'AB'), (10955, 'AB'), (10954, 'A'), (10953, 'ABC'), 
      (10952, 'DEF'), (10951, 'ABC'), (10950, 'AB'), (10949, 'ABC'), 
      (10948, 'ABC'), (10947, 'ABCD')]

s1 = pd.DataFrame(L1, columns=["index", "L1"]).set_index("index")
s2 = pd.DataFrame(L2, columns=["index", "L2"]).set_index("index")

df = pd.concat((s1, s2), join="outer", axis=1).fillna("")

print(df)

В результате в консоли будет

        L1    L2
index
10947       ABCD
10948  ABC   ABC
10949   AB   ABC
10950   AB    AB
10951   AB   ABC
10952   AB   DEF
10953    A   ABC
10954    A     A
10955    A    AB
10956         AB

.

Затем можно также сохранить таблицу в формате html и открыть ее в веб-браузере

df.to_html('out.html')
import webbrowser, os
webbrowser.open('file://' + os.path.realpath("out.html"))

enter image description here

Если вы используете jupyter,стандартный вывод pandas dataframe сам по себе выглядит очень хорошо.

enter image description here

Используя matplotlib (потому что вопрос задает его), можно построить значения изфрейм данных внутри оси, как это

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

for ind, data in np.ndenumerate(df.values):
    ax.annotate(data, xy=ind[::-1])

ax.set(xticks=range(len(df.columns)), yticks =range(len(df)),
       xticklabels=df.columns, yticklabels=df.index)
ax.set(xlim=(-1, len(df.columns)+1),
       ylim=(-1, len(df)), 
       aspect=.6)
plt.show()

enter image description here

Кроме того, matplotlib предоставляет таблицы

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.table(cellText=df.values, rowLabels=df.index, colLabels=df.columns, loc='center')
ax.axis("off")
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...