How do I reduce the number of ticks on the colorbar and ensure that the values are equi-spaced? Basically, the 8 color bands have to be equally spaced between Amin=257 and Amax=454 i.e. the length of each colorband =(Amax-Amin)/8. I present the current and expected outputs.
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import numpy as np
from matplotlib.colors import Normalize
from matplotlib import cm
import math
from numpy import nan
fig,aPe = plt.subplots(1)
n=3
N=2*n*(n-1)
J = np.array([[]])
Pe=np.array([[394.20560747663563, 408.7929050665396 , 419.132709901089 ,
398.95097406721044, 403.81198021076113, 430.00914784982064,
424.50127213826016, 453.54817733128607, 441.4651085668709 ,
447.42507960635163, 413.8982415602072 , 390.3025816600353 ],
[394.20560747663563, 408.7929050665396 , 419.132709901089 ,
398.95097406721044, 403.81198021076113, 430.00914784982064,
424.50127213826016, 453.5481773312857 , 347.7309476270773 ,
257.42585381716805, 413.8982415602072 , 390.3025816600353 ]])
C1 = nan
for i in J[0]:
Pe = np.insert(Pe, i, [C1], axis=1)
print("Pe =", [Pe])
for i in range(0,len(Pe)):
Max=max(max(Pe[i]), max(Pe[i]))
Min=min(min(Pe[i]), min(Pe[i]))
a=Min
b=Max
Amax= math.ceil(Max)
Amin= math.floor(Min)
print(Amax, Amin)
color = cm.get_cmap('Dark2')
norm = Normalize(vmin=Amin, vmax=Amax)
color_list = []
for i in range(len(Pe[0])):
color_list.append(color(((Pe[0,i])-Amin)/(Amax-Amin)))
id = 0
for j in range(0, n):
for k in range(n-1):
aPe.hlines(200+200*(n-j-1)+5*n, 200*(k+1)+5*n, 200*(k+2)+5*n, zorder=0, colors=color_list[id])
id += 1
for i in range(0, n):
rect = mpl.patches.Rectangle((200+200*i, 200+200*j), 10*n, 10*n, linewidth=1, edgecolor='black', facecolor='black')
aPe.add_patch(rect)
if j < n-1:
aPe.vlines(200+200*i+5*n, 200*(n-1-j)+5*n, 200*(n-j)+5*n, zorder=0, colors=color_list[id])
id += 1
cb = fig.colorbar(cm.ScalarMappable(cmap=color, norm=norm), ticks=np.arange(Amin, Amax+len(color.colors), len(color.colors)))
cb.set_label("Entry pressure (N/m$^{2}$)")
aPe.set_xlim(left = 0, right = 220*n)
aPe.set_ylim(bottom = 0, top = 220*n)
plt.axis('off')
plt.show()
The current output is
The expected output is
>Solution :
Once you have created the colorbar, add this line to set the ticks to the way shown in your pic.
cb.set_ticks(np.arange(Amin, Amax+1, (Amax-Amin)/8).astype(np.int64))
Plot


