ncols = nrows // 2的意思? plt.subplot(nrows, ncols, i+1)這邊 i 為何要 + 1?
您好,想請問
(1) ncols = nrows // 2的意思為何 ? 為何要向下取整數 ?
(2) plt.subplot(nrows, ncols, i+1)這邊 i 為何要 + 1 ?
回答列表
-
2019/05/05 上午 03:00劉珍銘贊同數:3不贊同數:0留言數:2
1. 這邊向下取整數可能錯了,應該要無條件進位才對 ncols = math.ceil( nrows / 2 )
2. 參考上圖,第三個參數是從 1 開始,HW 裡的 for 迴圈是指定 range(num)
index 會從 0 開始,所以要 i + 1 才符合 plt.subplot 參數帶入的形式
-
2019/05/05 下午 04:33張維元 (WeiYuan)贊同數:0不贊同數:1留言數:1
(1) ncols = nrows // 2的意思為何 ? 為何要向下取整數 ?
=> 這邊應該只是要讓圖不要一直往下畫,可以分到往右畫,subplot 具體用法可以看樓上的。至於為什麼是 // 2 應該沒有什麼意思,你要取 // 4 也可以。
-
2019/05/06 下午 04:01張小馬贊同數:2不贊同數:0留言數:2
我剛好也做到這天,我認為教材的答案內容很不嚴謹。
依照填圖片的順序,如一樓回覆,先把一列從左至右填滿,再往第二列從左至右填滿的這個狀況下。我們應該先設計【ncols】,而不是先設計【nrows】。換句話說,我們應該先決定要讓圖片用幾個欄位的長相去出現,再決定依照我設計的幾個欄位,需要保留幾個列位給所有的圖片。
因此這段我的寫法是:
# 先設計ncols才對,不管圖片有幾張,反正就是以2欄的方式呈現
# 這邊要2要3要多少,自己再依照版面去調整就好
ncols = 2
# 既然圖片已經被我拆成了2欄,那只需要【圖片總數/2】的列位就夠了
# 擔心剛好不能被2整除,所以要無條件進入,這樣的列位數才夠。
# 例如若你設計 ncols = 3,那你需要ceil(4/3)=2個列位(總共2*3=6個位置)才能裝得下4張圖片。
nrows = math.ceil( len(data) / ncols)
作業至今發現教材答案很常有這問題,除了沒有說清楚參數的目的,甚至也沒有提為什麼要這樣設計。依照這題只有4個圖片的狀況下,教材答案卻訂了8個位置出來,坦白說,真的很令人困惑。