如何在 matplotlib 中屏蔽线的一部分
How to mask a part of a line in matplotlib
我在 python 中用 matplotlib 画了一些线:
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
fig_axes = (-100, 100, -50, 80)
x_range = (-800, 800, 33)
orig = (0,5)
x = np.linspace(x_range[0], x_range[1], x_range[2])
fig = plt.figure(figsize=(15, 9))
ax = fig.add_subplot(1,1,1)
ax.set_facecolor('black')
ax.axis([fig_axes[0], fig_axes[1], fig_axes[2], fig_axes[3]])
for i in x:
ax.plot((orig[0], i), (orig[1], fig_axes[2]), 'r', linewidth=1.5)
plt.show()
然后我得到这样的图像:
output
现在我想隐藏图形上所有0以上的部分。我听说过
numpy.ma.masked_where
但是我没有数组,所以我不能使用它。
你知道我该怎么做吗?
我想要这样的东西:
excepted output
谢谢
画一个矩形遮住
import matplotlib.patches as patches
rect = patches.Rectangle((-100,0),200,80,facecolor='black',fill=True,zorder=20)
ax.add_patch(rect)
或者重新计算终点,应该是基础几何
您可以在直线上设置矩形剪辑路径:
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mp
fig_axes = (-100, 100, -50, 80)
x_range = (-800, 800, 33)
orig = (0,5)
x = np.linspace(x_range[0], x_range[1], x_range[2])
fig = plt.figure(figsize=(15, 9))
ax = fig.add_subplot(1,1,1)
ax.set_facecolor('black')
ax.axis([fig_axes[0], fig_axes[1], fig_axes[2], fig_axes[3]])
r = mp.Rectangle((fig_axes[0],fig_axes[2]), fig_axes[1]-fig_axes[0], 0-fig_axes[2], transform=ax.transData)
for i in x:
l = ax.plot((orig[0], i), (orig[1], fig_axes[2]), 'r', linewidth=1.5)
l[0].set_clip_path(r)
所以,按照评论中的要求,我在上面画了一个矩形:
ax.add_patch(ptc.Rectangle((fig_axes[0], 0), (fig_axes[1]-fig_axes[0]), (orig[1]+5), fc ='black', zorder = 3))
我在 python 中用 matplotlib 画了一些线:
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
fig_axes = (-100, 100, -50, 80)
x_range = (-800, 800, 33)
orig = (0,5)
x = np.linspace(x_range[0], x_range[1], x_range[2])
fig = plt.figure(figsize=(15, 9))
ax = fig.add_subplot(1,1,1)
ax.set_facecolor('black')
ax.axis([fig_axes[0], fig_axes[1], fig_axes[2], fig_axes[3]])
for i in x:
ax.plot((orig[0], i), (orig[1], fig_axes[2]), 'r', linewidth=1.5)
plt.show()
然后我得到这样的图像:
output
现在我想隐藏图形上所有0以上的部分。我听说过
numpy.ma.masked_where
但是我没有数组,所以我不能使用它。
你知道我该怎么做吗?
我想要这样的东西:
excepted output
谢谢
画一个矩形遮住
import matplotlib.patches as patches
rect = patches.Rectangle((-100,0),200,80,facecolor='black',fill=True,zorder=20)
ax.add_patch(rect)
或者重新计算终点,应该是基础几何
您可以在直线上设置矩形剪辑路径:
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mp
fig_axes = (-100, 100, -50, 80)
x_range = (-800, 800, 33)
orig = (0,5)
x = np.linspace(x_range[0], x_range[1], x_range[2])
fig = plt.figure(figsize=(15, 9))
ax = fig.add_subplot(1,1,1)
ax.set_facecolor('black')
ax.axis([fig_axes[0], fig_axes[1], fig_axes[2], fig_axes[3]])
r = mp.Rectangle((fig_axes[0],fig_axes[2]), fig_axes[1]-fig_axes[0], 0-fig_axes[2], transform=ax.transData)
for i in x:
l = ax.plot((orig[0], i), (orig[1], fig_axes[2]), 'r', linewidth=1.5)
l[0].set_clip_path(r)
所以,按照评论中的要求,我在上面画了一个矩形:
ax.add_patch(ptc.Rectangle((fig_axes[0], 0), (fig_axes[1]-fig_axes[0]), (orig[1]+5), fc ='black', zorder = 3))