【R語言】坐標刻度視覺錯位處理方法
????????最近在使用ggplot2畫圖時,發(fā)現(xiàn)如果將坐標軸設(shè)置為無冗余量(expand=c(0,0)),即圖框與坐標起始截止一致,在預(yù)覽和導(dǎo)出的圖像都會出現(xiàn)坐標軸起始和截止刻度略視覺錯位的情況,這種情況并不是RStudio導(dǎo)致的,因為用自帶的R.exe和Rgui.exe繪制出的圖仍然如此(圖1,圖2所示),這種錯位在使用封閉的panel時(即四邊均框住數(shù)據(jù)點)尤為明顯。但是,python的matplotlib畫圖并導(dǎo)出(無論是spyder還是jupyterlab),則不會出現(xiàn)這種情況。
(注:R語言的圖區(qū)分為plot,對應(yīng)Excel繪圖的圖表區(qū),plot的框線即為框住整個圖像的外框線,和panel,對應(yīng)Excel繪圖的繪圖區(qū),即兩個坐標軸構(gòu)成的矩形區(qū)域)


????
????????而這種錯位實際不是真正錯位,而是在R語言成圖時,刻度線定位的起始點是坐標軸的起/終點,再加上刻度線的寬度,造成了這種視覺錯位的情況。為盡量解決這種錯位,摸索了以下幾種方法:
????????1. 導(dǎo)出矢量圖后放入矢量圖編輯軟件(如CorelDraw、Adobe Illustrator等)手動調(diào)整,好處是完美主義者無需糾結(jié)R中的圖像,只需要后期逐個修改。缺點就是如果繪制了大量圖像,再加上萬一后續(xù)對繪制的圖片進行數(shù)據(jù)的改動(指增加或刪減擬合線等圖形元素,篡改數(shù)據(jù)是不對的喲~),那么也需要重新修改坐標軸,工程量會很大。
????????2. 不使用這種繪圖風(fēng)格,轉(zhuǎn)為默認有冗余量的坐標軸,或者選擇非封閉的panel(非封閉的圖框視覺上的錯位感會少一些),例如theme_classic(),亦或者將刻度線轉(zhuǎn)為全部向內(nèi)(也會降低這種錯位感,但仍然存在,如圖3所示)

????????3.通過少量放縮坐標軸起止,將這種視覺錯位抹平),好處是極大降低了視覺上的錯位(圖4),但缺點也很明顯:我個人猜測是R語言底層的緣故,導(dǎo)致需要協(xié)調(diào)調(diào)整橫縱坐標的起止才可以達成起止刻度與坐標軸起止重合這一目的,也就是說,當調(diào)整完終點重合后,已調(diào)整為重合的起點可能會再次略微不重合。因此,需要不斷多次調(diào)整坐標軸起止值并導(dǎo)出圖片放大查看。

????????
????????圖4中的x軸起始為-0.0006,這一值與x軸總范圍(0-0.5)并無任何比例關(guān)系。首次調(diào)整為-0.05時便視覺無錯位,但在調(diào)整完x軸截止的刻度線無錯位后,起始刻度線再次不重合,因此不斷調(diào)整坐標軸放縮的值才達到了刻度線與坐標軸和panel的重合。對y軸同理。以下是調(diào)整后的代碼: