Plot a black-and-white binary map in matplotlib
Question:
I’m using python to simulate some automation models, and with the help of matplotlib I’m producing plots like the one shown below.
I’m currently plotting with the following command:
ax.imshow(self.g, cmap=map, interpolation='nearest')
where self.g
is the binary map (0
-> blue, 1
-> red in my current plots).
However, to include this in my report I would like the plot to be with black dots on white background instead of red on blue. How do I accomplish that?
Answers:
You can change the color map you are using via the cmap
keyword. The color map 'Greys'
provides the effect you want. You can find a list of available maps on the scipy website.
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(101)
g = np.floor(np.random.random((100, 100)) + .5)
plt.subplot(211)
plt.imshow(g)
plt.subplot(212)
plt.imshow(g, cmap='Greys', interpolation='nearest')
plt.savefig('blkwht.png')
plt.show()
which results in:
There is an alternative method to Yann’s answer that gives you finer control. Matplotlib’s imshow can take a MxNx3
matrix where each entry is the RGB color value – just set them to white [1,1,1]
or black [0,0,0]
accordingly. If you want three colors it’s easy to expand this method.
import matplotlib.pyplot as plt
import numpy as np
# Z is your data set
N = 100
Z = np.random.random((N,N))
# G is a NxNx3 matrix
G = np.zeros((N,N,3))
# Where we set the RGB for each pixel
G[Z>0.5] = [1,1,1]
G[Z<0.5] = [0,0,0]
plt.imshow(G,interpolation='nearest')
plt.show()
I’m using python to simulate some automation models, and with the help of matplotlib I’m producing plots like the one shown below.
I’m currently plotting with the following command:
ax.imshow(self.g, cmap=map, interpolation='nearest')
where self.g
is the binary map (0
-> blue, 1
-> red in my current plots).
However, to include this in my report I would like the plot to be with black dots on white background instead of red on blue. How do I accomplish that?
You can change the color map you are using via the cmap
keyword. The color map 'Greys'
provides the effect you want. You can find a list of available maps on the scipy website.
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(101)
g = np.floor(np.random.random((100, 100)) + .5)
plt.subplot(211)
plt.imshow(g)
plt.subplot(212)
plt.imshow(g, cmap='Greys', interpolation='nearest')
plt.savefig('blkwht.png')
plt.show()
which results in:
There is an alternative method to Yann’s answer that gives you finer control. Matplotlib’s imshow can take a MxNx3
matrix where each entry is the RGB color value – just set them to white [1,1,1]
or black [0,0,0]
accordingly. If you want three colors it’s easy to expand this method.
import matplotlib.pyplot as plt
import numpy as np
# Z is your data set
N = 100
Z = np.random.random((N,N))
# G is a NxNx3 matrix
G = np.zeros((N,N,3))
# Where we set the RGB for each pixel
G[Z>0.5] = [1,1,1]
G[Z<0.5] = [0,0,0]
plt.imshow(G,interpolation='nearest')
plt.show()