8

曲線の下を虹色で塗りつぶしたい。実際、関数 matplotlib.pyplot.fill_between は、曲線の下の領域を単一の色で塗りつぶすことができます。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 100, 50) 
y = -(x-50)**2 + 2500
plt.plot(x,y)
plt.fill_between(x,y, color='green')
plt.show()

色を虹色に微調整できるノブはありますか? ありがとう。

4

3 に答える 3

12

一連の長方形で「塗りつぶし」たい場合、これは非常に簡単にハッキングできます。

import numpy as np
import pylab as plt

def rect(x,y,w,h,c):
    ax = plt.gca()
    polygon = plt.Rectangle((x,y),w,h,color=c)
    ax.add_patch(polygon)

def rainbow_fill(X,Y, cmap=plt.get_cmap("jet")):
    plt.plot(X,Y,lw=0)  # Plot so the axes scale correctly

    dx = X[1]-X[0]
    N  = float(X.size)

    for n, (x,y) in enumerate(zip(X,Y)):
        color = cmap(n/N)
        rect(x,0,dx,y,color)

# Test data    
X = np.linspace(0,10,100)
Y = .25*X**2 - X
rainbow_fill(X,Y)
plt.show()

ここに画像の説明を入力

長方形を小さくする (つまり、より多くのポイントを使用する) ことで、ギザギザのエッジを滑らかにすることができます。さらに、台形 (または補間された多項式) を使用して、「四角形」を改良することもできます。

于 2013-08-13T17:53:00.417 に答える
3

「color=」に巧妙な引数を与えるつもりなら、残念ながら私の知る限り、これは存在しません。各色に二次線を設定し、オフセットを変えることで、これを手動で行うことができます。それらの間を正しい色で塗りつぶすと、虹色になります。これは、いくつかの python を学ぶための楽しいプロジェクトになりますが、試してみたいと思わない場合は、次の例をご覧ください。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 100, 50) 

y_old = -(x-50)**2 + 2500
for delta, color in zip([2250, 2000, 1750, 1500, 1250, 1000], ["r", "orange", "g", "b", "indigo", "violet"] ):
    y_new = -(x-50)**2 + delta
    plt.plot(x, y, "-k")
    plt.fill_between(x, y_old, y_new, color=color)
    y_old = y_new

plt.ylim(0, 2500)
plt.show()

例

お気づきのように、これは虹のようには見えません。これは、使用している関数が 2 次関数であるためです。実際には、虹はさまざまな半径の円でできています (ここにも楽しい数学プロジェクトがあります!)。これはmatplotlibでもプロット可能です。これを試して、虹の7色以上をプロットできるようにします。たとえば、スペクトル全体にまたがる1000色をプロットして、実際に虹のように見せます!

于 2013-08-13T17:34:29.487 に答える