Matplotlib - 字体



字体在定制绘图中的文本元素方面起着至关重要的作用。我们可以控制字体样式、大小、系列和其他属性,以增强可视化效果中文本的外观和可读性。

在 Matplotlib 库中,“字体”指的是用于渲染绘图和可视化效果中文本的字体类型。字体在定制文本元素(例如绘图中的标签、标题、注释和图例)的外观方面发挥着重要作用。

Matplotlib 库中字体的关键方面

  • 字体系列 - 指字体的样式或类别。常见的字体系列包括衬线体、非衬线体、等宽字体等。每个系列都有其独特的视觉特征。

  • 字体样式 - 确定文本的外观,例如普通、斜体或倾斜。

  • 字体粗细 - 指定字体的粗细程度,从普通到不同程度的粗细。

在 Matplotlib 中控制字体

  • 设置字体属性 - 我们可以使用参数(例如`fontsize``fontstyle``fontweight``fontfamily`)在诸如`plt.xlabel()``plt.title()`等函数中控制绘图中文本元素的字体属性。

plt.xlabel('X-axis Label', 
   fontsize=12, fontstyle='italic', 
	fontweight='bold', fontfamily='serif')
  • 全局字体配置 - 使用`plt.rcParams`全局调整整个绘图的字体属性,使我们可以设置默认字体设置以保持一致性。

plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.size'] = 12

字体在可视化中的重要性

  • 可读性 - 字体的选择会显著影响绘图中文本元素的可读性。选择合适的字体可以提高可视化信息的清晰度。

  • 美观性 - 字体通过影响绘图的视觉吸引力和演示效果,有助于绘图的整体美观性。

  • 强调和样式 - 不同的字体传达不同的语气和样式,允许用户强调特定元素或创建特定的视觉氛围。

全局设置字体属性

我们可以使用 plt.rcParams 全局配置整个绘图的字体属性。

plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.size'] = 12

在接下来的章节中,让我们详细了解字体的每个参数。

Matplotlib 中常见的与字体相关的函数

以下是 matplotlib 库中常见的与字体相关的函数。

  • plt.rcParam - Matplotlib 中的 plt.rcParams 是一个类似字典的对象,允许你全局配置各种设置,这些设置会影响绘图和图形的外观和行为。它充当 Matplotlib 的中央配置系统,提供了一种方便的方式来设置可视化中不同元素的默认参数。

  • 设置字体属性的函数 - 我们可以使用 plt.xlabel()、plt.ylabel() 和 plt.title() 函数设置坐标轴标签和标题的字体属性。

  • 将字体属性设置为注释 - 同样,我们可以使用 plt.text() 和 plt.annotate() 函数设置注释和文本元素的字体属性。

列出所有可用的字体

要获取当前可用于 matplotlib 的所有字体的列表,我们可以使用 font_manager.findSystemFonts() 方法,如下所示:

from matplotlib import font_manager
print("List of all fonts currently available in the matplotlib:")
print(*font_manager.findSystemFonts(fontpaths=None, fontext='ttf'), sep="")

上述程序会生成以下输出

List of all fonts currently available in the matplotlib:
C:\WINDOWS\Fonts\PERBI___.TTFC:\WINDOWS\Fonts\ARIALUNI.TTFC:\Windows\Fonts\BRLNSR.TTFC:\Windows\Fonts\calibri.ttfC:\WINDOWS\Fonts\BOD_PSTC.TTFC:\WINDOWS\Fonts\WINGDNG3.TTFC:\Windows\Fonts\segoeuisl.ttfC:\Windows\Fonts\HATTEN.TTFC:\WINDOWS\Fonts\segoepr.ttfC:\Windows\Fonts\TCCM____.TTFC:\Windows\Fonts\BOOKOS.TTFC:\Windows\Fonts\BOD_B.TTFC:\WINDOWS\Fonts\corbelli.ttfC:\WINDOWS\Fonts\TEMPSITC.TTFC:\WINDOWS\Fonts\arial.ttfC:\WINDOWS\Fonts\cour.ttfC:\Windows\Fonts\OpenSans-Semibold.ttfC:\WINDOWS\Fonts\palai.ttfC:\Windows\Fonts\ebrimabd.ttfC:\Windows\Fonts\taileb.ttfC:\Windows\Fonts\SCHLBKI.TTFC:\Windows\Fonts\AGENCYR.TTFC:\Windows\Fonts\tahoma.ttfC:\Windows\Fonts\ARLRDBD.TTFC:\WINDOWS\Fonts\corbeli.ttfC:\WINDOWS\Fonts\arialbd.ttfC:\WINDOWS\Fonts\LTYPEBO.TTFC:\WINDOWS\Fonts\LTYPEB.TTFC:\WINDOWS\Fonts\BELLI.TTFC:\WINDOWS\Fonts\YuGothR.ttcC:\WINDOWS\Fonts\OpenSans-Semibold.ttfC:\Windows\Fonts\trebucbd.ttfC:\WINDOWS\Fonts\OCRAEXT.TTFC:\WINDOWS\Fonts\JUICE___.TTFC:\WINDOWS\Fonts\comic.ttfC:\Windows\Fonts\VIVALDII.TTFC:\Windows\Fonts\Candarali.ttfC:\WINDOWS\Fonts\comici.ttfC:\WINDOWS\Fonts\RAVIE.TTFC:\WINDOWS\Fonts\LeelUIsl.ttfC:\Windows\Fonts\ARIALNB.TTFC:\WINDOWS\Fonts\LSANSDI.TTFC:\Windows\Fonts\seguibl.ttfC:\WINDOWS\Fonts\himalaya.ttfC:\WINDOWS\Fonts\TCBI___
..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
TTFC:\Windows\Fonts\BOD_BLAR.TTFC:\WINDOWS\Fonts\ebrima.ttfC:\Windows\Fonts\LTYPEB.TTFC:\WINDOWS\Fonts\FRABKIT.TTFC:\WINDOWS\Fonts\REFSAN.TTFC:\WINDOWS\Fonts\gadugi.ttfC:\Windows\Fonts\times.ttfC:\WINDOWS\Fonts\MTCORSVA.TTFC:\WINDOWS\Fonts\ERASDEMI.TTFC:\Windows\Fonts\himalaya.ttfC:\WINDOWS\Fonts\georgiai.ttf

列出所有字体系列(或字体名称)

在这里,使用以下代码,我们将获得字体系列列表,即字体名称。

from matplotlib import font_manager
print("List of all fonts currently available in the matplotlib:")
print(*font_manager.findSystemFonts(fontpaths=None, fontext='ttf'), sep="")

上述程序会生成以下输出

List of all fonts currently available in the matplotlib:
cmsy10
STIXGeneral
STIXSizeThreeSym
DejaVu Sans Mono
STIXGeneral
STIXSizeOneSym
.......................................................................
ITC Bookman
Computer Modern
Times
Palatino
New Century Schoolbook

控制字体属性

字体大小 (`fontsize`)

使用诸如plt.xlabel()plt.ylabel()plt.title()等函数中的fontsize参数设置文本元素的大小。

示例

在这个示例中,我们通过将fontsize参数传递给plt.xlabel()plt.ylabel()plt.title()函数来设置文本的大小。

import matplotlib.pyplot as plt
# Creating a data
x = [i for i in range(10,40)]
y = [i for i in range(30,60)]

# Creating a plot
plt.scatter(x,y,color = 'blue')
plt.xlabel('X-axis cube values', fontsize = 10)
plt.ylabel('Y-axis cube values', fontsize = 12)
plt.title('plot with defined font size')
plt.show()
输出
Image

字体样式 (`fontstyle`)

我们可以为要在创建的绘图上使用的字体选择字体样式,例如“normal”、“italic”或“oblique”。

示例

在这里,我们通过将 fontstyle 参数作为'normal''italic''oblique'传递给plt.xlabel()plt.ylabel()plt.title()来设置我们在绘图上显示的字体的字体样式。

import matplotlib.pyplot as plt
# Creating a data
x = [i for i in range(10,40)]
y = [i for i in range(30,60)]

# Creating a plot
plt.scatter(x,y,color = 'blue')
plt.xlabel('X-axis cube values', fontsize = 10)
plt.ylabel('Y-axis cube values', fontsize = 12)
plt.title('plot with defined font size')
plt.show()
输出
Defined Font Size

字体粗细 (`fontweight`)

使用诸如'normal''bold'或数值(例如400700等)调整字体的粗细。

示例

import matplotlib.pyplot as plt
# Creating a data
x = [i for i in range(10,40)]
y = [i for i in range(30,60)]

# Creating a plot
plt.scatter(x,y,color = 'blue')
plt.xlabel('X-axis cube values', fontweight='bold')
plt.ylabel('Y-axis cube values', fontweight='bold')
plt.title('plot with defined font size',fontweight='bold')
plt.show()
输出
Font Weight

更改字体系列

我们可以修改 Matplotlib 库中各种文本元素的字体系列。下面提到一些可用的字体系列。

  • 'serif' - 衬线字体,例如 Times New Roman

  • 'sans-serif' - 非衬线字体,例如 Arial

  • 'monospace' - 等宽字体,例如 Courier New

更改字体大小

我们可以使用 plt.text() 函数更改字体大小。

示例

import matplotlib.pyplot as plt
plt.plot([1, 2, 4], [1, 2, 4])
plt.text(2, 3, "y=x", color='red', fontsize=20)

# Increase fontsize by increasing value.
plt.show()
输出
Text Size

将字体嵌入 Matplotlib 生成的 PDF 中

要将字体嵌入 Matplotlib 生成的 PDF 中,我们可以使用 rc.Params['pdf.fonttype']=42。

示例

import numpy as np
from matplotlib import pyplot as plt, font_manager as fm

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
plt.rcParams['pdf.fonttype'] = 42

fig, ax = plt.subplots()
x = np.random.rand(100)
y = np.random.rand(100)

ax.scatter(x, y, c=y, marker="v")

fprop = fm.FontProperties(fname='C:\Windows\Fonts\MISTRAL.TTF')

ax.set_title('Scatter Plot With Random Points',
   fontproperties=fprop, size=20, fontweight="bold")

plt.savefig("demo.pdf")
输出

当我们执行代码时,它将以“demo.pdf”作为文件名将以下绘图保存在项目目录中。

Embed font

全局设置字体属性

在 Matplotlib 库中全局设置字体属性涉及使用plt.rcParams方法配置整个绘图的默认字体设置。当我们想要将一致的字体样式、大小或系列应用于可视化效果中的所有文本元素而无需为每个组件分别指定它们时,这非常有用。

重要的是要注意,我们可以根据我们的喜好和我们想要在绘图中实现的视觉样式来定制这些设置。我们可以调整值以匹配我们所需的字体样式、大小和系列,以确保可视化效果的一致性和美观性。

以下是我们可以使用plt.rcParams方法进行的不同设置。

plt.rcParams['font.family'] = font_name

这将设置文本元素的默认字体系列,例如'sans-serif'。我们可以将 font_name 替换为可用的字体系列,例如'serif''monospace'或特定字体名称。

示例

在这个示例中,我们尝试使用plt.rcParams['font.family']将字体系列设置为'sans-serif'

import matplotlib.pyplot as plt
# Set font properties globally
plt.rcParams['font.family'] = 'sans-serif'

# Create a plot
plt.plot([1, 2, 3], [4, 5, 6])
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')
plt.title('Font Family setting')
plt.show()

输出

Font Family

plt.rcParams['font.size'] = font_size

我们可以根据需要以数值指定文本元素的默认字体大小。这确保了所有文本元素都使用此字体大小,除非为特定组件覆盖。

示例

在这个例子中,我们将字体大小指定为8磅,用于plt.rcParams['font.size'],以便在整个绘图中全局显示字体大小。

import matplotlib.pyplot as plt
# Set font properties globally
plt.rcParams['font.size'] = 8

# Create a plot
plt.plot([1, 2, 3], [4, 5, 6])
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')
plt.title('Font Size setting')
plt.show()

输出

Font Size

plt.rcParams['font.style'] = 'fontstyle'

我们可以根据自己的兴趣,定义字体样式,例如斜体等,用于plt.rcParams['font.style']。这会将定义的外观应用于整个绘图中的文本元素。

示例

在这个例子中,我们将字体样式指定为斜体,用于plt.rcParams['font.style']

import matplotlib.pyplot as plt
# Set font properties globally
plt.rcParams['font.style'] = 'italic'

# Create a plot
plt.plot([1, 2, 3], [4, 5, 6])
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')
plt.title('Font Style setting')
plt.show()

输出

Font Style

plt.rcParams['font.weight'] = font_weight

通过使用这个,我们可以设置字体粗细,例如'粗体'等。这使得文本元素中的字符根据用户需求以定义的样式显示。

示例

在这个例子中,我们将字体粗细指定为粗体,用于plt.rcParams['font.weight']

import matplotlib.pyplot as plt
# Set font properties globally
plt.rcParams['font.weight'] = 'bold'

# Create a plot
plt.plot([1, 2, 3], [4, 5, 6])
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')
plt.title('Font weight setting')
plt.show()

输出

Font Weight

注意 − 通过使用plt.rcParams全局设置这些参数,我们可以确保这些默认字体属性应用于所有Matplotlib绘图中的文本元素。当我们创建标签、标题或其他文本组件时,它们将继承这些全局设置,除非我们在本地指定不同的属性。

更改Matplotlib颜色条标签的字体属性

在这个例子中,我们正在更改matplotlib颜色条标签的字体属性。

示例

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x, y = np.mgrid[-1:1:100j, -1:1:100j]
z = (x + y) * np.exp(-5.0 * (x ** 2 + y ** 2))
plt.imshow(z, extent=[-1, 1, -1, 1])
cb = plt.colorbar(label='my color bar label')
plt.show()

输出

Color Bar

设置绘图画布的大小

在这个例子中,我们正在设置matplotlib中绘图画布的大小。

示例

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(-2, 2, 100)
y = np.sin(x)
plt.plot(x, y)
plt.show()

输出

Canvas

使用Matplotlib自动调整Seaborn热力图中的字体大小

在这里,我们使用Matplotlib库自动调整seaborn热力图中的字体大小。

示例

import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
import pandas as pd
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
d = {
   'y=1/x': [1 / i for i in range(1, 10)],
   'y=x': [i for i in range(1, 10)],
   'y=x^2': [i * i for i in range(1, 10)],
   'y=x^3': [i * i * i for i in range(1, 10)]
}
df = pd.DataFrame(d)
ax = sns.heatmap(df, vmax=1)
plt.xlabel('Mathematical Expression', fontsize=16)
plt.show()

输出

Canvas

设置Matplotlib轴图例的字体大小

在这个例子中,我们正在设置matplotlib轴图例的字体大小。

示例

import numpy as np
from matplotlib import pyplot as plt
import matplotlib
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(1, 10, 50)
y = np.sin(x)
plt.plot(x, y, c="red", lw=7, label="y=sin(x)")
plt.title("Sine Curve")
matplotlib.rcParams['legend.fontsize'] = 20
plt.legend(loc=1)
plt.show()

输出

Legend size

修改Matplotlib-venn中的字体大小

要使用Matplotlib-venn,首先我们必须使用下面的代码安装包。如果之前已经安装,我们可以直接导入。

pip install matplotlib-venn

示例

在这个例子中,我们使用set_fontsize()方法修改Matplotlib-venn中的字体大小。

from matplotlib import pyplot as plt
from matplotlib_venn import venn3
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
set1 = {'a', 'b', 'c', 'd'}
set2 = {'a', 'b', 'e'}
set3 = {'a', 'd', 'f'}
out = venn3([set1, set2, set3], ('Set1', 'Set2', 'Set3'))
for text in out.set_labels:
   text.set_fontsize(25)
for text in out.subset_labels:
   text.set_fontsize(12)
plt.show()

输出

Matplotlib-venn

更改xticks字体大小

要更改matplotlib绘图中xticks的字体大小,我们可以使用fontsize参数。

示例

from matplotlib import pyplot as plt
import numpy as np

# Set the figure size
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# x and y data points
x = np.linspace(-5, 5, 100)
y = np.sin(x)
plt.plot(x, y)

# Set the font size of xticks
plt.xticks(fontsize=25)

# Display the plot
plt.show()

输出

Xticks size
广告