如何確保顏色條具有每個色帶的所有最終值?例如,在當前輸出中,灰帶沒有結束值。我提出了灰帶具有最終值的預期輸出,即5.4035。更一般地說,我想要一個啟用所有色帶值的命令。
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
fig,ax = plt.subplots(1)
n=3
N=2*n*(n-1)
p=np.array([[0.0000535 , 0.000051590914956234785,
0.00005031819159372464 , 0.00005286363831874494 ,
0.000052227276637489866, 0.00004904546823121452 ,
0.000049681829912469585, 0.00004650002150619425 ,
0.00004777274486870438 , 0.00004713638318744931 ,
0.00005095455327497972 , 0.000054035 ]])
p=p.reshape(12,1)
P = np.array(p)
P=P.reshape(len(P),1)
Max=max(P)
Min=min(P)
a=Min
b=Max
Amax= b*math.ceil(Max)
print("Amax =",Amax)
Amin= a*math.floor(Min/a)
print("Amin =",Amin)
color = cm.get_cmap('Dark2')
norm = Normalize(vmin=Amin, vmax=Amax)
color_list = []
for i in range(len(P)):
color_list.append(color((P[i]-Amin)/(Amax-Amin)))
#color_list.append(color(((P[0,i])-Amin)/(Amax-Amin)))
id = 0
for j in range(0, n):
for k in range(n-1):
ax.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')
ax.add_patch(rect)
if j < n-1:
ax.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))
cb.set_ticks(np.arange(Amin, Amax, (Amax-Amin)/8).astype(float))
cb.set_label("Radius (m)")
ax.set_xlim(left = 0, right = 220*n)
ax.set_ylim(bottom = 0, top = 220*n)
plt.axis('off')
plt.show()
當前輸出為

預期的輸出是

uj5u.com熱心網友回復:
由于您想添加最后一個數字 (5.4e-05),您可以將 Amax 設定為比當前數字略高一點,但保持刻度數為 8,它會起作用。如果你更換set_ticks()這樣的
cb.set_ticks(np.arange(Amin, Amax 0.1e-05, (Amax-Amin)/8).astype(float))
陰謀

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/505106.html
標籤:Python 麻木的 matplotlib
