我有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
如何在matplotlib中绘制字符字段。
答案 0 :(得分:1)
我可能建议研究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"))
如果使用jupyter,pandas数据框的标准输出本身看起来非常漂亮。
使用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()
而且,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()