[英]How do I set color to Rectangle in Matplotlib?
例如在 matplotlib 中如何將顏色設置為矩形? 我嘗試使用參數顏色,但沒有成功。
我有以下代碼:
fig=pylab.figure()
ax=fig.add_subplot(111)
pylab.xlim([-400, 400])
pylab.ylim([-400, 400])
patches = []
polygon = Rectangle((-400, -400), 10, 10, color='y')
patches.append(polygon)
p = PatchCollection(patches, cmap=matplotlib.cm.jet)
ax.add_collection(p)
ax.xaxis.set_major_locator(MultipleLocator(20))
ax.yaxis.set_major_locator(MultipleLocator(20))
pylab.show()
我無法讓你的代碼工作,但希望這會有所幫助:
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
rect1 = matplotlib.patches.Rectangle((-200,-100), 400, 200, color='yellow')
rect2 = matplotlib.patches.Rectangle((0,150), 300, 20, color='red')
rect3 = matplotlib.patches.Rectangle((-300,-50), 40, 200, color='#0099FF')
circle1 = matplotlib.patches.Circle((-200,-250), radius=90, color='#EB70AA')
ax.add_patch(rect1)
ax.add_patch(rect2)
ax.add_patch(rect3)
ax.add_patch(circle1)
plt.xlim([-400, 400])
plt.ylim([-400, 400])
plt.show()
生產:
事實證明,你需要做ax.add_artist(Rectangle)
才能使顏色規格有效; 當使用patches.append(Rectangle)
,矩形顯示為藍色(至少在我的PC上),忽略任何顏色規范。
順便說一句,請注意藝術家 - Matplotlib 1.2.1文檔:類matplotlib.patches.Rectangle說明有
edgecolor
- 用於描邊顏色 facecolor
- 用於填充顏色 ...然后有color
- 它基本上同時設置筆觸和填充顏色。
這是修改后的OP代碼,我在Linux(Ubuntu 11.04),python 2.7,matplotlib 0.99.3上測試過:
import matplotlib.pyplot as plt
import matplotlib.collections as collections
import matplotlib.ticker as ticker
import matplotlib
print matplotlib.__version__ # 0.99.3
fig=plt.figure() #pylab.figure()
ax=fig.add_subplot(111)
ax.set_xlim([-400, -380]) #pylab.xlim([-400, 400])
ax.set_ylim([-400, -380]) #pylab.ylim([-400, 400])
patches = []
polygon = plt.Rectangle((-400, -400), 10, 10, color='yellow') #Rectangle((-400, -400), 10, 10, color='y')
patches.append(polygon)
pol2 = plt.Rectangle((-390, -390), 10, 10, facecolor='yellow', edgecolor='violet', linewidth=2.0)
ax.add_artist(pol2)
p = collections.PatchCollection(patches) #, cmap=matplotlib.cm.jet)
ax.add_collection(p)
ax.xaxis.set_major_locator(ticker.MultipleLocator(20)) # (MultipleLocator(20))
ax.yaxis.set_major_locator(ticker.MultipleLocator(20)) # (MultipleLocator(20))
plt.show() #pylab.show()
這是輸出:
為避免多次調用.add_patch()
(通常是首先使用PatchCollection的目的),您可以通過cmap=
將PatchCollection
傳遞給ListedColormap
。
這看起來如下(根據fraxel的答案修改):
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from matplotlib.collections import PatchCollection
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
patches_list = []
color_list = []
patches_list.append(matplotlib.patches.Rectangle((-200,-100), 400, 200))
color_list.append('yellow')
patches_list.append(matplotlib.patches.Rectangle((0,150), 300, 20))
color_list.append('red')
patches_list.append(matplotlib.patches.Rectangle((-300,-50), 40, 200))
color_list.append('#0099FF')
patches_list.append(matplotlib.patches.Circle((-200,-250), radius=90))
color_list.append('#EB70AA')
our_cmap = ListedColormap(color_list)
patches_collection = PatchCollection(patches_list, cmap=our_cmap)
patches_collection.set_array(np.arange(len(patches_list)))
ax.add_collection(patches_collection)
plt.xlim([-400, 400])
plt.ylim([-400, 400])
plt.show()
我遇到了同樣的問題。 只有在創建PatchCollection()
時指定match_original=True
時,將color=
傳遞給Rectangle()
才會起作用。 有關詳細信息,請參閱PatchCollection() 。
@Didillysquat 示例的簡化版本是
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
fig = plt.figure()
ax = fig.add_subplot(111)
patches_list = []
color_list = []
patches_list.append(matplotlib.patches.Rectangle((-200,-100), 400, 200, color='yellow'))
patches_list.append(matplotlib.patches.Rectangle((0,150), 300, 20, color='red'))
patches_list.append(matplotlib.patches.Rectangle((-300,-50), 40, 200, color='#0099FF'))
patches_list.append(matplotlib.patches.Circle((-200,-250), radius=90, color='#EB70AA'))
# Make sure you use match_original=True
patches_collection = PatchCollection(patches_list, match_original=True)
ax.add_collection(patches_collection)
plt.xlim([-400, 400])
plt.ylim([-400, 400])
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.