2016-08-28 3 views
3

サイトとPythonにはまったく新しいので、ヘルプとヒントは高く評価されます。関数に応じてパッチコレクションをプロットする

私は、(x、y)のいくつかのデータを得て、中心の周りにいくつかのほぼ円形の曲線を描いています。しかし、例のために、私はちょうどいくつかの(x、y)形成サークルを作成しました。

ここでは、これらのポリゴンの間のスペースを色で塗りつぶしたいと思います。すべての「リング」に独自のシェードがあるように関数によって得られた値(z)を考えてみましょう。

これは、私が今考え出したものです。私を与える

import matplotlib.pyplot as plt 
import numpy as np 
from math import sin, cos 
from matplotlib.patches import Polygon 
from matplotlib.collections import PatchCollection 

r = np.array([0.1, 0.2, 0.3, 0.4, 0.5 ,0.6, 0.7, 0.8, 0.9, 1.0]) 

fig, ax = plt.subplots(1) 
ax.set_xlim([-1.1, 1.1]) 
ax.set_ylim([-1.1, 1.1]) 

x=[] 
y=[] 
patches = [] 
colors=np.array([0.9,0.8, 0.1, 0.1, 0.1, 0.4, 0.2,0.8,0.1, 0.9]) 




for radius in r: 
    for phi in np.linspace(0, 360, 200, endpoint=True): 
     x.append(radius*cos(np.deg2rad(phi))) 
     y.append(radius*sin(np.deg2rad(phi))) 
    points = np.vstack([x,y]).T 
    polygon = Polygon(points,False) 
    patches.append(polygon) 

p = PatchCollection(patches, cmap="Blues") 
p.set_array(colors) 

ax.add_collection(p) 

plt.show() 

rings

  1. 右側に、この水平線があり、なぜかしら、これは私が、私は自分のコードが何をするのか理解しないと信じています。
  2. リングセグメントのすべてが異なる色合いを持つのではなく、同じ色を持つので、これはトリックを行っていません。私は私がドキュメント が得られないようが何set_array()ないアイデアを持っていないにもかかわらずexample でそれを発見したよう p.set_array(色) は、トリックを行うだろうと思った

離れてたくさん。

全く異なるアプローチがある場合は、とにかく教えてください。

答えて

1

サークルを最大から最小まで追加する必要があります。そのため、サークル同士を重ねて表示する必要はありません。

パッチを必要とする場合、私はplot a circle with pyplothttp://matplotlib.org/users/colormaps.html

import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.cm as cm 

r = np.arange(1, 0, -0.1) 

fig, ax = plt.subplots(1) 
ax.set_xlim([-1.1, 1.1]) 
ax.set_ylim([-1.1, 1.1]) 

color_vec = np.array([0.9, 0.8, 0.1, 0.1, 0.1, 0.4, 0.2, 0.8, 0.1, 0.9]) 
colors = cm.get_cmap("Blues")(color_vec) 

for i, radius in enumerate(r): 
    circle = plt.Circle((0, 0), radius, color=colors[i]) 
    ax.add_artist(circle) 

plt.show() 

を使用:

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.patches import Polygon 
from matplotlib.collections import PatchCollection 

r = np.arange(1, 0, -0.1) 

fig, ax = plt.subplots(1) 
ax.set_xlim([-1.1, 1.1]) 
ax.set_ylim([-1.1, 1.1]) 
patches = [] 

colors = np.array([0.9, 0.8, 0.1, 0.1, 0.1, 0.4, 0.2, 0.8, 0.1, 0.9]) 

phi = np.linspace(0, 2*np.pi, 200) 
for radius in r: 
    x = radius * np.cos(phi) 
    y = radius * np.sin(phi) 
    points = np.vstack([x, y]).T 
    polygon = Polygon(points, False) 
    patches.append(polygon) 

p = PatchCollection(patches, cmap="Blues") 
p.set_array(colors) 

ax.add_collection(p) 

plt.show() 
+0

はい、私はパッチを必要と私は最終的に重複が問題であったことを自分自身を考え出しました。しかし、r = r [:: - 1]で自分のコード内の半径配列を単純に逆転させても、それは技術的には同じでなければならないのに、私にとってはうまくいきません。 PatchCollectionでの描画の順序を決定する方法(私はすでに単一パッチのzorderを見つけました) – Marsl

関連する問題