Alex Rivera | Logout

How do I set color to Rectangle in Matplotlib?

Asked 2012-05-11T11:28:07.070
32

How do I set color to Rectangle for example in matplotlib? I tried using argument color, but had no success.

I have following code:

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()
Edit
Report

1 Answer

7

Turns out, you need to do ax.add_artist(Rectangle) to have the color specifications work; when using patches.append(Rectangle), the rectangle is shown in blue (on my PC, at least) ignoring any color specification.

Btw, note that artists — Matplotlib 1.2.1 documentation: class matplotlib.patches.Rectangle states that there is

  • edgecolor - for stroke color
  • facecolor - for fill color

... and then there is color - which basically sets both stroke and fill color at the same time.

Here is the modified OP code, which I've tested on 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()

this is the output:

matplotlib.png

answered 2013-03-26T17:39:18.650

Your Answer