matplotlib删除地图投影上的等值线及风场.doc_第1页
matplotlib删除地图投影上的等值线及风场.doc_第2页
matplotlib删除地图投影上的等值线及风场.doc_第3页
matplotlib删除地图投影上的等值线及风场.doc_第4页
matplotlib删除地图投影上的等值线及风场.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

matplotlib删除地图投影上的等值线及风场【前言】最近在编写一个气象应用程序,用来显示某一时刻某一地区的气温等值线和风场,程序主要用到了第三方库matplotlib及Basemap。在编写的过程中发现,如果不进行擦除操作直接绘制新的等值线或风场,新的等值线(风场)会与原来的等值线(风场)叠加在一起,而绘制的等值线及风场没有单独的remove方法,所以如果想要擦除已经绘制的等值线就要将地图重新投影一遍,如果地图投影精度高一点,整个投影过程就会特别漫长。通过对等值线及风场的返回结果进行研究,我找到了一个不必重新投影地图就可将等值线及风场擦除的方法。一、matplotlib及Basemapmatplotlib是Python常用的数据绘制包。它基于numpy的数组运算功能,可以轻易的画出各种统计图形,如散点图,条行图,饼图,等值线图等。Basemap是Matplotlib的一个子包,负责地图绘制。在数据可视化过程中,我们可以将数据在地图上画出来。利用matplotlib及Basemap画图的基本步骤是:1. 创建一个figure实例2. 在figure里创建Axes容器实例3. 在Axes容器内创建Basemap实例进行地图投影4. 调用Basemap实例的contour及barbs方法进行在地图上绘图二、不进行擦除操作直接绘制新的等值线或风场效果演示为了方便演示,数据为我自己手中的数据,其中values,x1,y1为等值线的数据及坐标,huvalues,hvvalues,x2,y2为风场的数据及坐标,数据的格式及获得方法就不做过多解释1. 绘制地图投影import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfig = plt.figure()ax = fig.add_axes(0,0,1,1)m = Basemap(projection= laea, lon_0= 90, lat_0= 40, width= 11000000, height= 8000000,resolution=l,ax=ax)m.drawcoastlines(color=tan)plt.show()我们将得到下图演示的结果2. 绘制等值线import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfig = plt.figure()ax = fig.add_axes(0,0,1,1)m = Basemap(projection= laea, lon_0= 90, lat_0= 40, width= 11000000, height= 8000000,resolution=l,ax=ax)m.drawcoastlines(color=tan)c= m.contour(x1,y1,values,15,linewidths=1.5)plt.show()得到结果如下:3. 继续绘制风场import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfig = plt.figure()ax = fig.add_axes(0,0,1,1)m = Basemap(projection= laea, lon_0= 90, lat_0= 40, width= 11000000, height= 8000000,resolution=l,ax=ax)m.drawcoastlines(color=tan)c= m.contour(x1,y1,values,15,linewidths=1.5)b= m.barbs(x2,y2,huvalues*2.5,hvvalues*2.5)plt.show()得到结果如下:由此我们可以看出,如果在绘制新的等值线或者风场前不进行擦除操作,所有的图像都会叠加在一起三、通过重新进行地图投影进行擦除操作1. 绘制地图投影import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfig = plt.figure()ax = fig.add_axes(0,0,1,1)m = Basemap(projection= laea, lon_0= 90, lat_0= 40, width= 11000000, height= 8000000,resolution=l,ax=ax)m.drawcoastlines(color=tan)plt.show()我们将得到下图演示的结果2. 绘制等值线import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfig = plt.figure()ax = fig.add_axes(0,0,1,1)m = Basemap(projection= laea, lon_0= 90, lat_0= 40, width= 11000000, height= 8000000,resolution=l,ax=ax)m.drawcoastlines(color=tan)c= m.contour(x1,y1,values,15,linewidths=1.5)plt.show()得到结果如下:3. 擦除axes重新进行地图投影import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfig = plt.figure()ax = fig.add_axes(0,0,1,1)m = Basemap(projection= laea, lon_0= 90, lat_0= 40, width= 11000000, height= 8000000,resolution=l,ax=ax)m.drawcoastlines(color=tan)x1,y1=m(lon,lat)c= m.contour(x1,y1,values,15,linewidths=1.5)ax.clear()m = Basemap(projection= laea, lon_0= 90, lat_0= 40, width= 11000000, height= 8000000,resolution=l,ax=ax)m.drawcoastlines(color=tan)plt.show()得到下图结果:4. 绘制风场import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfig = plt.figure()ax = fig.add_axes(0,0,1,1)m = Basemap(projection= laea, lon_0= 90, lat_0= 40, width= 11000000, height= 8000000,resolution=l,ax=ax)m.drawcoastlines(color=tan)c= m.contour(x1,y1,values,15,linewidths=1.5)ax.clear()m = Basemap(projection= laea, lon_0= 90, lat_0= 40, width= 11000000, height= 8000000,resolution=l,ax=ax)m.drawcoastlines(color=tan)x2,y2= m(hulon,hulat)b= m.barbs(x2,y2,huvalues*2.5,hvvalues*2.5)plt.show()得到结果如下:此方法虽然可以达到预期的效果,但是我们的地图投影并未做过改变,重新进行地图投影毫无意义,而且还会占用系统不必要的资源四、对等值线实例及风场实例进行研究1. 等值线通过dir()命令我们可以查看创建的等值线实例c的属性方法print(dir(c)_A, _class_, _delattr_, _dict_, _dir_, _doc_, _eq_, _format_, _ge_, _getattribute_, _getstate_, _gt_, _hash_, _init_, _le_, _lt_, _module_, _ne_, _new_, _reduce_, _reduce_ex_, _repr_, _setattr_, _sizeof_, _str_, _subclasshook_, _weakref_, _add_label, _auto, _autolev, _check_xyz, _contour_args, _contour_generator, _contour_level_args, _corner_mask, _get_allsegs_and_allkinds, _get_label_clabeltext, _get_label_text, _get_lowers_and_uppers, _initialize_x_y, _levels, _make_paths, _process__args, _process_colors, _process_levels, _process_linestyles, _process_linewidths, _transform, add_checker, add_label, add_label_clabeltext, add_label_near, allkinds, allsegs, alpha, antialiased, autoscale, autoscale_None, ax, calc_label_rot_and_inline, callbacksSM, changed, check_update, clabel, cmap,collections, colorbar, colors, contour_doc, cvalues, extend, extent, filled, find_nearest_contour, get_alpha, get_array, get_clim, get_cmap, get_label_coords, get_label_width, get_real_label_width, get_text, get_transform, hatches, labelCValues, labelTexts, labels, layers, legend_elements, levels, linestyles, linewidths, locate_label, locator, logscale, monochrome, nchunk, norm, origin, pop_label, print_label, set_alpha, set_array, set_clim, set_cmap, set_label_props, set_norm, tcolors, tlinewidths, to_rgba, too_close, update_dict, vmax, vmin, zmax, zmin通过查看,发现在c的属性方法中并没有remove()方法,但是我们发现有一个属性是collections,这里的collections如果与Python的集合类相同,它就应该有remove()方法进删除,所以继续通过dir()命令进行查看print(dir(c.collections)_add_, _class_, _contains_, _delattr_, _delitem_, _dict_, _dir_, _doc_, _eq_, _format_, _ge_, _getattribute_, _getitem_, _getstate_, _gt_, _hash_, _iadd_, _imul_, _init_, _iter_, _le_, _len_, _lt_, _module_, _mul_, _ne_, _new_, _reduce_, _reduce_ex_, _repr_, _reversed_, _rmul_, _setattr_, _setitem_, _setstate_, _sizeof_, _str_, __,_subclasshook_, _weakref_, append, clear, copy, count, extend, index, insert, pop, remove, reverse, sort, type通过查看,发现c.collections有remove()方法,所以尝试用c.collections.remove()进行删除,由于remove()方法一次只能删除一个元素,所以要用for循环来进行删除。import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfig = plt.figure()ax = fig.add_axes(0,0,1,1)m = Basemap(projection= laea, lon_0= 90, lat_0= 40, width= 11000000, height= 8000000,resolution=l,ax=ax)m.drawcoastlines(color=tan)c= m.contour(x1,y1,values,15,linewidths=1.5)for i in c.collections: i.remove()plt.show()得到下图结果:由此可见,此方法可行2. 风场通过dir()命令我们可以查看创建的等值线实例b的属性方法print(dir(b)_add_, _class_, _contains_, _delattr_, _dir_, _doc_, _eq_, _format_, _ge_, _getattribute_, _getitem_, _getnewargs_, _gt_, _hash_, _init_, _iter_, _le_, _len_, _lt_, _mul_, _ne_, _new_, _reduce_, _reduce_ex_, _repr_, _rmul_, _setattr_, _sizeof_, _str_, _subclasshook_, count, index可以发现风场的实例b没有remove方法,也没有collections属性,所以决定先通过type()方法看看风场实例是什么类型的print(type(b)可以发现风场实例b是一个元组,所以继续看它的元素有什么属性print(dir(b0)_A, _class_, _delattr_, _dict_, _dir_, _doc_, _eq_, _format_, _ge_, _getattribute_, _getstate_, _gt_, _hash_, _init_, _le_, _lt_, _module_, _ne_, _new_, _reduce_, _reduce_ex_, _repr_, _setattr_, _sizeof_, _str_, _subclasshook_, _weakref_, _agg_filter, _alpha, _animated, _antialiaseds, _axes, _clipon, _clippath, _contains, _edgecolors, _edgecolors_original, _facecolors, _facecolors_original, _factor, _find_tails, _get_bool, _get_value, _gid, _hatch, _is_filled, _is_stroked, _label, _length, _linestyles, _linewidths, _make_barbs, _mouseover, _offset_position, _offsets, _oid, _path_effects, _paths, _picker, _pickradius, _pivot, _prepare_points, _propobservers, _rasterized, _remove_method, _set_gc_clip, _sizes, _sketch, _snap, _stale, _transOffset, _transform, _transformSet, _transforms, _uniform_offsets, _url, _urls, _visible, add_callback, add_checker, aname, autoscale, autoscale_None, axes, barb_increments, barbs_doc, callbacksSM, changed, check_update, clipbox, cmap, colorbar, contains, convert_xunits, convert_yunits, draw, eventson, figure, fill_empty, findobj, flip, format_cursor_data, get_agg_filter, get_alpha, get_animated, get_array, get_axes, get_children, get_clim, get_clip_box, get_clip_on, get_clip_path, get_cmap, get_contains, get_cursor_data, get_dashes, get_datalim, get_edgecolor, get_edgecolors, get_facecolor, get_facecolors, get_figure, get_fill, get_gid, get_hatch, get_label, get_linestyle, get_linestyles, get_linewidth, get_linewidths, get_offset_position, get_offset_transform, get_offsets, get_path_effects, get_paths, get_picker, get_pickradius, get_rasterized, get_sizes, get_sketch_params, get_snap, get_transform, get_transformed_clip_path_and_affine, get_transforms, get_url, get_urls, get_visible, get_window_extent, get_zorder, have_units, hitlist, is_figure_set, is_transform_set, mouseover, norm, pchanged, pick, pickable, properties, remove, remove_callback, rounding, set, set_UVC, set_agg_filter, set_alpha, set_animated, set_antialiased, set_antialiaseds, set_array, set_axes, set_clim, set_clip_box, set_clip_on, set_clip_path, set_cmap, set_color, set_contains, set_dashes, set_edgecolor, set_edgecolors, set_facecolor, set_facecolors, set_figure, set_gid, set_hatch, set_label,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论