创建循环以逐行导入csv文件中的数据,绘制它们并单独保存每个图

时间:2017-01-25 12:33:11

标签: python-2.7 python-3.x

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

我有一个包含45列数据的CSV文件,第一列是x轴,第2-45列都是y轴数据。我想要做的是导入所有这些数据(逐行),然后为每个y轴列创建相同的x,所以(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列上进行基本循环来绘制它们,但我想知道你是否有任何建议如何创建一个循环来导入,绘制并保存所有上面的图同一时间。

非常感谢。

1 个答案:

答案 0 :(得分:0)

我还没有与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()