Matplotlib 简明教程

Matplotlib - Font Properties

What are Font properties?

在 Matplotlib 库中,字体属性是决定绘图和图形中文本元素外观和样式的属性。这些属性包括各种方面,如字体系列、大小、粗细、样式和影响文本可视化呈现的其他设置。

Key Font Properties in Matplotlib

Font Family

字体系列指定用于文本元素的字体类型。常见的系列包括衬线体、无衬线体、等宽字体等。

  1. serif − 带有装饰笔划的字体通常用于更传统或正式的外观。

  2. sans-serif − 无装饰笔划的字体,以简洁现代的外观著称,通常用于可读性。

  3. monospace − 每個字元都占据相同水平空间的字体,通常用于代码或表格数据。

  4. Custom or Specific Fonts − 用户还可以使用安装在他们系统上的自定义字体或为特定字体提供字体路径。

Font Size

字体大小决定文本大小(以磅为单位 (pt)),从而影响可读性和可见性。字体大小以磅位(磅)指定,其中 1 磅大约为 1/72 英寸。Matplotlib 将磅作为字体大小的标准单位,从而在不同的设备和显示分辨率之间保持一致性。

Font Weight

字体粗细控制文本的粗细或加粗程度。选项范围从普通到粗体。它允许用户控制标签、标题、注释和其他文本组件等文本元素的可视化重点。

Font Weight Options

  1. normal − 指定常规字体粗细。

  2. bold − 指定粗体字体粗细。

  3. Integer Values − 一些字体支持从 100 到 900 的数字值来指定粗细级别。

Font Style

字体样式指定文本的样式,如普通、斜体或倾斜。它允许用户控制文本元素(如标签、标题、注释和其他文本组件)的倾斜度或样式。

Font Style Options

  1. normal − 指定常规字体样式(无倾斜或斜体)。

  2. italic − 指定斜体字体样式,斜体字符。

  3. oblique − 与斜体类似,但某些字体的外观可能略有不同。

Setting Font Properties in Matplotlib

以下是在 matplotlib 中设置字体属性的方法。

Global Configuration (using plt.rcParams)

这用于配置图或图形中所有文本元素的默认字体属性。

import matplotlib.pyplot as plt
# Set global font properties
x = [2,3,4,6]
y = [9,2,4,7]
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.size'] = 8
plt.rcParams['font.weight'] = 'normal'
plt.rcParams['font.style'] = 'italic'
plt.plot(x,y)
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.title("Setting fonts globally")
plt.show()
setting fonts globally

Individual Text Elements

通过此方法,我们可以为图中的特定文本元素设置字体属性。

import matplotlib.pyplot as plt
# Set Individual font properties
x = [2,3,4,6]
y = [9,2,4,7]
plt.plot(x,y)
plt.xlabel('X-axis Label', fontsize=14, fontweight='bold', fontstyle='italic')
plt.ylabel('Y-axis Label', fontsize=14, fontweight='bold', fontstyle='normal')
plt.title("Setting fonts Individually")
plt.show()
setting fonts

Importance of Font Properties

以下是字体属性的重要性。

Readability

正确的字体选择和大小可以提高文本元素的可读性。

Aesthetics

字体样式和字体族有助于提高图表的视觉吸引力。

Communication

字体属性有助于在可视化中传递强调或内容。

Using Font Properties for Customization

  1. 调整字体属性允许用户根据可视化或演示的要求定制文本的外观。

  2. 一致而恰当地使用字体属性可以确保在图和图形中以直观且连贯的方式显示文本信息。

最后,我们可以在 Matplotlib 库中使用的字体属性为用户提供了自定义文本外观的灵活性,确保可视化中的清晰度、可读性和视觉吸引力。这些属性可以精确控制文本元素在图中显示的方式,从而帮助有效地向查看者传达信息。

Multiple font sizes in one label

在此示例中,我们在 Python 中使用 title() 中的 fontsize 参数在一个标签中使用多个字体大小。

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(-5, 5, 100)
y = np.cos(x)
plt.plot(x, y)
fontsize = 20
plt.title("$bf{y=cos(x)}$", fontsize=fontsize)
plt.axis('off')
plt.show()
multiple font

Change the text color of font in the legend

在此示例中,我们将更改图例中字体的文本颜色。

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(-2, 2, 100)
y = np.exp(x)
plt.plot(x, y, label="y=exp(x)", c='red')
leg = plt.legend(loc='upper left')
for text in leg.get_texts():
   text.set_color("green")
plt.show()
legend font size

Change the default font color for all text

在此示例中,我们将更改图中所有文本的默认字体颜色。

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
print("Default text color is: ", plt.rcParams['text.color'])
plt.rcParams.update({'text.color': "red",
   'axes.labelcolor': "green"})
plt.title("Title")
plt.xlabel("X-axis")
plt.show()

默认文本颜色:黑色

default color

Change the font size of ticks of axes object

在此示例中,我们将更改图中所有文本的默认字体颜色。

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(-2, 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y, c='red', lw=5)
ax.set_xticks(x)
for tick in ax.xaxis.get_major_ticks():
   tick.label.set_fontsize(14)
   tick.label.set_rotation('45')
plt.tight_layout()
plt.show()
axes object

Increase the font size of the seaborn plot legend

在此示例中,我们增大了 Seaborn 图中图例的字体大小,可以使用 fontsize 变量并可以在 legend() 方法参数中使用它。

import pandas
import matplotlib.pylab as plt
import seaborn as sns
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pandas.DataFrame(dict(
   number=[2, 5, 1, 6, 3],
   count=[56, 21, 34, 36, 12],
   select=[29, 13, 17, 21, 8]
))
bar_plot1 = sns.barplot(x='number', y='count', data=df, label="count", color="red")
bar_plot2 = sns.barplot(x='number', y='select', data=df, label="select", color="green")
fontsize = 20
plt.legend(loc="upper right", frameon=True, fontsize=fontsize)
plt.show()
seaborn legend