我需要使用Matplotlib绘制带有中文刻度标签的地图。但是结果显示不完整的刻度标签如下。我不知道为什么会这样。我试图更改其他中文字体,但不起作用。如何解决?
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['STZhongsong']
mpl.rcParams['axes.unicode_minus'] = True
def heatmap(data, row_labels, col_labels, ax=None,
cbar_kw={}, cbarlabel="", **kwargs):
if not ax:
ax = plt.gca()
im = ax.imshow(data, **kwargs)
cbar = ax.figure.colorbar(im, ax=ax, **cbar_kw)
cbar.ax.set_ylabel(cbarlabel, rotation=-90, va="bottom")
ax.set_xticks(np.arange(data.shape[1]))
ax.set_yticks(np.arange(data.shape[0]))
ax.set_xticklabels(col_labels)
ax.set_yticklabels(row_labels)
ax.tick_params(top=True, bottom=False,
labeltop=True, labelbottom=False)
plt.setp(ax.get_xticklabels(), rotation=-20, ha="right",
rotation_mode="anchor")
for edge, spine in ax.spines.items():
spine.set_visible(False)
ax.set_xticks(np.arange(data.shape[1]+1)-.5, minor=True)
ax.set_yticks(np.arange(data.shape[0]+1)-.5, minor=True)
ax.grid(which="minor", color="w", linestyle='-', linewidth=3)
ax.tick_params(which="minor", bottom=False, left=False)
return im, cbar
if __name__ == "__main__":
x,y = list("你这是干什么啦?"),list("你要吃什么?")
s = np.random.random([len(x), len(y)])
fig, ax = plt.subplots()
im, cbar = heatmap(s, x, y, ax=ax,
cmap="YlGn", cbarlabel="attention scores")
fig.tight_layout()
plt.savefig("test", dpi=300, bbox_inches = 'tight')
plt.show()
答案 0 :(得分:0)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as mfm
import matplotlib.pyplot as plt
def heatmap(data, row_labels, col_labels, ax=None,
cbar_kw={}, cbarlabel="", **kwargs):
if not ax:
ax = plt.gca()
im = ax.imshow(data, **kwargs)
cbar = ax.figure.colorbar(im, ax=ax, **cbar_kw)
cbar.ax.set_ylabel(cbarlabel, rotation=-90, va="bottom")
ax.set_xticks(np.arange(data.shape[1]))
ax.set_yticks(np.arange(data.shape[0]))
font_path = "/Downloads/ZCOOLXiaoWei-Regular.ttf"
prop = mfm.FontProperties(fname=font_path)
ax.set_xticklabels(col_labels,fontproperties=prop,fontsize=50)
ax.set_yticklabels(row_labels,fontproperties=prop,fontsize=50)
ax.tick_params(top=True, bottom=False,
labeltop=True, labelbottom=False)
plt.setp(ax.get_xticklabels(), rotation=-20, ha="right",
rotation_mode="anchor")
for edge, spine in ax.spines.items():
spine.set_visible(False)
ax.set_xticks(np.arange(data.shape[1]+1)-.5, minor=True)
ax.set_yticks(np.arange(data.shape[0]+1)-.5, minor=True)
ax.grid(which="minor", color="w", linestyle='-', linewidth=3)
ax.tick_params(which="minor", bottom=False, left=False)
return im, cbar
if __name__ == "__main__":
x,y = list("你这是干什么啦"),list("你这是干什么啦")
s = np.random.random([len(x), len(y)])
fig, ax = plt.subplots(figsize=(10,10))
im, cbar = heatmap(s, x, y, ax=ax,
cmap="YlGn", cbarlabel="attention scores")
fig.tight_layout()
plt.savefig("test", dpi=300, bbox_inches = 'tight')
plt.show()