Matplotlib 简明教程
Matplotlib - Fonts
字体在自定义绘图中的文本元素方面发挥着至关重要的作用。我们可以控制字体样式、大小、系列和其他属性,以增强可视化中文本的外观和可读性。
在 Matplotlib 库中, ‘Fonts’ 引用用于在绘图和可视化中呈现文本的字体。字体在自定义标签、标题、注释和绘图中图例等文本元素的外观方面发挥着重要作用。
Key Aspects of Fonts in Matplotlib library
-
Font Family - 指字体的样式或类别。常见的字体系列包括衬线、非衬线、等宽等。每个系列都有其自身的视觉特征。
-
Font Style - 确定文本的外观,例如普通、斜体或倾斜。
-
Font Weight - 指定字体的粗细或粗细程度,从普通到各种粗细级别。
Controlling Fonts in Matplotlib
-
Setting Font Properties - 我们可以使用
fontsize
,fontstyle
,fontweight
和fontfamily
等参数在plt.xlabel()
,plt.title()
等函数中控制绘图中文本元素的字体属性。
plt.xlabel('X-axis Label',
fontsize=12, fontstyle='italic',
fontweight='bold', fontfamily='serif')
-
Global Font Configuration − 使用
plt.rcParams
为整个绘图全局调整字体属性,以便我们为一致性设置默认字体设置。
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.size'] = 12
Importance of Fonts in Visualization
-
Readability − 字体选择对绘图中文本元素的可读性有重大影响。选择适当的字体可提高可视化信息的清晰度。
-
Aesthetics − 字体通过影响绘图的视觉吸引力和呈现方式来促成绘图的整体美感。
-
Emphasis and Style − 不同的字体传达不同的语调和风格,让用户可以强调特定元素或营造特定的视觉氛围。
Setting Font Properties Globally
我们可以使用 plt.rcParams 为整个绘图全局配置字体属性。
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.size'] = 12
在即将到来的章节中,我们来分别仔细了解字体的每个参数。
Common Font-related Functions in Matplotlib
以下是 matplotlib 库中常见的字体相关函数。
-
plt.rcParam - Matplotlib 中的 plt.rcParams 是类似字典的对象,它允许您全局配置影响绘图和图形的外观和行为的各种设置。它是 Matplotlib 的集中配置系统,提供了一种方便的方法来设置可视化中不同元素的默认参数。
-
Functions to set font properties - 我们可以使用 plt.xlabel()、plt.ylabel() 和 plt.title() 函数设置轴标签和标题的字体属性。
-
Setting font properties to annotations - 同样,我们可以使用 plt.text() 和 plt.annotate() 函数设置注释和文本元素的字体属性
Listing All the Available Fonts
要获取 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="")
上述程序生成以下内容: output -
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
Listing all the font families (or Name of Fonts)
在这里,通过使用以下代码,我们将获得字体系列的列表,即字体名称。
from matplotlib import font_manager
print("List of all fonts currently available in the matplotlib:")
print(*font_manager.findSystemFonts(fontpaths=None, fontext='ttf'), sep="")
上述程序生成以下内容: output -
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
Controlling Font Properties
Font Size (fontsize
)
使用函数中的 fontsize 参数(例如 plt.xlabel(), plt.ylabel(), plt.title() 等)设置文本元素的大小。
在这个示例中,我们通过将 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()
Font Style (fontstyle
)
我们可以为要在创建的绘图上使用的字体选择“普通”、“斜体”或“倾斜”等字体样式。
在这里,我们通过将 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()
Font Weight (fontweight
)
使用权重(如 'normal', 'bold', 或 numerical )或 400, 700 等值调整字体的粗细。
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()
Changing Font Family
我们可以在 Matplotlib 库中修改各种文本元素的字体系列。下面提到了一些可用的字体系列。
-
'serif' − Times New Roman 等衬线字体
-
'sans-serif' − Arial 等无衬线字体
-
'monospace' − Courier New 等等宽字体
Change size of the fonts
我们可以使用 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()
Embed fonts in PDFs produced by Matplotlib
为了将字体嵌入至由 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" 为文件名将以下图片保存至项目目录中。
Setting Font Properties Globally
在 Matplotlib 库中全局设置字体属性涉及使用 plt.rcParams 方法配置整个绘图的默认字体设置。当我们希望对可视化效果中的所有文本元素应用一致的字体样式、大小或系列而无需为每个组件单独指定它们时,这一点非常有用。
值得注意的是,我们可以根据自己的偏好和我们希望在绘图中实现的视觉样式来定制这些设置。我们可以调整值以匹配我们期望的字体样式、大小和系列,以便在我们的可视化效果中获得一致且美观的展示效果。
以下是我们可用 plt.rcParams 方法进行的不同设置。
plt.rcParams['font.family'] = font_name
这为文本元素(如 'sans-serif' )设置默认字体系列。我们可以用 'serif', 'monospace' 等可用字体系列或特定字体名称替换 font_name。
Example
在这个示例中,我们尝试将字体系列设置成 'sans-serif' 和使用 plt.rcParams['font.family'] 。
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()
plt.rcParams['font.size'] = font_size
我们可以根据需求将数值值指定为文本元素的默认字体大小。这样可以确保所有文本元素都使用该字体大小,而不会因某些组件而出错。
Example
在此示例中,我们将字体大小指定为 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()
plt.rcParams['font.style'] = 'fontstyle'
我们可以定义字体样式,例如倾斜等,由我们对 plt.rcParams['font.style'] 的兴趣而定。这会针对图表中的文本元素应用已定义的外观。
Example
在此示例中,我们将字体样式指定为 italic 和 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()
plt.rcParams['font.weight'] = font_weight
通过此方法,我们可以设置字体粗细,例如“粗体”等,从而根据用户要求显示文本元素中的字符,并为其指定样式。
Example
在此示例中,我们将字体粗细指定为 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()
Note − 通过使用 plt.rcParams 在全局设置这些参数,我们可以确保将这些默认字体特性应用到 Matplotlib 图表中的所有文本元素。当创建标签、标题或其他文本组件时,这些组件将继承这些全局设置,除非我们针对本地指定不同的特性。
Change the font properties of a Matplotlib colorbar label
此示例中,我们更改 matplotlib 色条标签的字体属性。
Example
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()
Auto adjust font size in Seaborn heatmap using Matplotlib
我们通过 Matplotlib 库自动调整 seaborn 热图的字体大小。
Example
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()
Set the font size of Matplotlib axis Legend
在此示例中,我们设置 matplotlib 坐标轴图例的字体大小。
Example
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()
Modify the font size in Matplotlib-venn
要处理 Matplotlib-venn,我们首先需要使用以下代码安装软件包。如果已安装,我们可以直接导入。
pip install matplotlib-venn
Example
在此示例中,我们通过使用 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()
Change xticks font size
要更改 matplotlib 图表中 x 坐标刻度的字体大小,我们可以使用 fontsize 参数。
Example
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()