使用Matplotlib填充两行之间有2个限制

时间:2017-01-30 13:01:09

标签: python matplotlib

我想填充曲线y1 = x ^ 3和y2 = 3x-2之间的区域。 下面是我将要执行此操作的代码,但是,我想放置y1<的限制。 y2(我用fill_between的where选项完成)和x< 1。

以下代码出现的问题是曲线之间的区域填充x> 1。我想在[-2.5,2.5]范围内绘制这些图。如何让matplotlib在x> 1?

的曲线之间停止填充

我的代码:

import matplotlib.pyplot as plot
import numpy as np

x = np.linspace(-2.5, 2.5, 100)
y1 = np.array([i**3 for i in x]) 
y2 = np.array([3*i-2 for i in x]) 

fig = plot.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(x, y1, label=r"$y=x^3$")
ax.plot(x, y2, label=r"$y=3x-2$")
ax.spines['left'].set_position('center')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('center')
ax.spines['top'].set_color('none')
ax.spines['left'].set_smart_bounds(True)
ax.spines['bottom'].set_smart_bounds(True)
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.fill_between(x, y1, y2, where=y2<y1, facecolor='green')
ax.legend()

plot.show()

1 个答案:

答案 0 :(得分:0)

我明白了。最简单的解决方法是定义3个新变量u,v和w,其中u包含v和w的x值,v = x ^ 3,w = 3x-2。

u=x[x<1]
v=y1[y1<1]
w=y2[y2<1]

然后用fill_between:

绘制这些值
ax.fill_between(u, v, w, where=w<v, facecolor='green')