簡體   English   中英

Matplotlib fill_between 反轉?

[英]Matplotlib fill_between invert?

我正在嘗試使用 matplotlib 填充兩條相交線下方和兩條線上方的區域。 我可以在兩條線之間填充,但還沒有找到一種簡單的方法來反轉先前獲得的區域。 我唯一的解決方法是創建一些額外的功能(底部的低功能和最小功能,頂部的等效功能),這有點麻煩並且需要手動輸入(見下文)。 有更好的解決方案嗎?

插圖

import numpy as np
import matplotlib.pyplot as plt

# Doesn't work
def f1(x): return 32.0 * x + 2.0
def f2(x): return -55.0 * x
xRng=[-1, 1]
plt.plot(xRng, [f1(x) for x in xRng], 'b-')
plt.plot(xRng, [f2(x) for x in xRng], 'r-')
plt.fill_between(xRng, [f1(x) for x in xRng], [f2(x) for x in xRng], color='g') # Would like the fill inverted
plt.title('Not good'); plt.show()

# Works, but clumsy
def fLo(x): return -100
def fHi(x): return 100
def fMin(x): return min(f1(x), f2(x))
def fMax(x): return max(f1(x), f2(x))
xRng=np.linspace(-1, 1, 100)
plt.plot(xRng, [f1(x) for x in xRng], 'b-')
plt.plot(xRng, [f2(x) for x in xRng], 'r-')
plt.fill_between(xRng, [fMin(x) for x in xRng], [fLo(x) for x in xRng], color='g')
plt.fill_between(xRng, [fMax(x) for x in xRng], [fHi(x) for x in xRng], color='g')
plt.title('Complicated'); plt.show()

編輯:如果基本情況下,交換 BG 和 FG colors 將起作用@Mad Physicist,但如果有幾個這樣的區域要覆蓋,則不會

似乎fill_between不能很好地處理無限值(例如,在 matlibplot python on log scale 的曲線下填充區域)。 但是,如果您只是嘗試 plot 那些特定的行,您可以反轉 plot 的 colors:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
y1 = 32.0 * x + 2.0
y2 = -55.0 * x

fig, ax = plt.subplots()
ax.set_facecolor('g')
ax.plot(x, y1, 'b-')
ax.plot(x, y2, 'r-')
ax.fill_between(x, y1, y2, color='w')
ax.set_xlim(x.min(), x.max())
plt.show()

在此處輸入圖像描述

這是非常 hacky 並且不適用於交互式繪圖,但它會顯示您想要的 plot,希望相當輕松。

在此處輸入圖像描述

更好的方法可能是將x覆蓋的區域的背景設置為綠色補丁:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
y1 = 32.0 * x + 2.0
y2 = -55.0 * x

fig, ax = plt.subplots()
ax.plot(x, y1, 'b-')
ax.plot(x, y2, 'r-')
ax.axvspan(x.min(), x.max(), color='g')
ax.fill_between(x, y1, y2, color='w')
ax.set_xlim(x.min(), x.max())
plt.show()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM