ax.contourf(LON,LAT,cycle_p,levels=[0,0.05,1],hatches=['...',None],zorder=1,colors='none',transform=ccrs.PlateCarree()) 修改点颜色
时间: 2024-10-28 17:12:24 浏览: 70
在这个Matplotlib命令中,`ax.contourf()` 用于创建填充轮廓图,其中 `LON` 和 `LAT` 是经纬度坐标,`cycle_p` 是数据数组。参数设置如下:
- `levels=[0,0.05,1]` 定义了颜色等值线的级别范围,从0到0.05再到1。
- `hatches=['...', None]` 设置了网格区域的填充模式,'...' 表示空白区域,None 则表示正常填充。
- `zorder=1` 指定了图形元素的绘制顺序,这里将轮廓图设为底层。
- `colors='none'` 表明填充色为透明,无颜色显示。
- `transform=ccrs.PlateCarree()` 确保了坐标转换为地理坐标系统。
如果你想修改点的颜色,这个函数本身是用于填充,不是画散点图。如果你需要改变点的颜色,你应该使用 `ax.scatter()` 或者 `ax.plot()` 函数,并通过设置 `c` 参数来指定颜色。例如:
```python
ax.scatter(LON, LAT, c=cycle_p, cmap='your_colormap', vmin=0, vmax=1, zorder=2)
```
在这里,`cmap` 是颜色映射,`vmin` 和 `vmax` 分别是颜色范围的最小值和最大值。`zorder` 控制点图层的位置。
相关问题
cs1 = ax.contourf(lon, lat, t, levels=[1.5,5,10],zorder=1,hatches=['..', None],colors="none", transform=ccrs.PlateCarree())
这段代码使用Matplotlib中的ax.contourf函数绘制经纬度网格(lon, lat)上的温度(t)等值线图。其中levels参数指定等值线的数值,zorder参数指定图层顺序,hatches参数指定填充样式,colors参数指定填充颜色,transform参数指定坐标系转换方式。具体来说,该代码绘制了三条等值线,数值分别为1.5、5和10,其中第一条等值线采用“..”样式填充,其余两条等值线不填充,颜色均为透明。该图形使用了PlateCarree投影方式,表示平面上的经纬度坐标。
已知程序 import xarray as xr from collections import namedtuple import numpy as np from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter import matplotlib.ticker as mticker import cartopy.feature as cfeature import cartopy.crs as ccrs import matplotlib.pyplot as plt import matplotlib.cm as cm import matplotlib.colors as mcolors def region_mask(lon, lat, extents): lonmin, lonmax, latmin, latmax = extents return ( (lon >= lonmin) & (lon <= lonmax) & (lat >= latmin) & (lat <= latmax) ) Point = namedtuple('Point', ['x', 'y']) Pair = namedtuple('Pair', ['start', 'end']) time = '2023-05-04' filepath_DPR = r"C:\pythontest\zFactor\test1.nc4" extents = [110, 122, 25, 38] with xr.open_dataset(filepath_DPR) as f: lon_DPR = f['FS_Longitude'][:] lat_DPR = f['FS_Latitude'][:] zFactorFinalNearSurface = f['FS_SLV_zFactorFinalNearSurface'][:] nscan, nray = lon_DPR.shape midray = nray // 2 mask = region_mask(lon_DPR[:, midray], lat_DPR[:, midray], extents) index = np.s_[mask] lon_DPR = lon_DPR[index] lat_DPR = lat_DPR[index] zFactorFinalNearSurface = zFactorFinalNearSurface[index] for data in [ zFactorFinalNearSurface, ]: data.values[data <= -9999] = np.nan proj = ccrs.PlateCarree() fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection=proj) ax.coastlines(resolution='50m', lw=0.5) ax.add_feature(cfeature.OCEAN.with_scale('50m')) ax.add_feature(cfeature.LAND.with_scale('50m')) ax.set_xticks(np.arange(-180, 181, 5), crs=proj) ax.set_yticks(np.arange(-90, 91, 5), crs=proj) ax.xaxis.set_minor_locator(mticker.AutoMinorLocator(2)) ax.yaxis.set_minor_locator(mticker.AutoMinorLocator(2)) ax.xaxis.set_major_formatter(LongitudeFormatter()) ax.yaxis.set_major_formatter(LatitudeFormatter()) ax.set_extent(extents, crs=proj) ax.tick_params(labelsize='large') def make_zF_cmap(levels): '''制作雷达反射率的colormap.''' nbin = len(levels) - 1 cmap = cm.get_cmap('jet', nbin) norm = mcolors.BoundaryNorm(levels, nbin) return cmap, norm levels_zF = [0, 1, 5, 10, 15, 20, 25, 30, 35, 40, 45] cmap_zF, norm_zF = make_zF_cmap(levels_zF) im = ax.contourf( lon_DPR, lat_DPR, zFactorFinalNearSurface, levels_zF, # 三个物理量为 (500, 49)就是在500*49的格点上赋予这三个物理量 cmap=cmap_zF, norm=norm_zF, extend='both', transform=proj ) cbar = fig.colorbar(im, ax=ax, ticks=levels_zF) cbar.set_label('zFactor (dBZ)', fontsize='large') cbar.ax.tick_params(labelsize='large') ax.set_title(f'DPR zFactor on {time}', fontsize='x-large') plt.show()如何将其中的zFactorFinal变量变为二维
在这段代码中,zFactorFinalNearSurface的shape是(500, 49),其中第一维是nscan(扫描线数),第二维是nray(每个扫描线的射线数)。如果要将zFactorFinalNearSurface变为二维数组,可以将nscan和nray相乘得到总的格点数,然后使用reshape方法将其变为二维数组。代码如下:
```
zFactorFinalNearSurface = zFactorFinalNearSurface[index]
nscan, nray = zFactorFinalNearSurface.shape
zFactorFinalNearSurface_2d = zFactorFinalNearSurface.reshape(nscan*nray, 1)
```
其中,index是通过region_mask函数得到的布尔索引,用于筛选出位于指定区域内的数据。reshape方法中第一个参数是新的shape,这里是(nscan*nray, 1),表示将数据变成nscan*nray行,1列的形状。注意reshape方法返回的是一个新的数组,不会改变原始数组的值。
阅读全文