1. 程式人生 > >python用matplotlib作圖的時候,中文標註無法正常顯示,亂碼為小方框的解決辦法

python用matplotlib作圖的時候,中文標註無法正常顯示,亂碼為小方框的解決辦法

關於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()

在這裡插入圖片描述
搞定~