matplotlib中的subplot 練習

今天用到了matplotlib中的subplot,本來看起來很簡單的運用,卻也不怎麼順利。

用nodes的數量和概率p產生有向圖,我希望自己的結果中能夠呈現同一概率,不同nodes的對比,以及同樣數量的nodes,不同概率的對比。

遇到的問題如下:

1.怎麼通過循環產生子圖?

2.子圖的標題和座標軸怎麼設置?

3.怎麼設置,使子圖的座標使一致的?

4.圖的大小怎麼設置?


程序源代碼

https://github.com/gt11799/graph_ge_by_probability

subplot(ang), ang是個三位數(當然也可以不是)第一位是行數,第二位是列數,第三位(或者三四位)則是第幾個子圖。

比如

subplot(245)
就表示子圖分成2行4列,而現在圖繪在第5個位置(從1開始)。subplot賦給變量後,該變量也繼承了方法,於是就可以區分開各個子圖了。

 plot = pyplot.subplot(254)
 plot.loglog(keys, values, 'o')
 plot.set_title('p:%s n:%s' %(p/10.0, N))
注意subplot的方法和plot的方法不一樣,都是set_,比如設置x軸就是set_xlable(),但是因爲圖太過於擁擠,我後來給去掉了。

把subplot(ang)的ang看作是一個整數,然後每次for循環自加就可以繪出一幅幅子圖了。

    arrange = 250
    for p in range(1, 10, 2):
        arrange += 1
        nor_distri = normalize_distri(graphWithProbability(p/10.0, N))  #generate the graph
        nor_distri.pop(0, None)
        keys = nor_distri.keys()
        values = nor_distri.values()
        plot = pyplot.subplot(arrange)
        plot.loglog(keys, values, 'o')
        plot.set_title('p:%s n:%s' %(p/10.0, N))
現在如果運行程序,就可以看到圖像了。但是仍然有不完美的現象。y軸的刻度起始終止並不一致,這在一定程度上限制了對比的效果。

subplot有get_ylim()方法可以得到子圖的座標軸的起始終止,然後用set_ylim()方法把其他的子圖的座標軸跟這個統一。如果這個程序要用這個方法,那麼就要把第一個子圖拿到循環外,或者需要給每一次循環的子圖對象命名成不同的變量。都太麻煩,我直接觀察了圖像,然後直接設置成固定的座標軸。

plot.set_ylim(0.001, 0.1)
(上面的plot都是subplot的實例)

然後又發現圖不夠大,發現figure()方法可以解決。

pyplot.figure(figsize=(18,7), dpi=80)
figure的大小就變成了18*7個區域,而每個區域的dpi是80。figure還有很多的特性,比如前景背景顏色等等。

最後就是要添加圖的標題了。注意是suptitle(),如果用tite()會被覆蓋的。

pyplot.suptitle('Distribution of in-degree of the graph implemented by probability')
總結起來,整個繪圖的程序就是這樣的:

pyplot.figure(figsize=(18,7))
pyplot.suptitle('Distribution of in-degree of the graph implemented by probability')
arrange = 250 # for subplot
for p in range(1, 10, 2):
        arrange += 1
        nor_distri = normalize_distri(graphWithProbability(p/10.0, N))
        nor_distri.pop(0, None)
        keys = nor_distri.keys()
        values = nor_distri.values()
        plot = pyplot.subplot(arrange)
        plot.loglog(keys, values, 'o')
        plot.set_title('p:%s n:%s' %(p/10.0, N))
        plot.set_ylim(0.001, 0.1)

生成的圖大概是這個樣子:



————————————

github主頁:https://github.com/gt11799 

E-mail:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章