带 matplotlib 的砖墙
Brick wall with matplotlib
我正在编写一个关于孤子穿过势垒的程序,我正试图让势垒看起来像一个真实的势垒,也就是说,用砖块做成。问题是我找不到如何绘制 'brick' 纹理。我使用 fill_between()
,但如果有另一个选项可以接受积木,我使用它就不会有问题。
我的代码是:
gs=GridSpec(8,1) #7 rows and 1 column
state=self.fig.add_subplot(gs[2:,:])
light=self.fig.add_subplot(gs[0:2,:])
state.set_xlabel("Position ($x/ \xi$)")
state.set_ylabel("Density $|\psi|^2 \xi$")
state.plot(posit,phi2)
state.fill_between(posit,phi2,0,facecolor='0.80')
potential=state.twinx()
potential.plot(posit,pote,'g')
所有数组都定义明确等等。 运行程序的时候代码没有问题,但是如果可以的话我想知道怎么画砖
附上一张实景图,关卡暂时是空的,等着用砖砌起来,更直观。
这将是如何将砖墙放入图像中的示例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches
f = lambda x, x0, sig: np.exp(-(x-x0)**2/sig**2)
x = np.linspace(0,10, 301)
pulse = f(x, 2, 0.5)*2.8
fig, ax = plt.subplots(figsize=(10,4))
image = plt.imread("brick_texture104.png")
#http://p78i.imgup.net/brick_textadf0.png
im = ax.imshow(image, extent=[4,4+512./256,0,933./256] ) # image is 512 x 933,
ax.set_aspect("equal")
ax.plot(x, pulse, color="r", alpha = 0.7, lw=4 )
wall_patch = matplotlib.patches.Rectangle((4.5,0),1,3, transform=ax.transData )
im.set_clip_path(wall_patch)
ax.set_ylim([0,4])
ax.set_xlim([0,10])
plt.show()
我正在编写一个关于孤子穿过势垒的程序,我正试图让势垒看起来像一个真实的势垒,也就是说,用砖块做成。问题是我找不到如何绘制 'brick' 纹理。我使用 fill_between()
,但如果有另一个选项可以接受积木,我使用它就不会有问题。
我的代码是:
gs=GridSpec(8,1) #7 rows and 1 column
state=self.fig.add_subplot(gs[2:,:])
light=self.fig.add_subplot(gs[0:2,:])
state.set_xlabel("Position ($x/ \xi$)")
state.set_ylabel("Density $|\psi|^2 \xi$")
state.plot(posit,phi2)
state.fill_between(posit,phi2,0,facecolor='0.80')
potential=state.twinx()
potential.plot(posit,pote,'g')
所有数组都定义明确等等。 运行程序的时候代码没有问题,但是如果可以的话我想知道怎么画砖
附上一张实景图,关卡暂时是空的,等着用砖砌起来,更直观。
这将是如何将砖墙放入图像中的示例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches
f = lambda x, x0, sig: np.exp(-(x-x0)**2/sig**2)
x = np.linspace(0,10, 301)
pulse = f(x, 2, 0.5)*2.8
fig, ax = plt.subplots(figsize=(10,4))
image = plt.imread("brick_texture104.png")
#http://p78i.imgup.net/brick_textadf0.png
im = ax.imshow(image, extent=[4,4+512./256,0,933./256] ) # image is 512 x 933,
ax.set_aspect("equal")
ax.plot(x, pulse, color="r", alpha = 0.7, lw=4 )
wall_patch = matplotlib.patches.Rectangle((4.5,0),1,3, transform=ax.transData )
im.set_clip_path(wall_patch)
ax.set_ylim([0,4])
ax.set_xlim([0,10])
plt.show()