如何设置图形标题和轴标签字体大小?

我在Matplotlib中创建了一个这样的图形:

from matplotlib import pyplot as plt
fig = plt.figure()plt.plot(data)fig.suptitle('test title')plt.xlabel('xlabel')plt.ylabel('ylabel')fig.savefig('test.jpg')

我想指定图形标题和轴标签的字体大小。我需要这三个都是不同的字体大小,所以设置全局字体大小(mpl.rcParams['font.size']=x)不是我想要的。如何分别设置图形标题和轴标签的字体大小?

2154320 次浏览

处理labeltitle等文本的函数接受与matplotlib.text.Text相同的参数。对于字体大小,您可以使用size/fontsize

from matplotlib import pyplot as plt
fig = plt.figure()plt.plot(data)fig.suptitle('test title', fontsize=20)plt.xlabel('xlabel', fontsize=18)plt.ylabel('ylabel', fontsize=16)fig.savefig('test.jpg')

对于全局设置titlelabel大小,mpl.rcParams包含axes.titlesizeaxes.labelsize。(来自页面):

axes.titlesize      : large   # fontsize of the axes titleaxes.labelsize      : medium  # fontsize of the x any y labels

(据我所知,没有办法单独设置xy标签大小。

我看到axes.titlesize不会影响suptitle。我猜,你需要手动设置。

您也可以通过rcParams字典全局执行此操作:

import matplotlib.pylab as pylabparams = {'legend.fontsize': 'x-large','figure.figsize': (15, 5),'axes.labelsize': 'x-large','axes.titlesize':'x-large','xtick.labelsize':'x-large','ytick.labelsize':'x-large'}pylab.rcParams.update(params)

如果你更习惯使用ax对象来绘图,你可能会发现ax.xaxis.label.set_size()更容易记住,或者至少在ipython终端中使用tab更容易找到。之后似乎需要重新绘制操作才能看到效果。例如:

import matplotlib.pyplot as plt
# set up a plot with dummy datafig, ax = plt.subplots()x = [0, 1, 2]y = [0, 3, 9]ax.plot(x,y)
# title and labels, setting initial sizesfig.suptitle('test title', fontsize=12)ax.set_xlabel('xlabel', fontsize=10)ax.set_ylabel('ylabel', fontsize='medium')   # relative to plt.rcParams['font.size']
# setting label sizes after creationax.xaxis.label.set_size(20)plt.draw()

我不知道有什么类似的方法可以在创建后设置超标题大小。

为了只修改标题的字体(而不是轴的字体),我使用了这个:

import matplotlib.pyplot as pltfig = plt.Figure()ax = fig.add_subplot(111)ax.set_title('My Title', fontdict={'fontsize': 8, 'fontweight': 'medium'})

字体接受来自matplotlib.text.文本的所有kwargs。

更改字体大小的另一种解决方案是更改填充。当Python保存您的PNG时,您可以使用打开的对话框更改布局。轴之间的行间距,如果您愿意,可以在此阶段更改填充。

right_ax放在set_ylabel()之前

ax.right_ax.set_ylabel('AB scale')

根据的官方指南,不再推荐使用pylab。应直接使用matplotlib.pyplot

通过rcParams全局设置字体大小应该通过

import matplotlib.pyplot as pltplt.rcParams['axes.labelsize'] = 16plt.rcParams['axes.titlesize'] = 16
# or
params = {'axes.labelsize': 16,'axes.titlesize': 16}plt.rcParams.update(params)
# or
import matplotlib as mplmpl.rc('axes', labelsize=16, titlesize=16)
# or
axes = {'labelsize': 16,'titlesize': 16}mpl.rc('axes', **axes)

可以使用以下命令恢复默认值

plt.rcParams.update(plt.rcParamsDefault)

您也可以通过在matplotlib配置目录下的stylelib目录中创建样式表来做到这一点(您可以从matplotlib.get_configdir()获取配置目录)。样式表格式是

axes.labelsize: 16axes.titlesize: 16

如果您在/path/to/mpl_configdir/stylelib/mystyle.mplstyle处有一个样式表,那么您可以通过以下方式使用它

plt.style.use('mystyle')
# or, for a single section
with plt.style.context('mystyle'):# ...

您还可以创建(或修改)共享格式的matplotLibrary c文件

axes.labelsize = 16axes.titlesize = 16

根据您修改的matplotLib文件,这些更改将仅用于当前工作目录,对于没有的所有工作目录都有matplotLib文件,或者对于没有的所有工作目录都有matplotLib文件并且没有指定其他matplotLib文件的工作目录。有关更多详细信息,请参阅自定义matplotlib页面的本节

rcParams键的完整列表可以通过plt.rcParams.keys()检索,但为了调整字体大小,您必须(斜体引自这里

  • axes.labelsize-x和y标签的字体大小
  • axes.titlesize-轴标题的字体大小
  • figure.titlesize-图标题的大小(#1)
  • xtick.labelsize-刻度标签的字体大小
  • ytick.labelsize-刻度标签的字体大小
  • legend.fontsize-传奇字体(plt.legend()fig.legend()
  • legend.title_fontsize-图例标题的字体大小,#1设置为与默认轴相同。参见这个答案的用法示例。

所有这些都接受字符串大小{'xx-small', 'x-small', 'smaller', 'small', 'medium', 'large', 'larger', 'x-large', 'xxlarge'}pt中的float。字符串大小是相对于默认字体大小定义的,默认字体大小由

  • font.size-文本的默认字体大小,以文本为单位。10 pt是标准值

此外,可以通过以下方式指定权重(尽管仅针对出现的默认值)

  • font.weight-text.Text使用的字体的默认权重。接受{100, 200, 300, 400, 500, 600, 700, 800, 900}'normal'(400)、'bold'(700)、'lighter''bolder'相对于当前重量)。

7(最佳解决方案)

 from numpy import*import matplotlib.pyplot as pltX = linspace(-pi, pi, 1000)
class Crtaj:
def nacrtaj(self,x,y):self.x=xself.y=yreturn plt.plot (x,y,"om")
def oznaci(self):return plt.xlabel("x-os"), plt.ylabel("y-os"), plt.grid(b=True)

6(稍差的解决方案)

from numpy import*M = array([[3,2,3],[1,2,6]])class AriSred(object):def __init__(self,m):self.m=m    
def srednja(self):redovi = len(M)stupci = len (M[0])lista=[]a=0suma=0while a<stupci:for i in range (0,redovi):suma=suma+ M[i,a]lista.append(suma)a=a+1suma=0b=array(lista)b=b/redovireturn b


OBJ = AriSred(M)sr = OBJ.srednja()

其他人提供了如何更改标题大小的答案,但对于轴刻度标签大小,您也可以使用set_tick_params方法。

例如,要使x轴刻度标签大小变小:

ax.xaxis.set_tick_params(labelsize='small')

或者,要使y轴刻度标签变大:

ax.yaxis.set_tick_params(labelsize='large')

您还可以将labelsize输入为浮点数,或以下任何字符串选项:'xx-小'、'x-小'、'小'、'中'、'大'、'x-大'或'xx-大'。

图书馆

将numpy导入为np

进口matplotlib.pyplot为plt

创建数据集

高度=[3,12,5,18,45]

柱=('A','B','C','D','E')

x_pos=np.arange(len(bar))

创建条形图并选择颜色

plt.bar(x_pos,高度,颜色=(0.5,0.1,0.5,0.6))

添加标题和轴名称

plt.title(“我的头衔”)

plt.xlabel("类别")

plt.ylabel("价值观")

在x轴上创建名称

plt.xticks(x_pos、酒吧)

显示情节

plt.show()

如果您没有显式创建图形和轴对象,您可以在使用fontdict参数创建标题时设置标题字体大小。

使用fontsize参数创建x和y标签时,可以分别设置x和y标签字体大小。

例如:

plt.title('Car Prices are Increasing', fontdict={'fontsize':20})plt.xlabel('Year', fontsize=18)plt.ylabel('Price', fontsize=16)

也适用于seborn和熊猫绘图(当Matplotlib是后端时)!