python - matplotlib - 将文件内容读入绘图

时间:2017-04-14 18:00:59

标签: python matplotlib plot bar-chart

我对Python比较了解,所以如果这是一个愚蠢的问题,请耐心等待,但我自己无法弄明白。对于我可能错过的问题的任何指示,我也很高兴。

因此,我的文件内容如下:

file.txt的

N    38668442   0.32%
V    14008521   0.12%
ADJ  16112215   0.13%
N    375644830  3.13%
V    380340512  3.17%
ADJ  438651326  3.66%
N    691647661  5.77%
V    832219601  6.94%
ADJ  540782210  4.51%

我喜欢使用matplotlib将file.txt的百分比转换成一个图,其中包含以下代码(摘录):

import numpy as np
import matplotlib.pyplot as plt

# data to plot
n_groups = 3
N = (0.32, 3.13, 5.77)
V = (0.12, 3.17, 6.94) 
ADJ = (0.13, 3.66, 4.51) 

# create plot
fig, ax = plt.subplots()
index = np.arange(n_groups)
bar_width = 0.25
opacity = 0.7

rects1 = plt.bar(index, N, bar_width,
                 alpha=opacity,
                 color='darkred',
                 label='N')

rects2 = plt.bar(index + bar_width, V, bar_width,
                 alpha=opacity,
                 color='green',
                 label='V')

rects3 = plt.bar(index + bar_width + bar_width, ADJ, bar_width,
                 alpha=opacity,
                 color='darkblue',
                 label='ADJ')

plt.xlabel('Category')
plt.ylabel('Percentage')
plt.xticks(index + bar_width + bar_width + bar_width + bar_width, ('1.5', '2', '2.5'))

plt.ylim(0, 100)

plt.tight_layout()
plt.show()

在此代码中,N,V和ADJ都是元组。所以,我想从file.txt读取百分比(没有百分号)到一个元组,然后可以用它来生成图(而不是手动为N,V,ADJ输入值)。

我设法从文件创建元组但不幸的是,如果我使用生成的元组,则会引发错误消息。元组之间有什么区别?我错过了什么或误解了什么?

从file.txt生成元组的代码

with open('file.txt', 'r') as f:
N_lines = []
V_lines = []
ADJ_lines = []
for line in f:
    if line.startswith("N"):
        line = line.strip()
        line = line[:-1]
        parts = line.split("\t")
        N_lines.append(parts[2])
    if line.startswith("V"):
        line = line.strip()
        line = line[:-1]
        parts = line.split("\t")
        V_lines.append(parts[2])
    if line.startswith("ADJ"):
        line = line.strip()
        line = line[:-1]
        parts = line.split("\t")
        ADJ_lines.append(parts[2])

N = tuple(N_lines)
V = tuple(V_lines)
ADJ = tuple(ADJ_lines)

另外,我打印了我的元组,它们看起来略有不同,因为引号在项目周围,所以我试图删除它们。

我非常感谢任何帮助或建议!

1 个答案:

答案 0 :(得分:1)

文件中的元组实际上包含字符串。这就是他们无法绘制的原因。

要读入文件,您可以使用下面的代码。

它会将文本文件中的值转换为没有百分号的小数,以便您可以在绘图代码中使用它们。

import Decimal as dc

with open('file.txt','r') as f:
    N_lines = []
    V_lines = []
    ADJ_lines = []
    for line in f:
        if line.startswith("N"):
            line = line.strip()
            line = line[:-1]
            parts = line.split("\t")
            N_lines.append(dc.Decimal(parts[2][:-1]))
        elif line.startswith("V"):
            line = line.strip()
            line = line[:-1]
            parts = line.split("\t")
            V_lines.append(dc.Decimal(parts[2][:-1]))
        elif line.startswith("ADJ"):
            line = line.strip()
            line = line[:-1]
            parts = line.split("\t")
            ADJ_lines.append(dc.Decimal(parts[2][:-1]))