用于绘制某些属性的二维空间分布,contourf和pcolormesh都是可视化形式的不错选择。
由于绘图数据的实际含义,我想将零附近的值设置为白色(例如,[-0.2,0.2]);零值应该是中点
从问题 [ Defining the midpoint of a colormap in matplotlib,我尝试设置vmin和vmax调整颜色图。
import pygrib
grib='fnl_20141110_12_00.grib2';
grbs=pygrib.open(grib)
grb = grbs.select(name='Vertical velocity')[8]#Vertical velocity
data=grb.values
lat,lon = grb.latlons()
Run Code Online (Sandbox Code Playgroud)
m = Basemap(llcrnrlon=110,llcrnrlat=34,urcrnrlon=122,urcrnrlat=44,projection='mill')
fig=plt.figure(figsize=(8,4))
ax1 = plt.subplot(121)
x, y = m(lon, lat)
cs = m.contourf(x,y,data,cmap=plt.cm.RdBu)
cb = m.colorbar(cs,"bottom", size="5%", pad="8%")
ax1.set_title("Original",fontsize = 15)
ax2 = plt.subplot(122)
cs = m.contourf(x,y,data,cmap=plt.cm.RdBu,vmin = -1.8,vmax =1.8)
cb = m.colorbar(cs,"bottom", size="5%", pad="8%")
ax2.set_title("symmetrical vmin & vmax",fontsize …Run Code Online (Sandbox Code Playgroud) 我在使用带有纬度和经度数据的 Python 底图模块绘制 RGB 图像时遇到问题。现在,我可以制作我想要的绘图,但问题是它有多慢,因为它能够比 RGB 数据更快地绘制单通道数据,并且一般来说,单独绘制 RGB 图像也是如此快速地。由于我有纬度/经度数据,这就是事情变得复杂的地方。我已经检查了这个问题的解决方案:
如何使用 python 和底图绘制不规则间隔的 RGB 图像?
这就是我如何到达现在的位置。它本质上归结为以下问题。当在底图中使用该pcolormesh方法时,要绘制 RGB 数据,您必须定义一个 colorTuple 参数,它将逐点映射 RGB 数据。由于数组大小约为 2000x1000,因此这需要一些时间才能完成。下面是我正在谈论的内容的片段(完整的工作代码在下面):
if one_channel:
m.pcolormesh(lons, lats, img[:,:,0], latlon=True)
else:
# This is the part that is slow, but I don't know how to
# accurately plot the data otherwise.
mesh_rgb = img[:, :-1, :]
colorTuple = mesh_rgb.reshape((mesh_rgb.shape[0] * mesh_rgb.shape[1]), 3)
# What you put in for the image doesn't matter because of the color mapping
m.pcolormesh(lons, lats, img[:,:,0], …Run Code Online (Sandbox Code Playgroud) 我尝试只孵化具有统计显着结果的区域。如何使用底图和 pcolormesh 来做到这一点?
plt.figure(figsize=(12,12))
lons = iris_cube.coord('longitude').points
lats = iris_cube.coord('latitude').points
m = Basemap(llcrnrlon=lons[0], llcrnrlat=lats[0], urcrnrlon=lons[-1], urcrnrlat=lats[-1], resolution='l')
lon, lat = np.meshgrid(lons, lats)
plt.subplot(111)
cs = m.pcolormesh(lon, lat, significant_data, cmap=cmap, norm=norm, hatch='/')
Run Code Online (Sandbox Code Playgroud) python matplotlib significance hatchstyle matplotlib-basemap
我注意到我可以将自己的属性添加到matplotlib.axes.Axes()实例中matplotlib.figure.Figure()。例如,
import matplotlib as mpl
fig = mpl.figure.Figure()
ax = fig.add_subplot()
ax.foo = 'bar'
Run Code Online (Sandbox Code Playgroud)
实际上,我可能想使用类似的方法将底图实例添加到坐标区对象
import mpl_toolkits.basemap as basemap
ax.basemap = basemap.Basemap('mollweide', ax=ax)
Run Code Online (Sandbox Code Playgroud)
这样我就可以以更加面向对象、直观的方式添加地理特征。这是这些对象的记录/可靠特征,还是偶然?换句话说,我可以“安全”地使用它吗?
我正在绘制一张地图,上面有箭头。这些箭头代表风向、平均风速(每个方向)和发生情况(每个方向)。
方向由箭头的方向指示。箭头的长度表示该方向的平均风速。箭头的颜色表示该方向有风。
这一切都可以与下面的脚本配合使用:
windData = pd.read_csv(src+'.txt'), sep='\t', names=['lat', 'lon', 'wind_dir_start', 'wind_dir_end', 'total_num_data_points','num_data_points', 'avg_windspeed']).dropna()
# plot map
m = Basemap(llcrnrlon=minLon, llcrnrlat=minLat, urcrnrlon=maxLon, urcrnrlat=maxLat, resolution='i')
Left, Bottom = m(minLon, minLat)
Right, Top = m(maxLon, maxLat)
# get x y
x, y = m(windData['lon'], windData['lat'])
# angles
angleStart = -windData['wind_start']+90
angleStart[angleStart<0] = np.radians(angleStart[angleStart<0]+360.)
angleEnd = -windData['wind_end']+90
angleEnd[angleEnd<0] = np.radians(angleEnd[angleEnd<0]+360.)
angle = angleStart + math.radians(binSize/2.)
xux = np.cos(angle) * windData['avg_windspeed']
yuy = np.sin(angle) * windData['avg_windspeed']
# occurence
occurence = (windData['num_data_points']/windData['total_num_data_points'])
xi = np.linspace(minLon, maxLon, …Run Code Online (Sandbox Code Playgroud) 我在Matplotlib中使用Basemap来绘制美国地图.但是,我似乎无法移除墨西哥或加拿大只是让美国显示.我也需要绘制状态.目前,我的代码是:
self.map = Basemap(llcrnrlon=-119, llcrnrlat=22, urcrnrlon=-64,
urcrnrlat=49, projection='lcc', lat_1=33, lat_2=45,
lon_0=-95, resolution='i', area_thresh=10000,ax=self.axes)
self.map.drawcoastlines()
self.map.drawcountries()
self.map.drawstates()
self.figure.canvas.draw()
Run Code Online (Sandbox Code Playgroud)
这显示了一些墨西哥和加拿大的美国.如果我发表评论self.map.drawcountries(),那么美国南部和北部的边界将被删除,因此这无济于事.如果我发表评论self.map.drawcoastlines(),这将删除东西边界.我找不到任何其他允许我只绘制美国(带状态)的命令.
有任何想法吗?谢谢!
我想在我的地图上放一个文字,就像卫星图像一样.
import numpy as np, matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
m = Basemap(resolution='l',projection='geos',lon_0=-75.)
fig = plt.figure(figsize=(10,8))
m.drawcoastlines(linewidth=1.25)
x,y = m(-150,80)
plt.text(x,y,'Jul-24-2012')
Run Code Online (Sandbox Code Playgroud)
但是,"7月24日至2012年"的文字没有出现在我的身上.我想这是因为地图不是笛卡尔坐标.
那么,有人可以帮我弄明白怎么做吗?
我试图在basemap地图上设置一些密度数据的动画.按照[本SO问题] [1]中的方法,我得到以下错误:
/usr/local/lib/python2.7/dist-packages/matplotlib/collections.pyc in update_scalarmappable(self)
627 if self._A is None:
628 return
--> 629 if self._A.ndim > 1:
630 raise ValueError('Collections can only map rank 1 arrays')
631 if not self.check_update("array"):
AttributeError: 'list' object has no attribute 'ndim'
Run Code Online (Sandbox Code Playgroud)
如果我init()用空值设置数据self.quad.set_array(self.z.ravel()),我最终得到两个绘制的地图,没有数据被动画.
任何人都可以解决我做错的任何亮点都将不胜感激.谢谢!
示例代码:
def plot_pcolor(lons,lats):
class UpdateQuad(object):
def __init__(self,ax, map_object, lons, lats):
self.ax = ax
self.m = map_object
self.lons = lons
self.lats = lats
self.ydim, self.xdim = lons.shape
self.z = np.zeros((self.ydim-1,self.xdim-1))
x, y = self.m(lons, …Run Code Online (Sandbox Code Playgroud) 有没有办法查询底图提取所有沿海坐标?如果坐标距离海岸1公里以内,请说用户提供lat/lng并返回功能true/false?
问题:在Matplotlib中绘制多个直方图时,我无法区分绘图与另一个绘图
图像问题:**
**次要问题:部分左侧标签"计数"不在图像范围内.为什么?
描述
我想绘制3个不同组的直方图.每组都是一个0和1的数组.我想要每个的直方图,所以我可以检测数据集上的不平衡.
我让它们分开绘制,但我想要一起绘制它们的图形.
可以并排显示不同的图形,或者我甚至用谷歌搜索将其绘制为3D,但我不知道在图形上"阅读"或"查看"并理解它是多么容易.
现在,我想在同一图形的每一侧绘制[train],[validation]和[test]条形图,如下所示:
PS:我的谷歌搜索没有返回任何可以理解的代码.此外,我想如果有人会检查我是否对我的代码做了任何疯狂.
非常感谢!
代码:
def generate_histogram_from_array_of_labels(Y=[], labels=[], xLabel="Class/Label", yLabel="Count", title="Histogram of Trainset"):
plt.figure()
plt.clf()
colors = ["b", "r", "m", "w", "k", "g", "c", "y"]
information = []
for index in xrange(0, len(Y)):
y = Y[index]
if index > len(colors):
color = colors[0]
else:
color = colors[index]
if labels is None:
label = "?"
else:
if index < len(labels):
label = labels[index]
else:
label = "?"
unique, counts = np.unique(y, …Run Code Online (Sandbox Code Playgroud) python ×10
matplotlib ×8
animation ×1
colormap ×1
geolocation ×1
grib ×1
hatchstyle ×1
histogram ×1
plot ×1
python-3.x ×1
rgb ×1
significance ×1