Home > Back-end >  Reducing the number of ticks in the colorbar using Matplotlib
Reducing the number of ticks in the colorbar using Matplotlib

Time:09-06

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

enter image description here

The expected output is

enter image description here

CodePudding user response:

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

enter image description here

  • Related