如何美化MATLAB和Python畫出來的圖 如何美化MATLAB和Python畫出來的圖

如何美化MATLAB和Python畫出來的圖

寫在前面

俗話有句叫做:字不如表,表不如圖,意思就是圖可以最直觀最顯然的表達我們想要表達的信息,其升降趨勢一目瞭然;表其次,能夠看到數值,但是想要看出變化趨勢卻很困難(完全不可能看出一個複雜的週期性變化);最次的是文字表達,可以用文字來表達其趨勢、週期、大小範圍,但是終究沒有具體的數值與更顯然、更直觀的圖來的好。

話雖如此,在作圖方面,一個好看的圖能夠吸引讀者的目光,甚至嘆之妙絕——“明明一樣的數據,我怎麼做不出來這麼好看的圖”;一個難看簡陋的圖擱誰都不想看第二眼,更何況從中分析出什麼數據了。

所以我這裏想要給大家分享的就是在做數模的幾年裏,以及近期在實驗室搬磚並閱讀大量文獻後的,一些對作圖上的想法。

爲了照顧到採用不同的可視化軟件的人,這篇文章將分成兩個部分,一個是MATLAB,另一個是Python。這兩個部分的差別僅在於調用函數、代碼指令的細微差別,比如說調整座標軸粗細,MATLAB用set(gca, 'linewidth', 1.1)而Python卻用ax.spines['bottom'].set_linewidth(2)這樣的差別。

具體我們畫好以後的圖,就以這個圖作爲參考。

如何畫好一個圖?

反面教材

我們首先來看兩個反面教材,這兩個反面教材是我隨便搜“MATLAB作圖”後找到的博客或PPT上面截下來的,可以理解他們本意是僅僅教授怎麼做圖,並不負責怎麼做好看。但是其不認真的態度還是讓我來做反面教材了,因爲他們竟然是“直接截圖!不是保存圖像!把MATLAB的大灰邊截下來了!!

首先對於反面教材1,誇張的線寬、耀眼的藍色線條綠色底色,明顯的夕陽紅配色。

然後反面教材2,加個網格說明別出心裁,但是字體很難看,並且截圖就截圖吧露個大灰邊,還沒把截全。

如何避免出現以上這種情況?

最主要的一步:

不要截圖!!請點左上角“Save/保存”!!這樣子出來的圖就是白色底了,而不是預覽的灰色底。

其次,我們在作圖是一定要嚴格按照以下幾點來規範自身:

  1. 線寬合適,默認的太細,最好是1.1;
  2. 字體調大,默認的太小,最好是16;
  3. 散點內部填充顏色要好看,不要刺眼,要手動調RGB值設置顏色;
  4. 座標軸邊框也太細,一定要加粗到1.1;
  5. 一定要加上橫縱座標描述;
  6. 顯示出座標軸範圍要留出空隙,不要讓圖像緊靠邊框,且上下左右空隙相等。

下面我將詳細進行描述。

對於MATLAB的作圖細節

首先我們已經有了幾組數據

x = linspace(0, 3*pi, 40);
y1 = sin(x);
y2 = 0.1*x-0.5;

直接畫出來是如下圖所示,所有顏色、線寬都是默認的。看上去也還行,但是未免也太“空蕩”、“簡陋”了,缺少設計感。

所以,下面我就直接說明怎麼修改了:

對於線條部分

加粗線條寬度到1.1,線條顏色爲黑色(切記),加上散點,散點內部填充顏色。所以加上一下代碼:

plot(x, y1, 'ok-', 'linewidth', 1.1, 'markerfacecolor', [36, 169, 225]/255)
hold on
plot(x, y2, 'ok-', 'linewidth', 1.1, 'markerfacecolor', [29, 191, 151]/255)

上面的散點內部填充顏色marker face color後面跟的值是我從博客上找的好看的顏色,網址https://www.icoa.cn/a/512.html。一般我找顏色都是這樣子找,找到特別好看的顏色然後把他們的RGB值放上去。所以三個值就分別代表red, green, blue。後面的255代表歸一化,因爲RGB最高255。

所以目前做出來的圖就是下面這樣子,不得不說,好看很多了,圖像變得更加清新、美觀。因爲粗細適中的線條與恰當的顏色最能夠抓人眼球。

但是這樣一比,座標軸就有點單調了,而且右上角的圖例好小啊,整體就顯得線條圖像與座標軸不是一個風格的,所以下面我們就需要修改座標軸配置。

修改座標軸

我們需要把座標軸加粗,字體加大,字體改成Times New Roman,讓線條不要緊靠邊框,留一些“呼吸”的餘地。

axis([0, 3*pi, -1.2 1.2])
set(gca, 'linewidth', 1.1, 'fontsize', 16, 'fontname', 'times')

然後就大功告成了!

不過你們肯定會有一個疑問,爲什麼要加大字體、加粗線條?

因爲我們在電腦上單獨看圖像與放到文章中看圖像的感覺是不一樣的,在文章中,線條太細會讓眼睛看起來很難受,無法直接抓住目光,這個圖像就成爲了背景板被忽視掉。而加粗線條就會讓整個圖像突出一些,配上好看的配色,就能夠直接吸引目光,成爲亮點。太粗的線條反而會讓人感覺墨水撒了一樣。

同樣的,字體一般來說需要和文章字體大小差不多,我選的這個參數是按照我的經驗比較萬用的。

以上就是修改一幅圖,讓其變得更加好看的步驟。

所有的代碼爲

clc, clear, close all
x = linspace(0, 3*pi, 40);
y1 = sin(x);
y2 = 0.1*x-0.5;
y3 = cos(x+pi/2);
figure
% 黑色實線, 圓圈標記, 線寬1.1, 標記內部填充顏色從網上找好看的配色
plot(x, y1, 'ok-', 'linewidth', 1.1, 'markerfacecolor', [36, 169, 225]/255)
hold on
plot(x, y2, 'ok-', 'linewidth', 1.1, 'markerfacecolor', [29, 191, 151]/255)
% 設置座標軸範圍
axis([0, 3*pi, -1.2 1.2])
% 座標軸邊框線寬1.1, 座標軸字體與大小爲Times New Roman和16
set(gca, 'linewidth', 1.1, 'fontsize', 16, 'fontname', 'times')
xlabel('Time (s)')
ylabel('Displacement (m)')
legend('sin(x)', '0.1x-0.5')

下面則是對於Python的作圖指令的介紹。

對於Python的作圖的細節

基本原則和上文中的一樣,只不過對應的操作要更麻煩一點:

from matplotlib import pyplot as plt
import numpy as np

x = np.linspace(0, 3*np.pi, 40)
y1 = np.sin(x)
y2 = 0.1*x-0.5

plt.figure(figsize=(12.5, 10))
# 線條顏色black, 線寬2, 標記大小13, 標記填充顏色從網上找16進制好看的顏色
plt.plot(x, y1, '-o', color='black', markersize=13, markerfacecolor='#44cef6', linewidth=2)
plt.plot(x, y2, '-o', color='black', markersize=13, markerfacecolor='#e29c45', linewidth=2)

# 字體設置: 字體名稱Times New Roman, 字體大小34
font_format = {'family':'Times New Roman', 'size':34}
plt.xlabel('Time (s)', font_format)
plt.ylabel('Displacement (m)', font_format)
# 設置座標軸 x範圍0~3*pi, y範圍-1.2~1.2
plt.axis([0, 3*np.pi, -1.2, 1.2])
# 橫縱座標上的字體大小與類型(不是xlabel, 是xticks)
plt.xticks(fontproperties='Times New Roman', size=34)
plt.yticks(fontproperties='Times New Roman', size=34)
# 整個圖像與展示框的相對位置
plt.subplots_adjust(left=0.19,right=0.94, bottom=0.13)
# 調整上下左右四個邊框的線寬爲2
ax=plt.gca()
ax.spines['bottom'].set_linewidth(2)
ax.spines['left'].set_linewidth(2)
ax.spines['right'].set_linewidth(2)
ax.spines['top'].set_linewidth(2)
plt.show()

做出來的效果如下所示。

總結

以上就是所有內容,作圖的美觀着實是一個很考驗審美的問題。我現在看我一年前畫的圖簡直是不要再尷尬,但是那時的我看兩年前的我也是覺得很辣雞,因爲審美在不斷地變化着。說不定一年後再看我現在的作圖風格也會覺得很難看,誰知道呢?但目前爲止這的確是一種比較好看的風格了,相對於普通人的作圖水平來說。

所以希望我的這篇文章對大家有所幫助,如果喜歡的話麻煩來個關注,點個贊,加個收藏,謝謝!

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