2

我试图得到这样的东西(图像完全填充了红色方块(我只画了几个))在此处输入图像描述:。扩展我想要的内容:我希望红色方块居中在黄色方块中,如图所示(但所有黄色方块中都有红色方块)。

发生的情况是较大的窗口(黄色网格)彼此重叠一半大小,在这种情况下,较小的窗口,大窗口大小的一半,(红色正方形)以大窗口的中心为中心窗户。我能得到的最远的是在 matplotlib 上使用这个 Multiple grids我基本上使用他们的代码,但为了让事情变得绝对清楚,我包含了代码:

编辑:感谢罗格斯大学,我得到了我想要的。这是一个稍微编辑和缩短的版本。这段代码给出了我想要的四个黄色网格交叉点的第一个中心。

import matplotlib.pyplot as plt
from matplotlib.pyplot import subplot
from scipy.misc import imread
import numpy as np
import matplotlib.cm as cmps
import matplotlib.collections as collections


i = 1
initial_frame = 1


ax = subplot(111)


bg = imread("./png/frame_" + str("%05d" % (i + initial_frame) ) + ".png").astype(np.float64)

# define the normal (yellow) grid
ytcks = np.arange(16,bg.shape[0],32)
xtcks = np.arange(16,bg.shape[1],32)

# plot the sample data
ax.imshow(bg, cmap=plt.cm.Greys_r, interpolation='none')

ax.set_xticks(xtcks)
ax.set_xticks(xtcks+16, minor=True)

ax.set_yticks(ytcks)
ax.set_yticks(ytcks+16, minor=True)

ax.xaxis.grid(True,'minor', linestyle='--', lw=1., color='y')
ax.yaxis.grid(True,'minor', linestyle='--', lw=1., color='y')

ax.xaxis.grid(True,'major', linestyle='--', lw=0.5, color='g')
ax.yaxis.grid(True,'major', linestyle='--', lw=0.5, color='g')

plt.show()
4

2 回答 2

1

提到更大和更小的网格有点令人困惑,因为对我来说它们似乎大小相同,但我认为您的意思是“主要”和“次要”网格。

好吧,用我的想法来模仿你的照片,看看这是否有意义:

import matplotlib.collections as collections
import numpy as np
import matplotlib.pyplot as plt

# generate some fake data, after:
# http://matplotlib.org/examples/images_contours_and_fields/pcolormesh_levels.html
dx, dy = 0.05, 0.05
y, x = np.mgrid[slice(1, 5, dy), slice(1, 5, dx)]
z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

# define the normal (yellow) grid
tcks = np.arange(0,90,10)

fig, ax = plt.subplots(figsize=(8,8), subplot_kw={'xticks': tcks, 'yticks': tcks})

# plot the sample data
ax.imshow(z, cmap=plt.cm.Greys_r, interpolation='none', vmin=0.4, vmax=1.5, extent=[0,z.shape[0],0,z.shape[1]])

# plot the yellow grid
ax.grid(True, linestyle='--', color='y', lw=1.5, alpha=1.0)

# define some random 'red' grid cells
custom_grid = []

for i in range(10):   
    x = np.random.randint(0,7) * 10 + 5
    y = np.random.randint(0,7) * 10 + 5

    polygon = plt.Rectangle((x, y), 10, 10)
    custom_grid.append(polygon)

p = collections.PatchCollection(custom_grid, facecolor='none', edgecolor='r', lw=1.5)
ax.add_collection(p)

在此处输入图像描述

它仍然有点不清楚,例如当你想显示“红色”网格单元时,什么时候不显示。

于 2013-08-06T14:33:47.170 回答
1

鉴于z我的其他答案的样本数据:

# define the normal (yellow) grid
tcks = np.arange(0,90,10)

fig, ax = plt.subplots(figsize=(8,8))

# plot the sample data
ax.imshow(z, cmap=plt.cm.Greys_r, interpolation='none', vmin=0.4, vmax=1.5, extent=[0,z.shape[0],0,z.shape[1]])

ax.set_xticks(tcks)
ax.set_xticks(tcks+5, minor=True)

ax.set_yticks(tcks)
ax.set_yticks(tcks+5, minor=True)

ax.xaxis.grid(True,'minor', linestyle='--', lw=1., color='y')
ax.yaxis.grid(True,'minor', linestyle='--', lw=1., color='y')

ax.xaxis.grid(True,'major', linestyle='-', lw=1., color='r')
ax.yaxis.grid(True,'major', linestyle='-', lw=1., color='r')

ax.set_xlim(0,80)
ax.set_ylim(0,80)

在此处输入图像描述

我希望这比使用多边形绘制要快得多。

于 2013-08-06T15:04:42.477 回答