すべてのデータ ファイルを Python のディレクトリにプロットし、結果のプロットを保存しようとしています。私は効率的な python コードを書こうとしているわけではありません(残念ながら): 今のところデータをプロットすることに興味があります。
私はPythonの初心者で、論文で図を整理することを目的としています。
したがって、以下のコードでは、これが私がやろうとしていることです:
.dat
すべてのファイルをリストしますglob
- ファイル名を配列に入力します
plot_surface
このファイル名配列と各データ ファイルをループします。
プロットしようとしているデータはこちら
私に吐き出されるエラーは次のとおりです。
エラー
File "/home/dnaneet/Research/test_collection/dftdata/profile2.py", line 59, in <module>
plot(x, y, z)
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2286, in plot
ret = ax.plot(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 3783, in plot
for line in self._get_lines(*args, **kwargs):
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 317, in _grab_next_args
for seg in self._plot_args(remaining, kwargs):
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 278, in _plot_args
raise ValueError, 'third arg must be a format string'
ValueError: third arg must be a format string
Python コード
import os import glob import sys import subprocess import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np from numpy import * from numpy.random import rand from pylab import pcolor, show, colorbar, xticks, yticks from pylab import * print 'Listing all profile/dat files' profilefilelist = glob.glob('*profile*.dat') raw_input('Press ENTER to continue...') print profilefilelist for i in profilefilelist: DATA = i def get_data(fname=DATA): '''Read 2d array of z coordinates from file. Convert to float values and wrap in a numpy array.''' with open(fname) as f: data = [map(float, line.split()) for line in f] return np.array(data) def plot(x, y, z): fig = plt.figure() ax = fig.gca(projection='3d') ax.plot_surface(x, y, z, rstride=5, cstride=5,cmap="binary",linewidth=0.1) ax.set_zlim3d(0.0,4.0) ax.set_xlabel('X',fontsize=16,fontweight="bold") ax.set_ylabel('Y',fontsize=16,fontweight="bold") ax.set_zlabel('h(X,T)',fontsize=16,fontweight="bold") savefig(os.getcwd()+DATA+'.pdf',figsize=(5,5),dpi=600) savefig(os.getcwd()+DATA+'.pdf',figsize=(5,5),dpi=600) if __name__ == '__main__': z = get_data() x = range(z.shape[0]) y = range(z.shape[1]) x, y = np.meshgrid(x, y) plot(x, y, z)
質問
これは私の貧弱なインデントの結果なのか、それともここでもっと不吉なことが起こっているのでしょうか? これらのエラーを修正するにはどうすればよいですか?
私は Python をよく理解していないので、Mathematica から離れようとしています (卒業するので、世界中の mathematicas や matlabs を利用する余裕がなくなるため)。
SE で提供されていた以前のコード:
修正されたコード (回答に基づく)
import os import glob import sys import subprocess import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np from numpy import * from numpy.random import rand from pylab import pcolor, show, colorbar, xticks, yticks from pylab import * print 'Listing all profile/dat files' profilefilelist = glob.glob('*profile*.dat') raw_input('Press ENTER to continue...') print profilefilelist DATA=profilefilelist for i in DATA: def get_data(fname=i): '''Read 2d array of z coordinates from file. Convert to float values and wrap in a numpy array.''' with open(fname) as f: data = [map(float, line.split()) for line in f] return np.array(data) for i in DATA: def my_plot(x, y, z): fig = plt.figure() ax = fig.gca(projection='3d') ax.plot_surface(x, y, z, rstride=5, cstride=5,cmap="binary",linewidth=0.1) ax.set_zlim3d(0.0,4.0) ax.set_xlabel('X',fontsize=16,fontweight="bold") ax.set_ylabel('Y',fontsize=16,fontweight="bold") ax.set_zlabel('h(X,T)',fontsize=16,fontweight="bold") plt.show() # savefig(os.getcwd()+DATA+'.pdf',figsize=(5,5),dpi=600) # savefig(os.getcwd()+DATA+'.pdf',figsize=(5,5),dpi=600) if __name__ == '__main__': z = get_data() x = range(z.shape[0]) y = range(z.shape[1]) x, y = np.meshgrid(x, y) my_plot(x, y, z)