我有一个函数“plot_rdm”,它创建一个plot并将其保存为“rdm.png”。我希望这些绘图中的几个都使用不同的.json文件形成,因此我将函数plot_rdm保存在“plotrdm.py”中
在saverdm.py文件中,我定义了要从中创建绘图的.json文件的文件路径,然后调用plot_rdm函数,循环遍历要从中创建绘图的所有文件:
#import libraries
import numpy as np
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
import scipy
import scipy.spatial
import scipy.spatial.distance as sd
from scipy.spatial.distance import squareform
import os
import json
# define fpath
#i.e. fpath[0] will be the first filepath...
path = './RDM_researchproject'
rootdir = path
filepath = []
for subdir, dirs, files in os.walk(rootdir):
for file in files:
if file.startswith('Meadows'):
count=0 # count default
filepath.append(os.path.join(subdir, file))
fpath = filepath[count]
os.system("/home/taran/RDM_researchproject/AVIMA/plotrdm.py")
count +=1
带有plot_rdm函数的plotrdm.py文件如下所示:
def plot_rdm(fpath):
import numpy as np
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
import scipy
import scipy.spatial
import scipy.spatial.distance as sd
from scipy.spatial.distance import squareform
import json
with open(fpath) as fhandle:
data = json.load(fhandle)
#inspect rdm stimuli labels
stim = data['stimuli']
#contain all labels for y axis and x axis seperately
y_names = []
for i in stim:
y_names.append(i['name'])
x_names = []
for i in stim:
x_names.append(i['name'])
#create rdm array and squareform
rdm_array = np.array(data['rdm'])
srdm = squareform(rdm_array)
#label x and y axis on rdm
fig, ax = plt.subplots()
rdm = ax.imshow(srdm)
ax.set_xticks(np.arange(len(x_names)))
ax.set_yticks(np.arange(len(y_names)))
ax.set_xticklabels(x_names)
ax.set_yticklabels(y_names)
plt.setp(ax.get_xticklabels(), rotation=90, ha="right", rotation_mode="anchor")
plt.plot(srdm)
plt.imshow(srdm)
plt.colorbar(mappable = None, cax = None, ax = None)
fig.subplots_adjust(bottom=0.23)
import matplotlib.pyplot as plt
plt.savefig('rdm.png')
我能够单独创建绘图(即,当我不调用plot_rdm函数并循环文件,但每次都指定文件路径时)。但是当我使用下面的代码时,我在AVIMA文件夹中得到一个空的绘图。我不确定saverdm文件中的错误是什么导致了这种情况
https://github.com/Taranks7/RDM_researchproject如果我没有解释发生了什么,那么这就是我正在进行的项目
多谢各位
当您想从另一个文件调用python函数时,不应该尝试通过调用
os.system
来运行另一个python进程。只需导入该函数:from plotrdm import plot_rdm
我们不必使用
os.filewalk
和file.startswith
检查,而是可以通过使用nice python库glob
来大量清理代码。我投了一个enumerate
作为好的措施新的rdmsave.py
请注意,您可能需要将
basedir
更改回本地路径您的绘图rdm.py将变成:
我将第二个参数
output_filename
添加到了plot_rdm
函数中,以便可以将每个图像存储在一个新文件中我机器上的输出显示
在当前文件夹中创建了4个png文件
相关问题 更多 >
编程相关推荐