gpt4 book ai didi

python-2.7 - Matplotlib - 在 hline 上方/下方更改线条颜色

转载 作者:行者123 更新时间:2023-12-03 16:25:40 24 4
gpt4 key购买 nike

我有一个线图和 2 条 hlines,都使用不同的颜色,我正在用 hline 的颜色填充主线与 hlines 交叉的区域。除此之外,我想对这些区域的主线使用相同的颜色。简而言之,当前输出:
enter image description here

期望的输出:
enter image description here

以及我目前使用的相关代码:

lower, upper = 20, 80

self.indicatorPlot.axhline(lower, color="red")
self.indicatorPlot.axhline(upper, color="green")

self.indicatorPlot.plot(self.chartTimes, self.indicatorData, color="blue")

self.indicatorPlot.fill_between(self.chartTimes, self.indicatorData, lower, where=(self.indicatorData <= lower), facecolor="red", interpolate=True)
self.indicatorPlot.fill_between(self.chartTimes, self.indicatorData, upper, where=(self.indicatorData >= upper), facecolor="green", interpolate=True)

最佳答案

原则上你可以把你的情节分成三部分,上面的值upper ,低于 lower 的值和中间的值。从这个意义上说,这个问题已经被问过和回答过,例如

  • Python: Is it possible to change line color in a plot if exceeds a specific range?
  • Plot: color all larger than different color

  • 如果您的点密度足够高,那么这些解决方案会很好用,以至于这些线最终足够接近阈值线。

    在您有较大差距的情况下,它们可能不太适合。因此,我将在这里给出一个解决方案,它对间隙进行插值,使线条恰好在阈值线处结束。
    import numpy as np; np.random.seed(43)
    import matplotlib.pyplot as plt

    t = np.linspace(0,100,301)
    x = np.cumsum(np.random.randn(len(t)))

    lower,upper = 0,8

    fig, ax=plt.subplots()

    ax.axhline(lower, color="crimson")
    ax.axhline(upper, color="limegreen")


    def insertzeros(t, x, zero=0):
    ta = []
    positive = (x-zero) > 0
    ti = np.where(np.bitwise_xor(positive[1:], positive[:-1]))[0]
    for i in ti:
    y_ = np.sort(x[i:i+2])
    z_ = t[i:i+2][np.argsort(x[i:i+2])]
    t_ = np.interp(zero, y_, z_)
    ta.append( t_ )
    tnew = np.append( t, np.array(ta) )
    xnew = np.append( x, np.ones(len(ta))*zero )
    xnew = xnew[tnew.argsort()]
    tnew = np.sort(tnew)
    return tnew, xnew

    t1,x1 = insertzeros(t,x, zero=lower)
    t1,x1 = insertzeros(t1,x1, zero=upper)

    xm = np.copy(x1)
    xm[(x1 < lower) | (x1 > upper)] = np.nan
    ax.plot(t1,xm, color="C0")

    xl = np.copy(x1)
    xl[(x1 > lower)] = np.nan
    ax.plot(t1,xl, color="crimson")
    #
    xu = np.copy(x1)
    xu[(xu < upper)] = np.nan
    ax.plot(t1,xu, color="limegreen")

    ax.fill_between(t, x, lower, where=(x <= lower), facecolor="crimson", interpolate=True, alpha=0.5)
    ax.fill_between(t, x, upper, where=(x >= upper), facecolor="limegreen", interpolate=True, alpha=0.5)


    plt.show()

    enter image description here

    关于python-2.7 - Matplotlib - 在 hline 上方/下方更改线条颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46213266/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com