python -Как построить график из списка списков, импортированных из Excel? - PullRequest
1 голос
/ 09 марта 2020

Привет всем. Моя задача звучит просто, но я чувствую себя смущенным. У меня есть файл Excel с пятью разными столбцами (Величина, BP1, BP2, D1, D2), каждый с одинаковым количеством строк (23).

Ввод: пять столбцов с числовыми данными.

Желаемый результат: два участка. Первый должен содержать Величину против Частоты (понимание частоты как линии от BP1 до BP2 для каждого элемента величины). Вторым должно быть Величина против расстояния (понимание расстояния аналогично тому, как указано выше).

Пробное кодирование:

import numpy as numpy
import os, sys
import os.path
import pandas as pd
import matplotlib.pyplot as plt

fname=os.path.join(workingdir, 'Frequency and BP values.xlsx')
if not os.path.isfile(fname):
    sys.exit('File missing: '+fname)

f_read=pd.read_excel(fname, sheet_name='Valores')
#Reading columns
Magnitude=f_read['Magnitude (Mw)'].tolist()
BP1=f_read['BP1'].tolist()
BP2=f_read['BP2'].tolist()
D1=f_read['Distance1'].tolist()
D2=f_read['Distance2'].tolist()

#Building lists
Feq_Mag=[BP1, BP2]
for i in range(0, 23):
    Feq_Mag0=[x[i] for x in Feq_Mag]
D_Mag=[D1, D2]
D_Mag=[x[0] for x in D_Mag]

#Plotting attributes
#---Frequency plot
fig=plt.figure()
Freq_plot=fig.add_subplot(121)
Freq_plot.set_xlabel(u'Frequency (Hz)', fontsize=6)
Freq_plot.set_ylabel(u'Magnitude (Mw)', fontsize=6)
Freq_plot.plot(BP_Mag, c='crimson', linewidth=2.5)
plt.show()
new_dir=os.chdir(catdir)
fig.savefig('Ranges_Distribution.png')
plt.close('all')

Фактический результат: выводится одна линия, и она даже не соответствуют значению величины. Он построен на базовом уровне.

Спасибо за ваше время и помощь.

1 Ответ

1 голос
/ 09 марта 2020

Правильно, поэтому, если я правильно понимаю: у вас есть один набор x -значений и два набора соответствующих y -значений (назовем их y1 и у2 ). Вы хотите взять эти значения и нарисовать линию от y1 до y2 для каждого x . В этом случае вы хотите запустить for-l oop. Написанный в виде двумерного списка и использующий только списки и matplotlib.pyplot, это то, что я придумал.

import matplotlib.pyplot as plt

y = [[1, 2, 3, 4, 5, 6],
     [2, 4, 6, 8, 10, 12]]
x = [1, 2, 3, 4, 5, 6]

some_figure = plt.figure()
some_subplot = some_figure.add_subplot('111')
for i in range(len(x)):
    some_subplot.plot([x[i], x[i]], [y[0][i], y[1][i]])

plt.show()

Output

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