爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 11770|回复: 3

[求助] 用Micaps数据画流场一直出错

[复制链接]

新浪微博达人勋

发表于 2017-5-22 19:47:23 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 adam_5 于 2017-5-22 19:54 编辑

用MICAPS第11类数据画流场,但是一直画不出来,请大神帮忙看看吧,不知道怎么去除下载数据扣金钱的规则,不好意思
错误信息







                               
登录/注册后可看大图


  1. import matplotlib.pyplot as plt
  2. from mpl_toolkits.basemap import Basemap
  3. from matplotlib.collections import PathCollection
  4. from matplotlib.path import Path
  5. from matplotlib import cm
  6. import numpy as np
  7. class MicapsData11:

  8.    def ReadData(self,filename):
  9.         file000=open(filename)
  10.         lines=file000.readlines()
  11.         foredata=lines[0].split()+lines[1].split()+lines[2].split()
  12.         dataflag = foredata[0]
  13.         style = foredata[1]
  14.         title = foredata[2]
  15.         yy = int(foredata[3])
  16.         mm = int(foredata[4])
  17.         dd = int(foredata[5])
  18.         hh = int(foredata[6])
  19.         forehh = int(foredata[7])
  20.         level = foredata[8]
  21.         deltalon = float(foredata[9])
  22.         deltalat = float(foredata[10])
  23.         beginlon = float(foredata[11])
  24.         endlon = float(foredata[12])
  25.         beginlat = float(foredata[13])
  26.         endlat = float(foredata[14])
  27.         sumlon = int(foredata[15])
  28.         sumlat = int(foredata[16])

  29.         value=[]
  30.         for i in range(len(lines)-3):
  31.             line= lines[i+3].split()
  32.             value+=line


  33.         self.U = np.array(value[:sumlat*sumlon],dtype=float).reshape(sumlat,sumlon)
  34.         self.V = np.array(value[sumlat*sumlon:],dtype=float).reshape(sumlat,sumlon)
  35.         self.Z = np.zeros((sumlat, sumlon))
  36.         for i in range(sumlon):
  37.             for j in range(sumlat):
  38.                 self.Z[j,i]=np.sqrt(self.U[j,i]**2+self.V[j,i]**2)

  39.         x = np.arange(beginlon, endlon + deltalon, deltalon)
  40.         y = np.arange(beginlat, endlat + deltalat, deltalat)
  41.         self.X, self.Y= np.meshgrid(x,y)

  42. def Draw(self):
  43.         fig=plt.figure()
  44.         ax=fig.add_subplot(111)



  45.         bmap = Basemap(width=6000000, height=5000000,
  46.                        resolution='l', projection='lcc',
  47.                        lat_1=45., lat_2=25, lat_0=35, lon_0=105., ax=ax)
  48.         bmap.drawcoastlines()
  49.         bmap.fillcontinents(color='ivory', lake_color='skyblue', zorder=0)

  50.         shp_info = bmap.readshapefile("E:\\python\\projects\\MicapsDataDraw-master\\shapefile\\bou2_4l", 'states',
  51.                                       drawbounds=True)
  52.         paths = []
  53.         for line in shp_info[4]._paths:
  54.             paths.append(Path(line.vertices, codes=line.codes))
  55.         PathCollection(paths, linewidths=5, facecolors=cm.jet(np.random.rand(1)), zorder=1)

  56.         
  57.         bmap.drawmeridians(range(30, 160, 10), linewidth=0.5, dashes=[4, 2], labels=[0, 0, 0, 1], color='k', zorder=1,
  58.                            fontsize=10)
  59.         bmap.drawparallels(range(10, 80, 10), linewidth=0.5, dashes=[4, 2], labels=[1, 1, 0, 0], color='k', zorder=1,
  60.                            fontsize=10)
  61.         
  62.         bmap.drawmapboundary(fill_color='skyblue')

  63.         U_rot,V_rot, X,Y,= bmap.rotate_vector(self.U,self.V,self.X,self.Y,returnxy=True)
  64.         ax.streamplot(X,Y,U_rot,V_rot,density=[1,1],zorder=0)

  65.        plt.show()


  66. if __name__ == '__main__':

  67.     micapsData11 = MicapsData11()
  68.     micapsData11.ReadData('E:\\micaps\\qxj\\micaps\\high\\uv\\500\\16110908.000')

  69.     micapsData11.Draw()




复制代码



TIM截图20170522200018.png

16110808.000

24.8 KB, 下载次数: 0, 下载积分: 金钱 -5

数据

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-23 14:05:28 | 显示全部楼层
前面的问题去掉rotate_vector命令就不会再出x行不相等的问题,但又出现了新的问题,
TIM截图20170523141224.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-23 15:31:16 | 显示全部楼层
看提示是说数据不匹配,看看main()函数中用到的X,Y,U_rot,V_rot的shape
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-23 16:05:14 | 显示全部楼层
po_po1 发表于 2017-5-23 15:31
看提示是说数据不匹配,看看main()函数中用到的X,Y,U_rot,V_rot的shape

你是说第二个问题吗?都看了我把shape都print出来,都是一样的。最后把行列数都改成双数就合适,单数就出问题,但是在MATPLOTLIB的实例中改成单数就能出来,真是搞不懂了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表