作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用以下代码,我通过将障碍物所在的区域定义为 1 和 0 来在 2D 笛卡尔网格(稍后用作某些模拟的输入)上生成障碍物。
我想使用等高线图来绘制它,但在生成二进制填充等高线图时遇到了一些麻烦(附带问题:如何实现?)因此决定将数组绘制为图像。
代码如下:
import numpy as np, matplotlib.pyplot as plt
# create spatial coordinates
N_x, N_y = 161, 161
x = np.linspace( .0, .80, N_x )
y = np.linspace( .0, .80, N_y )
# define obstacle
obst_diameter = .3
obst_center = (.4,.2)
# 2D array defining obstacle structure: 1=obstacle, 0=nothing
metal = np.zeros( (N_x, N_y), dtype=int )
for ii in range(N_x):
for jj in range(N_y):
if ( x[ii] >= (obst_center[0]-obst_diameter/2)
and x[ii] <= (obst_center[0]+obst_diameter/2)
and y[jj] >= (obst_center[1]-obst_diameter/2)
and y[jj] <= (obst_center[1]+obst_diameter/2)
):
metal[jj,ii] = 1.
# do the plotting (contour and imshow)
xx, yy = np.meshgrid( x, y )
fig = plt.figure( figsize=(20,10) )
ax1 = fig.add_subplot( 1,2,1, aspect='equal' )
cont_obst = ax1.contour( xx, yy, metal, colors='k', levels=[0,1] )
ax1.plot( obst_center[0], obst_center[1], marker='*', markersize=30, color='yellow' )
ax1.set_xlabel( 'x in m' )
ax1.set_ylabel( 'y in m' )
ax2 = fig.add_subplot( 1,2, 2, aspect='equal' )
ax2.imshow( metal, cmap='Greys', interpolation='none',
extent=[np.min(x), np.max(x), np.min(y), np.max(y)] )
ax2.plot( obst_center[0], obst_center[1], marker='*', markersize=30, color='yellow' )
ax2.set_xlabel( 'x in m' )
ax2.set_ylabel( 'y in m' )
plt.savefig( 'another_plot.png', bbox_inches='tight' )
生成的图像如下所示,左边是 contour
图,右边是 imshow
图(障碍物的中心用黄色星标出) ).
显然,这两个情节是不同的。这是什么原因,即我在这里缺少什么?
最佳答案
matplotlib 的imshow 函数的原点是左上角。如果您将相关行更改为:
ax2.imshow( metal, cmap='Greys', interpolation='none',
extent=[np.min(x), np.max(x), np.min(y), np.max(y)], origin='lower')
它将解决这个问题。
关于python - 如何在同一个 numpy 数组上使用 matplotlib 的 imshow 和等高线图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43776330/
我是一名优秀的程序员,十分优秀!