开发者社区> 问答> 正文

我如何从Excel导入的列表列表中进行绘图?

大家好 我的任务听起来很简单,但我感到困惑。我有一个Excel文件,其中有五个不同的列(Magnitude,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')

实际输出:绘制了一条直线,它甚至与幅度值都不对应。它在基本级别上绘制。

感谢您的时间和帮助。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 15:54:17 384 0
1 条回答
写回答
取消 提交回答
  • 是的,所以,如果我理解正确的话:您有一组x值和两组相应的y值(我们称它们为y1和y2)。您想采用这些值并为每个x从y1到y2画一条线。在这种情况下,您要运行一个for循环。写成二维列表,仅使用列表和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()
    

    回答来源:stackoverflow

    2020-03-24 15:54:25
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载