2017-06-15 4 views
0

私が取り組んでいるグラフには、この小さな問題があります。私は(TEALと灰色のもの)以下に示すように2半垂直線の間の領域を埋めるしたい: enter image description herefill_between()doesn`t work

私は、次のコードを使用する場合しかし、私は何を得る `tを:

plt.fill_between(x, y_1, y_2, facecolor = 'red') 

私は間違っていますか?

種類について、

Greem
+0

'。 –

+1

'interpolate = True'要素をコードに追加してみてください。 – saul

+0

[fill_betweenx](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.fill_betweenx)[こちら](https://stackoverflow.com/a/15589909/2454357) –

答えて

1

両方のラインのX変数のデータ範囲は、完全に独立しているので、充填をY方向に行うことができるれる単一点も存在しません。

代わりにfill_betweenxを使用してx方向を入力することができます。問題は、両方の線のy値が異なることです。したがって、fill_betweenxが最初に異なるx値に対して異なるy値を有する2つの曲線間の充填に同じy値を使用できるようにそれらを補間する必要がある。

import numpy as np 
import matplotlib.pyplot as plt 

x1 = np.array([1.00, 1.20, 1.30, 1.55, 1.60]) 
x2 = np.array([1.82, 1.91, 2.14, 2.26, 2.34]) 

y1 = np.array([1.03, 1.20, 1.28, 1.42, 1.71]) 
y2 = np.array([0.90, 1.10, 1.31, 1.42, 1.58]) 

fig, ax= plt.subplots() 
ax.plot(x1,y1, color="indigo") 
ax.plot(x2,y2, color="crimson") 

yi = np.sort(np.c_[y1,y2].flatten()) 
x1i = np.interp(yi, y1, x1) 
x2i = np.interp(yi, y2, x2) 

ax.fill_betweenx(yi, x1i, x2i, color="lemonchiffon") 

plt.show() 

enter image description here

上記溶液の代わりに、そのエッジ点の両方の線の座標と、polgonを描画することができました。 2 `y`sが有効であり、従って、これら二つの` y`-値の間に埋めた場合に動作しますfill_between`

import numpy as np 
import matplotlib.pyplot as plt 

x1 = np.array([1.00, 1.20, 1.30, 1.55, 1.60]) 
x2 = np.array([1.82, 1.91, 2.14, 2.26, 2.34]) 

y1 = np.array([1.03, 1.20, 1.28, 1.42, 1.71]) 
y2 = np.array([0.90, 1.10, 1.31, 1.42, 1.58]) 

fig, ax= plt.subplots() 
ax.plot(x1,y1, color="indigo") 
ax.plot(x2,y2, color="crimson") 

x = np.append(x1,x2[::-1]) 
y = np.append(y1,y2[::-1]) 

p = plt.Polygon(np.c_[x,y], color="lemonchiffon") 
ax.add_patch(p) 

plt.show() 

enter image description here