爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 20497|回复: 9

[求助] 绘制经纬度,温度的图,好难啊

[复制链接]

新浪微博达人勋

发表于 2021-4-13 21:34:11 | 显示全部楼层 |阅读模式

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

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

x
import pandas as pd
import matplotlib.pyplot as plt
import MySQLdb
from mpl_toolkits.basemap import Basemap
import numpy as np
sql_cmd = 'select * from a20;' # lon可以换成latl4b_010ncco2数据库(其中之一)的表名

con = MySQLdb.connect(host='localhost',
                      user='root',
                      password='123456',
                      database='modistem20')
df = pd.read_sql(sql_cmd, con)
print(df)
lons = df['lon']+180.5
lats = 90.5-df['lat']
Tem_Means= df['Tem_Mean']
# lons = list(map(int, lons))
# lats = list(map(int, lats))
# Tem_Means = list(map(int, Tem_Means))

# 自定义纬度范围
lat_B=10;lat_E=90;lon_B=30;lon_E=190  #这里选取欧亚
# 新建地图并设定经纬度范围
m = Basemap(llcrnrlat = lat_B, urcrnrlat = lat_E, llcrnrlon = lon_B, urcrnrlon = lon_E)
# 网格化经纬度并形成坐标矩阵
lon, lat = np.meshgrid(lons[::50], lats[::50])
xi, yi = m(lon, lat)
m.drawmapboundary(fill_color='aqua')
m.drawcoastlines(linewidth=0.2,color = '0.15')
m.drawcountries(linewidth=0.2,color='0.15')
m.contourf(xi,yi,Tem_Means[::50])
m.colorbar()
plt.show()

出现错误:[size=13.0667px]numpy.ma.core.MaskError: Mask and data not compatible: data size is 1967, mask size is 3869089.






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

新浪微博达人勋

发表于 2021-4-14 01:29:25 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-14 13:37:09 | 显示全部楼层
MyOpenGFM 发表于 2021-4-14 01:29
试试这个解决方法:https://stackoverflow.com/questions/35435015/extending-numpy-mask

好的哥,我试试
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-14 20:35:17 | 显示全部楼层
MyOpenGFM 发表于 2021-4-14 01:29
试试这个解决方法:https://stackoverflow.com/questions/35435015/extending-numpy-mask

  1. df = pd.read_sql(sql_cmd, con)
  2. print(df)
  3. lons = df['lon']+180.5
  4. lats = 90.5-df['lat']
  5. Tem_Means= df['Tem_Mean']
  6. # lons = list(map(int, lons))
  7. # lats = list(map(int, lats))
  8. # Tem_Means = list(map(int, Tem_Means))
  9. l =  [np.array(a) for a in np.broadcast_arrays(lons, lats)]
  10. print(lons,'\n@@@@@@@@@')
  11. # 自定义纬度范围 [np.array(a) for a in np.broadcast_arrays(x, y)]
  12. lat_B=10;lat_E=90;lon_B=30;lon_E=190  #这里选取欧亚
  13. # 新建地图并设定经纬度范围
  14. m = Basemap(llcrnrlat = lat_B, urcrnrlat = lat_E, llcrnrlon = lon_B, urcrnrlon = lon_E)
  15. # 网格化经纬度并形成坐标矩阵masked_b = ma.masked_array(*np.broadcast(b, ext_mask))
  16. lon, lat = np.meshgrid(l[0], l[1])
  17. xi, yi = m(lon, lat)
  18. print(xi.shape)
  19. print(yi.shape)
  20. print(Tem_Means.shape)
  21. m.drawmapboundary(fill_color='aqua')
  22. m.drawcoastlines(linewidth=0.2,color = '0.15')
  23. m.drawcountries(linewidth=0.2,color='0.15')
  24. m.contourf(xi,yi,Tem_Means.reshape())
  25. m.colorbar()
  26. plt.show()
复制代码


出现这个了
MemoryError: Unable to allocate 72.0 GiB for an array with shape (98322, 98322) and data type float64
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-15 09:53:32 | 显示全部楼层
zhuyidong 发表于 2021-4-14 20:35
出现这个了
MemoryError: Unable to allocate 72.0 GiB for an array with shape (98322,  ...

试试这个:https://stackoverflow.com/questi ... -shape-725000-277-7
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-16 08:20:00 | 显示全部楼层
好的哥,已经解决了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-19 19:26:32 | 显示全部楼层
推荐一个ECMWF出的封装好的包,叫metview,基本的绘图特别简单。唯一的要求是在Linux下运行
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-19 20:23:40 | 显示全部楼层
飞飞不会飞 发表于 2021-4-19 19:26
推荐一个ECMWF出的封装好的包,叫metview,基本的绘图特别简单。唯一的要求是在Linux下运行

好的,哥,我试试
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-21 22:12:24 | 显示全部楼层
能把写好的,开个主题吗。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-22 09:45:03 | 显示全部楼层
qinhantang10 发表于 2021-4-21 22:12
能把写好的,开个主题吗。

我把重复的数据都删了就好了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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