我正在繪制一個Pe形狀為 的陣列(220,220)。使用紅色圓圈突出顯示的顏色條的某些刻度不匹配。基本上,我希望顏色條上的每種顏色都有一個明確定義的最終值。我該如何做到這一點?
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=11
arMax=[]
arMin=[]
N=2*n*(n-1)
J = np.array([[]])
Pe=np.array([[397.9245283 , 431.37280501, 423.07492578, 448.72320111,
415.76282885, 403.98056072, 406.32617702, 439.50026536,
398.74902582, 402.08146852, 416.21242203, 427.5394595 ,
427.06507633, 413.08553581, 412.20075077, 437.50197698,
437.75076871, 398.33635041, 401.03411236, 436.50963158,
414.19687294, 439.2494816 , 413.7516213 , 401.87155987,
430.88988181, 422.61039289, 420.07358693, 411.75977806,
448.46178462, 403.76866504, 425.41299332, 436.26224822,
402.92330055, 399.36964466, 437.00524093, 430.16752099,
414.86655013, 426.59174471, 401.66187026, 418.70266927,
438.74877169, 416.66298861, 409.56899181, 408.04926082,
399.9921984 , 447.93986435, 429.20813236, 432.34190614,
426.8282793 , 407.83307657, 417.34067053, 417.11453175,
429.68729115, 438.49884457, 423.54048103, 421.91550311,
441.01100224, 402.71251224, 427.77704651, 441.26380205,
444.06384971, 406.9706254 , 442.78670822, 431.13120817,
429.92727196, 435.27551245, 444.3201626 , 447.6793595 ,
404.40501999, 413.30732589, 407.40139454, 404.83037214,
408.69919091, 445.3483799 , 428.49139455, 434.53838488,
434.04835195, 427.30213625, 440.75849192, 412.64266901,
406.11181421, 412.42159151, 430.64882546, 400.20014785,
433.07159431, 405.68376641, 411.10008524, 437.25346787,
419.61561798, 428.2530136 , 439.75133565, 440.25433778,
405.25662001, 433.80374971, 422.14687898, 432.8280914 ,
442.02394342, 424.70886414, 423.77364309, 403.34553985,
425.64822218, 424.4746721 , 405.04338393, 404.19267892,
408.9162946 , 421.45351141, 398.54258129, 443.55211004,
447.41915748, 410.22377598, 434.29323018, 442.27790619,
445.60617823, 446.6403631 , 432.09922288, 420.53255663,
436.01514511, 412.86398365, 440.00269296, 420.30294648,
436.75729566, 418.47505247, 400.61669609, 425.17802432,
411.53964533, 444.57677156, 438.24920203, 408.48231763,
406.75558225, 423.3075754 , 419.38700777, 415.31420594,
417.56705465, 428.73004103, 418.24768301, 441.77027214,
443.29668225, 407.61712126, 414.41985832, 417.7936845 ,
406.54076625, 424.007062 , 403.13430964, 413.9741274 ,
401.45239937, 432.58486216, 415.09025734, 411.31974785,
446.12267131, 398.13033286, 415.53839631, 400.40831363,
444.83367708, 422.84253175, 422.37850877, 426.11946115,
409.35119469, 445.86427519, 416.43758344, 429.4475781 ,
428.01489773, 430.40803867, 440.5062706 , 402.29159657,
446.89965981, 408.26567439, 410.44250286, 415.98750396,
443.04154848, 416.88863791, 421.68438072, 448.20067254,
398.95568434, 399.78446494, 399.16255717, 405.47008071,
433.559423 , 428.96895348, 419.84447757, 411.98014641,
405.89767746, 409.78702083, 410.66146312, 431.61467276,
434.78381651, 410.88065712, 414.64308392, 426.35547214,
442.53216095, 441.51689185, 410.00528209, 418.02056049,
409.13362907, 419.15864652, 447.15925776, 420.76241778,
400.82529555, 431.8568119 , 421.22289476, 420.99253035,
433.31537135, 402.50194436, 446.3813671 , 438.99898387,
418.93053382, 445.09087969, 407.18589604, 443.80783236,
435.76832176, 435.52177769, 399.57694714, 425.88371131,
424.94331474, 404.61758428, 437.99984357, 403.55699154,
413.52935426, 435.02952554, 424.2407382 , 397.9245283 ]])
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]))
arMax.append(Max)
Max=np.array(arMax)
arMin.append(Min)
Min=np.array(arMin)
a=min(Min)
b=max(Max)
print("a =",a)
print("b =",b)
Amax= math.ceil(b)
Amin= math.floor(a)
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, linewidth=5.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.0, 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,linewidth=5.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_ticks(np.arange(Amin, Amax 1, (Amax-Amin)/8).astype(np.int64))
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.title("Time = 5",fontsize=20)
plt.show()

uj5u.com熱心網友回復:
目前,您首先設定ticks:
ticsk=np.arange(Amin, Amax len(color.colors), len(color.colors))
# array([397, 405, 413, 421, 429, 437, 445, 453])
這仍然會產生更嚴重的不匹配(請注意,該陣列具有 length 8,而您正在尋找 9 個刻度標簽,如下面的陣列中所示)。
但是你用以下內容覆寫它:
cb.set_ticks(np.arange(Amin, Amax 1, (Amax-Amin)/8).astype(np.int64))
# array([397, 403, 410, 416, 423, 429, 436, 442, 449], dtype=int64)
正如@r-beginners 的評論中所提到的,在這里您通過將浮點數轉換為整數來引入不匹配。原來的花車是:
np.arange(Amin, Amax 1, (Amax-Amin)/8)
array([397. , 403.5, 410. , 416.5, 423. , 429.5, 436. , 442.5, 449. ])
您想要做的是首先將實際浮點值傳遞給刻度,然后簡單地調整它們的格式。例如:
tks = np.arange(Amin, Amax 1, (Amax-Amin)/8)
cb = fig.colorbar(cm.ScalarMappable(cmap=color, norm=norm), ticks=tks)
cb.set_ticklabels(['{:.0f}'.format(t) for t in tks])
# or: cb.set_ticklabels([str(int(t)) for t in tks])
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/507379.html
標籤:Python 麻木的 matplotlib
上一篇:如何用指定值替換資料框中的負值?
下一篇:在Python中跳過某些檔案夾
