【问题标题】:Matplotlib fill between multiple linesMatplotlib 在多行之间填充
【发布时间】:2017-11-28 01:10:21
【问题描述】:

我想在 matplotlib.pyplot 的 3 行之间填充,但不幸的是 fill_between 让我有机会只在两行之间填充。任何想法如何处理这个?

编辑:

好的,我没有解释我真正的意思,因为我无法以我目前的声誉添加图片,所以可能是这样:

我尝试填充以这些线为界的多边形,但我不知道如何填充,因为 fill_between 让我有机会仅填充其中两条线之间的区域。填充方程下方:

y <= 4- 2x
y <= 3 - 1/2x
y <= 1 - x
y >= 0
x >= 0

x 和 y 大于 0 是显而易见的。我从 (0,0) 开始情节,但我还有 3 行...

y <= 4- 2x
y <= 3 - 1/2x
y <= 1 - x

【问题讨论】:

  • 您能否详细说明问题并提供一些模拟数据和/或您想要获得的示例

标签: python matplotlib


【解决方案1】:

要使用fill_between,请先指定 X 值,然后再指定要“填充”的两个 Y 集。下面是一个例子:

import pylab as plt
import numpy as np

X  = np.linspace(0,3,200)
Y1 = X**2 + 3
Y2 = np.exp(X) + 2
Y3 = np.cos(X)

plt.plot(X,Y1,lw=4)
plt.plot(X,Y2,lw=4)
plt.plot(X,Y3,lw=4)

plt.fill_between(X, Y1,Y2,color='k',alpha=.5)
plt.fill_between(X, Y1,Y3,color='y',alpha=.5)

plt.show()

如果您只想在 Y2 和 Y3 之间填充:

plt.fill_between(X, Y2,Y3,color='m',alpha=.5)

这会给你

【讨论】:

  • 请注意,此答案基于发布的原始问题,在编辑之前。
【解决方案2】:

如果您从点 (0, 0) 开始绘图,因此不需要考虑不在第一象限中的多边形区域,那么在这种特殊情况下应该可以解决问题:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,10,0.1)

# The lines to plot
y1 = 4 - 2*x
y2 = 3 - 0.5*x
y3 = 1 -x

# The upper edge of polygon (min of lines y1 & y2)
y4 = np.minimum(y1, y2)

# Set y-limit, making neg y-values not show in plot
plt.ylim(0, 5)

# Plotting of lines
plt.plot(x, y1,
         x, y2,
         x, y3)

# Filling between line y3 and line y4
plt.fill_between(x, y3, y4, color='grey', alpha='0.5')
plt.show()

【讨论】:

  • 是否可以在其中一个交叉路口添加一个小节点(圆圈)以将其与其他交叉路口区分开来,比如在蓝色和绿色的交叉路口?是否也可以显示该点的坐标?
【解决方案3】:

只需计算多边形的角点,即线相交的点。 然后使用pyplot.fill 绘制多边形。

例子:

import matplotlib.pyplot as plt

# define corner points
x = [1,2,1,0]
y = [2,1,0,1]

# plot
plt.fill(x,y)
plt.show()

结果图像:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多