爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 15781|回复: 2

[求助] python画轨迹代码问题!

[复制链接]

新浪微博达人勋

发表于 2020-9-25 17:43:08 | 显示全部楼层 |阅读模式

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

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

x
  1. #Python画后向轨迹
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from mpl_toolkits.basemap import Basemap
  5. import cmaps
  6. from matplotlib.collections import LineCollection


  7. from pandas.core.frame import DataFrame
  8. file_path='1.txt'
  9. f = open(file_path)
  10. data = []
  11. for line in f.readlines():
  12.     row = []  # 记录每一行
  13.     lines = line.strip().split("\t")
  14.     for x in lines:
  15.         row.append(x)
  16.     data.append(row)
  17. f.close()
  18. print(data[1][9])
  19. #data is list can not be writen data[1,9]
  20. newdata=DataFrame(data)#list tranform to dataframe
  21. fig, ax = plt.subplots()

  22. #fig=plt.figure(figsize=(25,7))
  23. m = Basemap(projection='spstere',boundinglat=-60,lon_0=180,resolution='l')
  24. m.drawcoastlines(linewidth=0.2, color='gray',zorder=3)

  25. #m.drawparallels(np.arange(-90.,-50.,10.))
  26. # labels = [left,right,top,bottom]
  27. #m.drawmeridians(np.arange(-180.,180.,45.))
  28. parallels = np.arange(-90,-50,10) #纬线
  29. m.drawparallels(parallels,labels=[False,False,False,False])
  30. #plt.yticks(parallels,len(parallels)*[''])
  31. meridians = np.arange(-180,180,45) #经线
  32. m.drawmeridians(meridians,labels=[False,False,True,True])
  33. cmap=cmaps.WhiteBlueGreenYellowRed


  34. lon = newdata[:][2]
  35. lat = newdata[:][3]
  36. #h是高度值
  37. h = newdata[:][4]


  38. points = np.array([lon, lat]).T.reshape(-1, 1, 2)
  39. segments = np.concatenate([points[:-1], points[1:]], axis=1)
  40. print(segments)
  41. norm = plt.Normalize(0, 1200)
  42. #设置颜色线条
  43. lc = LineCollection(segments, cmap=cmap,norm=norm)        
  44. lc.set_array(h)
  45. #绘制线条
  46. line = ax.add_collection(lc)   
  47. #colorbar
  48. fig.colorbar(line)#方向
  49. plt.show()
  50. plt.savefig('traj.png',dpi=600)
复制代码
  1.     resdat -= vmin
  2. TypeError: unsupported operand type(s) for -: 'str' and 'float'
复制代码

上面是报错类型,感觉是我把数据存为数据框类型,变成了series类型,搞了四个小时还没解决!求助!谢谢!

1.txt

5.55 KB, 下载次数: 6, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2020-9-25 21:42:29 | 显示全部楼层
你这报错是数据类型的原因啊,我认为你需要检查txt读取后数据是否为str类型
如果是str,需要转换为float
比如
  1. lon = [np.float(x) for x in lon]
  2. lat = [np.float(x) for x in lat]
  3. h = [np.float(x) for x in h]
复制代码


另外,你这里为什么要用Line Collection方法,plot不能满足你的需要么?
我觉得你46-47行也需要检查一下,是否和例子的格式相同https://matplotlib.org/gallery/s ... ine_collection.html
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-9-26 11:12:23 | 显示全部楼层
葫芦爷儿 发表于 2020-9-25 21:42
你这报错是数据类型的原因啊,我认为你需要检查txt读取后数据是否为str类型
如果是str,需要转换为float
...

大神說的是呀,請問plot的具體函數是什麼呢?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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