Python-绘制多个文件的内容
我有大约10个对应输入文件的列表,其中包含以制表符分隔的数据列,每个数据列大约300行/数据点 我希望绘制每一组数据的内容,这样每一组数据都有两个图,一个是简单的x vs(y1,y2,y3,…),另一个是由一个函数转换的,例如x vs(f(y1),f(y2),f(y3,…) 我不确定实现这一点的最佳方法,我曾考虑使用一个简单的文件名数组,但在不覆盖数据的情况下无法解决如何存储所有文件名的问题—类似这样: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
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你可以试试。非常感谢!很有魅力。