'How to plot a figure with Chinese Characters in label
When I draw a figure with Chinese Character label in Python 3, it doesn't work correctly:
]
My code:
fig = pd.DataFrame({
'债券收益率':bond,
'债券型基金收益率':bondFunds,
'被动指数型基金收益率':indexFunds,
'总收益率':ret})
fig.plot()
plt.legend(loc=0)
plt.title('债券收益率',
fontproperties='SimHei',
fontsize='xx-large')
plt.grid(True)
plt.axis('tight')
Solution 1:[1]
You need to explicitly pass the font properties to legend
function using the prop
kwag:
from matplotlib import font_manager
fontP = font_manager.FontProperties()
fontP.set_family('SimHei')
fontP.set_size(14)
fig = pd.DataFrame({
'?????':bond,
'????????':bondFunds,
'??????????':indexFunds,
'????':ret})
fig.plot()
# Note the next lines
plt.legend(loc=0, prop=fontP)
plt.title('?????', fontproperties=fontP)
plt.grid(True)
plt.axis('tight')
Solution 2:[2]
Try this:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # Or any other Chinese characters
Solution 3:[3]
Extending on Raphael's answer, for those using macOS, the system Chinese fonts is Heiti. To check if you have it:
import matplotlib
print([f for f in matplotlib.font_manager.fontManager.ttflist if 'Heiti' in f.name])
Then, do the following:
matplotlib.rcParams['font.family'] = ['Heiti TC']
For more here a link.
Solution 4:[4]
macbook pro m1 solved by:
import matplotlib
matplotlib.rcParams['font.family'] = ['Heiti TC']
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Kartik |
Solution 2 | Raphael Hu |
Solution 3 | jialin |
Solution 4 | Liki Crus |