我对python有点新意,所以请耐心等待。我有一个绘图问题。所以我有一个纬度,经度,海拔和浓度随时间变化的数据集。我试图在每个独特的纬度和经度上绘制每个高程的浓度与时间的关系。下面是为了尝试实现这一点而编写的代码(我在此之前已经在代码中导入了所有必需的模块,以下只是给我提问的代码片段)
lat=df['Lat']
lat=lat.unique()
from matplotlib import axes
for a in range(0,len(lat)): #for unique latitude
current_lat=lat[a]
mask=df[['Lat']].isin([current_lat]).all(axis=1)
df1=df.ix[mask]
lon=df1['Lon']
lon=lon.unique()
for b in range(0,len(lon)):
current_lon=lon[b]
mask=df1[['Lon']].isin([current_lon]).all(axis=1)
df2=df1.ix[mask]
df2=df2.sort('El',axis=0)
elev=df2.El
elev=elev.unique()
plt.clf()
#d['lat,lon']=(current_lat,current_lon)
for c in range(0,len(elev)):
current_elev=elev[c]
mask=df2[['El']].isin([current_elev]).all(axis=1)
df3=df2.ix[mask]
df3=df3.sort()
if len(df3)>1:
x=df3.index
x=list(x)
y=list(df3.C)
fig=plt.figure(a+b+1)
ax=plt.subplot(111)
fig.set_size_inches(22,12,forward=True)
plt.plot(x,y,hold=True,label=current_elev)
plt.legend()
del_x=float(x_coord_release)-float(current_lat)
del_y=float(y_coord_release)-float(current_lon)
dist=round(math.sqrt(del_x**2+del_y**2),3)
textstr='Distance from release=\n%.2f\n'%(dist)
props=dict(boxstyle='round',facecolor='wheat',alpha=0.5)
#ax=plt.subplot(1,1,1)
xlim=ax.get_xbound()
ylim=ax.get_ybound()
ax.text(xlim[1],ylim[1],textstr,bbox=props)
ax.text(10,10,"Relative to Release Location",fontsize=9,color="black",bbox=dict(facecolor='wheat', alpha=0.5))
ax.set_title('Concentration vs Time based on Elevation at x={}, y={}'.format(int(round(float(current_lat),0)),int(round(float(current_lon),0))))
figure_name='Concentration vs Time based on Elevation at x={}, y={}'.format(int(round(float(current_lat),0)),int(round(float(current_lon),0)))
ax.set_xlabel('Time (min)')
ax.set_ylabel('Concentration (mg/m$^3$)')
fig.savefig(rdir+'\\'+figure_name+'.png',dpi=100)
#plt.show()
#plt.draw()
#raw_input('enter')
plt.close()
我收到的错误消息/回溯如下:
TypeError Traceback (most recent call last)
C:\Users\bhall\Documents\Scripts\MESO_plot_v2.py in <module>()
874 ax.set_xlabel('Time (min)')
875 ax.set_ylabel('Concentration (mg/m$^3$)')
--> 876 fig.savefig(rdir+'\\'+figure_name+'.png',dpi=100)
877 #plt.show()
878 #plt.draw()
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site- packages\matplotlib\figure.pyc in savefig(self, *args, **kwargs)
1474 self.set_frameon(frameon)
1475
-> 1476 self.canvas.print_figure(*args, **kwargs)
1477
1478 if frameon:
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site- packages\matplotlib\backends\backend_qt5agg.pyc in print_figure(self, *args, **kwargs)
159
160 def print_figure(self, *args, **kwargs):
--> 161 FigureCanvasAgg.print_figure(self, *args, **kwargs)
162 self.draw()
163
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\backend_bases.pyc in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
2209 orientation=orientation,
2210 bbox_inches_restore=_bbox_inches_restore,
-> 2211 **kwargs)
2212 finally:
2213 if bbox_inches and restore_bbox:
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\backends\backend_agg.pyc in print_png(self, filename_or_obj, *args, **kwargs)
519
520 def print_png(self, filename_or_obj, *args, **kwargs):
--> 521 FigureCanvasAgg.draw(self)
522 renderer = self.get_renderer()
523 original_dpi = renderer.dpi
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\backends\backend_agg.pyc in draw(self)
467
468 try:
--> 469 self.figure.draw(self.renderer)
470 finally:
471 RendererAgg.lock.release()
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
57 def draw_wrapper(artist, renderer, *args, **kwargs):
58 before(artist, renderer)
---> 59 draw(artist, renderer, *args, **kwargs)
60 after(artist, renderer)
61
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\figure.pyc in draw(self, renderer)
1083 dsu.sort(key=itemgetter(0))
1084 for zorder, a, func, args in dsu:
-> 1085 func(*args)
1086
1087 renderer.close_group('figure')
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
57 def draw_wrapper(artist, renderer, *args, **kwargs):
58 before(artist, renderer)
---> 59 draw(artist, renderer, *args, **kwargs)
60 after(artist, renderer)
61
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\axes\_base.pyc in draw(self, renderer, inframe)
2108
2109 for zorder, a in dsu:
-> 2110 a.draw(renderer)
2111
2112 renderer.close_group('axes')
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
57 def draw_wrapper(artist, renderer, *args, **kwargs):
58 before(artist, renderer)
---> 59 draw(artist, renderer, *args, **kwargs)
60 after(artist, renderer)
61
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\text.pyc in draw(self, renderer)
640 renderer.draw_text(gc, x, y, clean_line,
641 self._fontproperties, angle,
--> 642 ismath=ismath, mtext=mtext)
643
644 gc.restore()
C:\Users\bhall\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\backends\backend_agg.pyc in draw_text(self, gc, x, y, s, prop, angle, ismath, mtext)
204 #print x, y, int(x), int(y), s
205 self._renderer.draw_text_image(
--> 206 font.get_image(), np.round(x - xd), np.round(y + yd) + 1, angle, gc)
207
208 def get_text_width_height_descent(self, s, prop, ismath):
TypeError: Invalid input arguments to draw_text_image
它成功地遍历了几个图,但是在一个图上不断崩溃并给出了该错误。我尝试过手动绘制数据并且我没有任何问题,因此我不知道问题/解决方案是什么。任何帮助将不胜感激!