Как создавать графики, сравнивая данные, прочитанные из двух разных текстовых файлов в python? - PullRequest
0 голосов
/ 07 августа 2020

У меня есть два текстовых файла. Первый имеет форму:

K_1, 1
K_2, 2
J_1, 3
J_2, 4
J_3, 5
L_1, 6

Второй файл имеет форму:

K_2, 6
K_1, 5
J_2, 4
J_3, 4
J_1, 5
L_1, 4

, где первый столбец в обоих файлах содержит тот же набор строк, но второй столбец отличается диапазоном значений от 1 до 6 (минимальное значение - 1, максимальное - 6).

Мне нужно получить два графика из этих файлов ...

Первый график занимает каждый этих текстовых файлов в качестве входных данных и создает график с числами 1,2,3,4,5,6 по оси x и соответствующими числами единиц, 2, 3 и т. д. c по оси y. Итак, я хотел бы провести сравнение значений второго столбца каждого файла на одном графике.

На втором графике мне нужна разница между значениями столбцов. То есть для K_1 значение из первого файла равно 1, а значение из второго файла - 5. Мне нужно вычислить абсолютную разницу между ними и возвращаемым значением 4 (abs (1-5) = 4). Разница рассчитывается для двух значений одной строки (здесь K_1). Наконец, мне нужно записать «значения без разницы», значения с разницей в 1, значения с разницей в 2, значения с разницей по 3, значения с разницей в 4 и значения с разницей в 5 по оси x и их соответствующие числа на оси Y.

Кто-нибудь может помочь мне построить это с помощью python?

1 Ответ

0 голосов
/ 07 августа 2020
import matplotlib.pyplot as plt
import collections

file_txt1 = open('your_file1_path_and_name.txt', 'r')
lines1 = [line.split(', ') for line in file_txt1.readlines()]
column1 = [line[0] for line in lines1]
values1 = [int(line[1]) for line in lines1]
nb_lines = len(column1)


file_txt2 = open('your_file2_path_and_name.txt', 'r')
lines2 = [line.split(', ') for line in file_txt2.readlines()]
column2 = [line[0] for line in lines2]
values2 = [int(line[1]) for line in lines2]


# Check if the lines names are the same for both files
if collections.Counter(column1) != collections.Counter(column2) :
  raise ValueError("files '{}' and '{}' don't have the same lines names".format(file_txt1.name, file_txt2.name))


# First plot
x = list(range(1,7))
y1 = [values1.count(i) for i in x]
y2 = [values2.count(i) for i in x]
plt.plot(x,y1, label = "file '{}'".format(file_txt1.name))
plt.plot(x,y2, label = "file '{}'".format(file_txt2.name))
plt.legend()
plt.title('Counts of numbers in each file')
plt.show()

# Second plot
values2_in_order = [values2[column2.index(line_name)] for line_name in column1] # Gives a list with the same elements as values2, but this time in the same order as values1
y3 = [abs(values1[i] - values2_in_order[i]) for i in range(nb_lines)]
plt.plot(column1, y3)
plt.title('Absolute differences of lines between both files')
plt.show()

# Third plot
y4 = [y3.count(i) for i in range(6)]
plt.plot(list(range(6)), y4)
plt.title('Counts of absolute differences')
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...