爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5208|回复: 9

[求助] 小白画浓度分布图求助

[复制链接]
回帖奖励 1 金钱 回复本帖可获得 1 金钱奖励! 每人限 1 次

新浪微博达人勋

发表于 2022-4-11 20:52:29 | 显示全部楼层 |阅读模式

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

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

x
本人python小白,最近老师让尝试画一个污染物的浓度分布图,在查找资料和视频后,瞎鼓捣成下面这样。不太懂为什么背景图是紫色的,然后颜色填充的好像也不对,希望有大佬可以帮忙解答一下。
import xarray as xr
import matplotlib.pyplot as plt
import numpy as np
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

with open(r'D:\Users\hp\Desktop\2\CN-border-La.dat') as src:
    context = src.read()
    blocks = [cnt for cnt in context.split('>') if len(cnt) > 0]
    borders = [np.fromstring(block, dtype=float, sep=' ') for block in blocks]
proj = ccrs.PlateCarree()
fig = plt.figure(figsize=(10,8),dpi=200)
ax = fig.add_axes([0.5,0.5,0.9,0.9], projection=proj)
ax.set_extent([97,132,17,47])
for line in borders:
    ax.plot(line[0::2], line[1::2], '-', lw=1.5, color='k',
            transform=ccrs.Geodetic())
ds = xr.open_dataset(r'D:\Users\hp\Desktop\1\ECHAP_PM10_V3.nc')
lon = ds.Lon
lat = ds.Lat
pm10 = ds.PM10
fig.canvas.draw()
cf = ax.contourf(lon,lat,pm10,transform=proj,camp='Spectral_r',aloha=0.8)
ax.set_xticks(np.arange(97,132,5))
ax.set_yticks(np.arange(17,47,5),crs=proj)
ax.xaxis.set_major_formatter(LONGITUDE_FORMATTER)
ax.yaxis.set_major_formatter(LATITUDE_FORMATTER)
fig.canvas.draw()
#设置刻度值,画经纬网格
xticks = [97,102,107,112,117,122,127]
yticks = [17,22,27,32,37,42,47]
ax.gridlines(xlocs=xticks, ylocs=yticks,linestyle='--',lw=1,color='dimgrey')
ax.coastlines()
ax.add_feature(cfeature.OCEAN.with_scale('50m'))
ax.add_feature(cfeature.LAND.with_scale('50m'))
plt.title('pm10浓度分布图')
plt.show()

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

新浪微博达人勋

发表于 2022-4-11 21:30:56 | 显示全部楼层

回帖奖励 +1 金钱

真厉害,佩服佩服
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-4-11 23:05:40 | 显示全部楼层

回帖奖励 +1 金钱

边缘没有白化呀,可以参考一下这个帖子,4.cartopy的白化
http://bbs.06climate.com/forum.p ... &fromuid=130924
(出处: 气象家园)
并且,可以设置缩小一些地图范围
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-11 23:11:31 | 显示全部楼层
扇贝单词 发表于 2022-4-11 23:05
边缘没有白化呀,可以参考一下这个帖子,4.cartopy的白化
http://bbs.06climate.com/forum.php?mod=viewth ...

就是感觉那个中间的紫色方块把陆地和海洋的颜色都遮住了,这是没有白化的原因么,因为我看白化好像只显示选中的区域
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-4-11 23:59:07 来自手机 | 显示全部楼层

回帖奖励 +1 金钱

紫色那部分是你的数据范围吧 可以把紫色换成透明色
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-12 09:25:33 | 显示全部楼层
松鼠算天气 发表于 2022-4-11 23:59
紫色那部分是你的数据范围吧 可以把紫色换成透明色

可以问下怎么换么,因为是小白还不太懂
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-4-12 13:46:47 | 显示全部楼层
Ronin. 发表于 2022-4-11 23:11
就是感觉那个中间的紫色方块把陆地和海洋的颜色都遮住了,这是没有白化的原因么,因为我看白化好像只显示 ...

对,白化是框定范围的,你这是相当于加了一层把之前的地图覆盖了,白化可以保留一部分地图不被覆盖,那些紫色部分我感觉都是一种缺值数据,感觉白化应该不要紧,不会影响你的结果
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-12 14:57:26 | 显示全部楼层
扇贝单词 发表于 2022-4-12 13:46
对,白化是框定范围的,你这是相当于加了一层把之前的地图覆盖了,白化可以保留一部分地图不被覆盖,那些 ...

多谢大佬,紫色部分的确是缺测值,全部替换为nan后紫色就消失了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-12 15:01:56 | 显示全部楼层
紫色部分是缺测值,在大佬提醒和询问师兄后加了两句就除掉了紫色,接下来就是加色条和让图变得更好看,学习还是任重而道远
pm10 = ds.PM10.values
pm10=np.where(pm10==-999,np.nan,pm10)
1ECHAP_PM10_D1K_2015362_V3.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-5-18 10:59:40 | 显示全部楼层

回帖奖励 +1 金钱

ddddddddd字数补丁
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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