在matplotlib.pyplot
我经常需要更改给定axes
中4个不同文字元素的字体大小:
这就是我目前的做法:
import matplotlib.pyplot as plt
plt.plot([1,2,3], label = 'Whatever')
plt.xlabel('xaxis', fontsize = 16)
plt.ylabel('yaxis', fontsize = 20)
plt.legend(fontsize = 18)
plt.xticks(fontsize = 20)
plt.yticks(fontsize = 20)
plt.title('PLOT', fontsize = 20)
正如您所看到的那样,代码行数相当多,特别是考虑到通常我需要将这些代码都设置为相同的字体大小(尽管这并未反映在此示例中)。这些行也可以分散在我的脚本中,如果我需要重置字体,很难找到。我倾向于将格式元素(如网格,字体,颜色和图例)视为与实际数据处理/绘图分开。因此,我有两个问题:
答案 0 :(得分:2)
实际上有多种方法可以在matplotlib中设置字体大小。最方便的是在全局matplotlib font.size
中的matplotlibrc /中设置全局rcParams
参数,通常为a nice way to set your layout because it will then be the same for all plots。这将改变所有元素'字体大小(尽管只是在更改后创建的字体大小)。如果未明确指定,则相对于此字体大小设置所有字体大小。据我所知,只有标题会更大,而其余的元素实际上将具有设置的字体大小。这将轻松方便地解决您的第一个问题。 (这个答案的底部显示了一个稍微不太方便解决问题的方法。)
默认值:
import matplotlib as mpl
import matplotlib.pyplot as plt
plt.plot([1,2,3], label = 'Whatever')
plt.xlabel('xaxis')
plt.ylabel('yaxis')
plt.legend()
plt.xticks()
plt.yticks()
plt.title('PLOT')
plt.show()
给出:
更改字体大小给出:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.size"] = 18
plt.plot([1,2,3], label = 'Whatever')
plt.xlabel('xaxis')
plt.ylabel('yaxis')
plt.legend()
plt.xticks()
plt.yticks()
plt.title('PLOT')
plt.gcf().set_tight_layout(True) # To prevent the xlabel being cut off
plt.show()
然后给出:
绘图后更改尺寸不起作用:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.size"] = 7
plt.plot([1,2,3], label = 'Whatever')
plt.xlabel('xaxis')
plt.ylabel('yaxis')
plt.legend()
plt.xticks()
plt.yticks()
plt.title('PLOT')
mpl.rcParams["font.size"] = 18
plt.show()
给出:
在绘制悲伤后更改字体大小不太方便。你可以做到这一点。这个answer显示了一种相当不错的方式:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.size"] = 7
plt.plot([1,2,3], label = 'Whatever')
plt.xlabel('xaxis')
plt.ylabel('yaxis')
plt.legend()
plt.xticks()
plt.yticks()
plt.title('PLOT')
ax = plt.gca()
ax.title.set_fontsize(20)
for item in ([ax.xaxis.label, ax.yaxis.label] +
ax.get_xticklabels() + ax.get_yticklabels() +
ax.get_legend().get_texts()):
item.set_fontsize(18)
plt.gcf().set_tight_layout(True)
plt.show()
给出:
如果你想让它在一行中,你可以定义一个传递轴对象的函数,类似于:
def changeFontSize(ax, size):
ax.title.set_fontsize(size)
for item in ([ax.xaxis.label, ax.yaxis.label] +
ax.get_xticklabels() + ax.get_yticklabels() +
ax.get_legend().get_texts()):
item.set_fontsize(size)
changeFontSize(plt.gca())