【问题标题】:Creating a loop to import data from a csv file line by line, plot them and save each plot separately创建一个循环以逐行从 csv 文件导入数据,绘制它们并分别保存每个图
【发布时间】:2017-01-25 12:33:11
【问题描述】:

我对 Python 比较陌生,所以我仍在学习细节。

我有一个包含 45 列数据的 CSV 文件,第一列是 x 轴,第 2-45 列都是 y 轴数据。我要做的是导入所有这些数据(逐行),然后为每个具有相同 x 的 y 轴列绘制一个图,因此 (x, y_1), (x, y_2) .... (x, y_45) 并将每个图分别保存为 1.png、2.png...45.png。

我可以使用以下代码逐行手动执行此操作:

#!/usr/bin/python

from pylab import *
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import lines
from matplotlib.font_manager import FontProperties

data = csv2rec('e.csv')
x = np.array([column[0] for column in data])
y_1 = np.array([column[1] for column in data])

plot( x, y_1, 'k-', label='1' )

lgd = legend(loc='center right', bbox_to_anchor=(1.25, 0.75), fontsize='xx-small')
#plt.gca().invert_yaxis()
plt.gca().get_xaxis().get_major_formatter().set_useOffset(False)
plt.gca().get_yaxis().get_major_formatter().set_useOffset(False)
plt.gca().set_xlabel(r'$\lambda$($\AA$)')
ylabel( 'FUV-MAG(AB)' )
savefig('1.png', bbox_extra_artists=(lgd,), bbox_inches='tight')

但是,这当然需要一段时间才能手动完成。我知道如何在一系列 x 和 y 列上进行基本循环来绘制它们,但我想知道你们中是否有人对如何创建一个循环来导入、绘制和保存上述所有图有任何建议同一时间。

非常感谢。

【问题讨论】:

    标签: python-2.7 python-3.x


    【解决方案1】:

    我还没有使用过csv2rec,所以对它的输出并不完全熟悉(所以range(1,len(column)) 部分可能需要调整,但希望能说明基本原理),但是你尝试过这样的事情吗? (我也会尽量避免使用from pylab import *,因为它很难跟踪哪个函数来自哪里)

    from pylab import *
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import lines
    from matplotlib.font_manager import FontProperties
    
    data = csv2rec('e.csv')
    
    for i in range(1,len(column)):
        x = np.array([column[0] for column in data])
        y_1 = np.array([column[i] for column in data])
    
        plot( x, y_1, 'k-', label='1' )
    
        lgd = legend(loc='center right', bbox_to_anchor=(1.25, 0.75), fontsize='xx-small')
        #plt.gca().invert_yaxis()
        plt.gca().get_xaxis().get_major_formatter().set_useOffset(False)
        plt.gca().get_yaxis().get_major_formatter().set_useOffset(False)
        plt.gca().set_xlabel(r'$\lambda$($\AA$)')
        ylabel( 'FUV-MAG(AB)' )
        name=str(i)
        name+='.png'
        savefig(name, bbox_extra_artists=(lgd,), bbox_inches='tight')
        plt.close()
    

    【讨论】:

    • 工作就像一个魅力。正如您所提到的,range(1,len(column)) 确实给出了未定义列的错误(不确定为什么未定义列),但我用最后一列号代替了len(column),效果很好。我仍在学习如何有效地应用循环,这是一个很好的例子。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 2019-12-15
    • 2021-03-12
    • 1970-01-01
    • 2021-07-17
    • 2020-03-06
    • 2019-09-24
    • 1970-01-01
    相关资源
    最近更新 更多