Matplotlib本機和服務器的使用區別說明
測試代碼:
# coding=utf-8
import numpy as np
from numpy.linalg import cholesky
import matplotlib.pyplot as plt
sampleNo = 1000;
# 一維正態分佈
mu = 3
sigma = 0.1
np.random.seed(0)
s = np.random.normal(mu, sigma, sampleNo )
#s = np.random.rand(1, sampleNo )
plt.hist(s, 10, normed=True) #####bins=10
plt.savefig('save.jpg')
plt.show()
問題根源:
以上代碼在本機上測試是沒有問題的,但是在服務器遠程進行繪製的話就會出現問題,而問題的根源在於:
matplotlib的默認backend是TkAgg,而FltAgg、GTK、GTKCairo、TkAgg、Wx和WxAgg這幾個backend都要求有GUI圖形界面,所以在ssh操作的時候會報錯。
解決方法:
在導入matplotlib的時候指定不需要GUI的backend(Agg、Cairo、PS、PDF和SVG),如:
import matplotlib.pyplot as plt
plt.switch_backend('agg')
服務器測試代碼:
# coding=utf-8
import numpy as np
from numpy.linalg import cholesky
import matplotlib.pyplot as plt
plt.switch_backend('agg')
sampleNo = 1000;
# 一維正態分佈
mu = 3
sigma = 0.1
np.random.seed(0)
s = np.random.normal(mu, sigma, sampleNo )
#s = np.random.rand(1, sampleNo )
plt.hist(s, 10, normed=True) #####bins=10
plt.savefig('save.jpg')