如何用字符绘制元组

时间:2019-01-30 14:15:03

标签: python python-3.x matplotlib tuples

我有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中绘制字符字段。

1 个答案:

答案 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"))

enter image description here

如果使用jupyter,pandas数据框的标准输出本身看起来非常漂亮。

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