如何繪制符合打印標準的圖形
論文中大部分的繪圖都需要考慮打印的質量和尺寸,前面的博客中說到如何修改圖片的尺寸以符合打印的質量,這里分享一下有關繪圖的時候的考慮,以達到快速繪圖的目的
問題是什么
在面向打印的論文制作中,一般時A4的紙張,圖片均可以通過修改尺寸達到相應的尺寸要求,但是與此同時會有兩個方面的問題:
- 圖的分辨率會變。就是那個dpi會發生改變
- 圖上的文字和標注可能變得過大或者過小
解決思路
面對這樣的不確定性,需要在繪圖的時候就考慮3個問題:
- 一個是圖片的尺寸,也就是它的長度和寬度;
- 另一個是圖片的分辨率,也就是它的dpi;
- 還有就是繪圖中的文字的大小
以matplotlib繪圖工具為例
1 import matplotlib.pyplot as plt 2 import matplotlib 3 matplotlib.rc('font', family='simhei') 4 5 pre = pd.DataFrame(Rain_list,columns=['time','pre']) 6 pre.index = pre['time'] 7 pre =pre.sort_index() 8 pre.columns = ['time', 'A處降雨'] 9 pre['A處降雨'].plot(fontsize = 14); 10 11 12 timeStart,timeEnd = datetime(2012,7,21,6),datetime(2012,7,23,20) 13 tz_utc_8 = timezone(timedelta(hours=8)) # 創建時區UTC+8:00 14 timeStart = timeStart.replace(tzinfo=tz_utc_8) # 強制設置為UTC+8:00 15 timeEnd = timeEnd.replace(tzinfo=tz_utc_8) # 強制設置為UTC+8:00 16 # rain_end = rain_end.replace(tzinfo=tz_utc_8) # 強制設置為UTC+8:00 17 18 19 plt.axvspan(big_rain_start, big_rain_end, facecolor='0.5', alpha=0.5) 20 21 plt.axvspan(big_rain_end, rain_end, facecolor='#2ca02c', alpha=0.5); 22 23 plt.xlim(timeStart,timeEnd ); 24 plt.ylim(0,20); 25 plt.xlabel("時間",fontsize = 16) 26 plt.ylabel("降雨(mm/h)",fontsize = 16); 27 plt.legend(loc='upper right',fontsize = 16) 28 plt.tight_layout() 29 # plt.savefig("C:\\Users\\theki\\Documents\\我的堅果云\\myPHDThesis\\figs\\jiangyuliang_v2.png",dpi = 300)
上面的代碼并不完善,不過它的字體的設置、圖的大小,分辨率都是我在論文中的設置。字體和字體大小可以很容易的看到,但是圖片大小使用的是默認的大小,dpi設置為300。
通過下面輸出圖片尺寸
print(plt.rcParams.get('figure.figsize'))
得到
[6.0,4.0],注意matplotlib的圖片尺寸使用的是英寸,我們國家通常使用厘米,我們可以使用下面的連接轉換以下,得到是【15.24,10.16cm】
https://convertlive.com/zh/u/%E8%BD%AC%E6%8D%A2/%E8%8B%B1%E5%AF%B8/%E8%87%AA/%E5%8E%98%E7%B1%B3
那這個打印出來是多大呢,我在gmip里面打開了,并打開打印(快捷鍵ctrl P),

我們可以看到matplotlib所得到的默認大小在設置成300dpi的時候,實際上是差不多A4紙設置雙欄打印的時候,能夠跨越兩個蘭的尺寸大小。
值得注意的是,我們在使用jupyter notebook的時候,所顯示的這個圖片的大小其實并沒有那么大的?這是為什么呢?可能默認的dpi比較小,這樣在屏幕上平鋪像素的時候它就比較小;為了驗證這個想法,我在沒有設置dpi的時候保存了圖片,然后在gmip中打開

我們發現這個圖片的尺寸和前面的是一樣的,但是dpi變成了72左右。為什么會這樣呢,這是因為屏幕顯示和打印存在一些區別。
我們設置的尺寸一定的情況下,在電腦屏幕直接查看,在不縮放的情況下,dpi越大,圖片顯示越大


總之在沒有設置打印預覽的時候無法根據實際看到它們的打印大小,其實最有效的方法有兩個:
1. 一個是有一個標尺和參照告訴我們我們的尺寸是怎么樣的
2. 另一個是直接設置尺寸(matplotlib使用的就是這樣的方式)
使用drawio的情況
值得注意的是在使用專業繪圖工具如visio或者drawio的時候是一個標尺和參照告訴來我們打印的尺寸是怎么樣的的

我們可以看到這類的繪圖都是會顯示一個頁面來告訴我們打印尺寸的標尺是什么樣的,這里可以縮放這個視圖。打印的那個A4紙樣張底圖和所繪制的圖形一起縮放。
有哪些待解決的問題
1. 那matplotlib有打印預覽么?如何設置?
思路可以是,保存為pdf,然后使用打印預覽如圖

當然也可以保存圖片使用打印預覽。
還有就是pdf格式相對于png來說文件小很多,但是對于word和ppt來說并不能直接支持pdf圖形顯示。
但是pdf對于latex書寫論文來說有很多優勢,因為它是矢量圖形縮放不會失真,很清晰。參考下面的鏈接
https://ercanozturk.org/2017/12/16/python-matplotlib-plots-in-latex/
不過還有一個比較重要的問題,如何設置字體大小才比較合適呢?如何保證論文圖中的字體大小比較一致?如何保證整個圖的繪圖圖的風格一致呢?
不過回過頭來想一想,圖中的字體真的重要么?????!!
看了很多論文包括nature的一些論文,答案是即使是nature上的論文其字體和字體大小也不一定一致的。
此外發現越是質量比較好的,它們的圖中的字體越趨向于一致,特別是在一個繪圖中,或者出現在一個頁面的繪圖中。對于nature上的論文是一致的。自己在寫論文的時候可以盡量保持一致,比如要是使用matplotlib繪制的圖,所有的都應該保持一致。
打開可能是,對于一個研究和論文來說,在做實驗時的時候最好先保存相關的數據然后再繪圖;此外還應該再一個單獨的文件里面繪制所有的圖?

浙公網安備 33010602011771號