Python-绘制多个文件的内容

Python-绘制多个文件的内容,python,matplotlib,Python,Matplotlib,我有大约10个对应输入文件的列表,其中包含以制表符分隔的数据列,每个数据列大约300行/数据点 我希望绘制每一组数据的内容,这样每一组数据都有两个图,一个是简单的x vs(y1,y2,y3,…),另一个是由一个函数转换的,例如x vs(f(y1),f(y2),f(y3,…) 我不确定实现这一点的最佳方法,我曾考虑使用一个简单的文件名数组,但在不覆盖数据的情况下无法解决如何存储所有文件名的问题—类似这样: import numpy as np import matplotlib.pyplot as

我有大约10个对应输入文件的列表,其中包含以制表符分隔的数据列,每个数据列大约300行/数据点

我希望绘制每一组数据的内容,这样每一组数据都有两个图,一个是简单的x vs(y1,y2,y3,…),另一个是由一个函数转换的,例如x vs(f(y1),f(y2),f(y3,…)

我不确定实现这一点的最佳方法,我曾考虑使用一个简单的文件名数组,但在不覆盖数据的情况下无法解决如何存储所有文件名的问题—类似这样:

import numpy as np
import matplotlib.pyplot as plt 

def ReadDataFile(file):
    print (file)
    x,y  = np.loadtxt(file, unpack=True, usecols=(8,9))
    return x, y

inputFiles = ['data1.txt','data2.txt','data2.txt',...]
for file in inputFiles:
    x1,y1 = ReadDataFile(file) ## ? ##
    p1,q1 = function(x1,y1)    ## ? ##

plt.figure(1)
plt.plot(x1,y1)
plt.plot(x2,y2)
...
# plt.savefig(...)

plt.figure(2)
plt.plot(p1,q1)
plt.plot(p2,q2)
...
# plt.savefig(...)
plt.show()
我想我的问题是如何最好地读取和存储所有数据,并在不需要将所有代码放入readloop的情况下保持访问这些数据的能力。我可以将两个数据集读入一组数据对吗?这在Python中是一件事吗?如果是,我如何访问它们

提前感谢您的帮助!
致以最良好的祝愿

基本上,我认为您应该将所有代码放在readloop中,因为这样做很容易。有一种稍微不同的使用matplotlib的方法,可以方便地使用现有的数据组织并编写更短的代码。这是一个完整的玩具示例:

import matplotlib.pyplot as plt
from numpy.random import random

fig, axs = plt.subplots(2)

for c in 'abc':                    # In your case, for filename in [file-list]:
    x, y = random((2, 5))
    axs[0].plot(x, y, label=c)     # filename instead of c in your case
    axs[1].plot(x, y**2, label=c)  # Plot p(x,y), q(x,y) in your case

axs[0].legend()   # handy to get this from the data list

fig.savefig('two_plots.png')

如果需要在页面布局等的不同文件中绘制两个图形,也可以创建两个图形并显式绘制到每个图形中:

import matplotlib.pyplot as plt
from numpy.random import random

fig1, ax1 = plt.subplots(1)
fig2, ax2 = plt.subplots(1)

for c in 'abc':                    # or, for filename in [file-list]:
    x, y = random((2, 5))
    ax1.plot(x, y, label=c)
    ax2.plot(x, y**2, label=c)

ax1.legend()   
ax2.legend()

fig1.savefig('two_plots_1.png')
fig2.savefig('two_plots_2.png')

如何读取每个数据文件并将其放入字典?这对您有用吗?您可以将数据保存在一个数组中,并使用
np.hstack()
连接数据(一个列代表x,一个列代表y),并将连接的数组作为单个绘图对象中的子绘图。我发现
GridSpec
在这方面做得很好。@gabra我必须说我对字典一点也不熟练。。。但我的理解是它们存储关键值对,我觉得有点像C++地图吗?映射中的“值”条目是否可以是列表?i、 e:key1='x1',value1=[…x1值列表…]和key2='y2'和value2'=[…y1值列表…]这对我来说似乎有点笨重!我想一定有更优雅的解决方案?@Pete我以为您只想存储
x1
y1
对。所以,它应该是类似于{0:{x':[…],'y':[…],1:{x':[…],'y':[…],…}`。而且,是的,它有点笨重。@Pete你可以试试。非常感谢!很有魅力。