python用matplotlib作圖的時候,中文標註無法正常顯示,亂碼為小方框的解決辦法
阿新 • • 發佈:2018-11-06
關於python引用matplotlib作圖的時候,中文標註無法正常顯示,亂碼為小方框
通常在作圖的時候,沒有設定字型以為是預設字型,但是這裡會追蹤不到字型的位置,執行下面的程式碼,出現的圖會出現不能顯示中文的異常
from matplotlib import pyplot as plt import random x = range(0,120) y = [random.randint(20,35) for i in range(120)] plt.figure(figsize=(20,8), dpi=80) plt.plot(x,y) x_label =list(x) x_label_show = ["10點{}分".format(i) for i in range(60)] x_label_show += ["11點{}分".format(i-60) for i in range(60,120)] plt.xticks(x_label[::3],x_label_show[::3],rotation=-90) # rotation旋轉的度數 plt.show()
影象的結果:
解決辦法:
程式碼中新增如下資訊
# windows 和linux設定字型的方法 # import matplotlib # font = {'family' : 'MicroSoft YaHei', # 'weight' : 'bold', # 'size' : 10} # matplotlib.rc("font", **font) # 通用字型設定 from matplotlib import font_manager # my_font = font_manager.FontProperties(fname="字型的本地完整路徑") my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc") ...... plt.xticks(......, fontproperties=my_font) # rotation旋轉的度數
例項完整程式碼如下:
from matplotlib import pyplot as plt import random # windows 和linux設定字型的方法 # import matplotlib # font = {'family' : 'MicroSoft YaHei', # 'weight' : 'bold', # 'size' : 10} # matplotlib.rc("font", **font) # 通用字型設定 from matplotlib import font_manager my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc") x = range(0,120) y = [random.randint(20,35) for i in range(120)] plt.figure(figsize=(20,8), dpi=80) plt.plot(x,y) x_label =list(x) x_label_show = ["10點{}分".format(i) for i in range(60)] x_label_show += ["11點{}分".format(i-60) for i in range(60,120)] plt.xticks(x_label[::3],x_label_show[::3],rotation=-90, fontproperties=my_font) # rotation旋轉的度數 plt.show()
例項效果:
另外,遇到圖例p l t.legend()
要展示中文的時候,此時得換用方法plt.legend(prop=my_font)
例項:
# 統計從11歲到30歲每年交的男(女)朋友數量
from matplotlib import pyplot as plt
from matplotlib import font_manager
y_0 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_1 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
x=range(11,31)
my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc")
# 設定圖形大小
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y_0,label="自己")
plt.plot(x,y_1,label="同桌")
# 設定x軸刻度
xtick_labels = ["{}歲".format(i) for i in x]
plt.xticks(x,xtick_labels,fontproperties=my_font)
plt.yticks(range(0,9))
# 繪製網格
plt.grid(alpha=0.2) # alpha 透明度
# 新增圖例
plt.legend(prop=my_font, loc="upper right") # prop:設定字型; loc:設定展示的位置,upper left 左對齊,upper right 右對齊
# 展示
plt.show()
搞定~