ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小
ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小
文章目录
- ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小
- 1. 安装 Times New Roman 字体
- 验证字体是否安装成功
- 2. 在 Matplotlib 中加载 Times New Roman 字体
- 3. 在 Matplotlib 中使用 Times New Roman
- 示例:应用于标题和轴标签
- 4. 遇到的问题及解决方案
- **问题 1:findfont: Font family 'Times New Roman' not found**
- **问题 2:AttributeError: PathCollection.set() got an unexpected keyword argument 'fontproperties'**
- **问题 3:无法调整字体大小**
- 5. 使用全局字体设置
- 6. 调整字体大小和分辨率
- 总结
在数据可视化中,定制字体和样式是常见需求之一,特别是在需要与论文、报告或品牌设计保持一致时,使用特定字体如 Times New Roman 会显得尤为重要。然而,直接在
matplotlib 中设置自定义字体可能会遇到一些问题,比如字体无法加载、无法调整大小或参数冲突等。
1. 安装 Times New Roman 字体
在 Linux 系统上,Times New Roman 字体并不是默认安装的。因此,我们需要手动安装该字体。以下是在 Ubuntu 上安装 Times New Roman 字体的步骤:
sudo apt update
sudo apt install ttf-mscorefonts-installer
安装完成后,Times New Roman 字体通常会被存储在路径 /usr/share/fonts/truetype/msttcorefonts/ 中。
验证字体是否安装成功
使用以下命令检查字体是否正确安装:
fc-list | grep "Times New Roman"
输出示例:
/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf: Times New Roman:style=Regular
2. 在 Matplotlib 中加载 Times New Roman 字体
为了在 Matplotlib 中使用 Times New Roman 字体,我们需要通过 matplotlib.font_manager 加载字体文件。以下是加载字体的完整代码:
from matplotlib import font_manager as fm# 加载 Times New Roman 字体
font_path = "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf"
times_new_roman_font = fm.FontProperties(fname=font_path)# 检查字体是否加载成功
print("Loaded font name:", times_new_roman_font.get_name())
如果输出为 Times New Roman,说明字体加载成功。
3. 在 Matplotlib 中使用 Times New Roman
示例:应用于标题和轴标签
我们可以通过 fontproperties 参数将字体应用于标题、轴标签等文本元素。例如:
import matplotlib.pyplot as plt# 示例数据
x = [1, 2, 3]
y = [4, 5, 6]# 创建绘图
plt.figure(figsize=(6, 6))
plt.plot(x, y, label="Sample Line")# 应用字体到标题和轴标签
plt.title("Title in Times New Roman", fontproperties=times_new_roman_font, fontsize=20)
plt.xlabel("X-axis", fontproperties=times_new_roman_font, fontsize=15)
plt.ylabel("Y-axis", fontproperties=times_new_roman_font, fontsize=15)# 图例
plt.legend(prop=times_new_roman_font, loc='upper left')
plt.show()
4. 遇到的问题及解决方案
问题 1:findfont: Font family ‘Times New Roman’ not found
在某些情况下,即使正确安装了字体,Matplotlib 仍可能无法识别字体,报错类似:
findfont: Font family 'Times New Roman' not found
解决方法:
- 确保字体路径正确。
- 刷新字体缓存:
fc-cache -fv - 删除 Matplotlib 的字体缓存:
rm -rf ~/.cache/matplotlib
问题 2:AttributeError: PathCollection.set() got an unexpected keyword argument ‘fontproperties’
如果尝试在 plt.scatter() 中使用 fontproperties 参数,会报错类似:
AttributeError: PathCollection.set() got an unexpected keyword argument 'fontproperties'
原因:
fontproperties 参数并不适用于 scatter 函数,而是用于设置文本(如标题、图例)的字体。
解决方法:
将字体设置移到 plt.legend() 或其他支持 fontproperties 的函数中。修改后的代码如下:
plt.scatter(x, y, label="Scatter Example", alpha=0.5)
plt.legend(prop=times_new_roman_font)
问题 3:无法调整字体大小
在 plt.legend() 中同时使用 fontsize 和 prop 参数时,可能会导致字体大小无法调整的问题。
原因:
fontsize 参数与 prop 参数冲突,当使用 prop=FontProperties 时,字体大小应该在 FontProperties 中指定。
解决方法:
通过 FontProperties 设置字体大小,而不是直接使用 fontsize 参数。例如:
# 设置字体大小
times_new_roman_font = fm.FontProperties(fname=font_path, size=20)# 应用到图例
plt.legend(loc='lower left', prop=times_new_roman_font)
5. 使用全局字体设置
如果希望将 Times New Roman 设置为整个图形的默认字体,可以通过 Matplotlib 的 rcParams 实现:
from matplotlib import rcParams# 设置全局字体
rcParams['font.family'] = times_new_roman_font.get_name()
rcParams['font.size'] = 12# 创建绘图
plt.plot([1, 2, 3], [4, 5, 6], label="Example Line")
plt.legend(loc='upper left')
plt.title("Global Font Example")
plt.show()
6. 调整字体大小和分辨率
当字体太大或太小时,可以通过以下方法调整:
- 调整字体大小:通过
FontProperties的size参数控制字体大小。 - 调整图像分辨率:通过设置 DPI(每英寸像素点)改善显示效果。例如:
plt.figure(dpi=100) # 默认是 100,可以增加到 200 或更高
总结
通过本文的介绍,我们实现了以下目标:
- 在 Ubuntu 系统中安装并验证 Times New Roman 字体。
- 成功在 Matplotlib 中加载 Times New Roman 字体,并应用于标题、轴标签和图例。
- 解决了字体无法加载、
fontproperties参数冲突等常见问题。 - 学会通过
FontProperties控制字体大小,并全局应用字体设置。
最终效果展示(示例代码):
import matplotlib.pyplot as plt
from matplotlib import font_manager as fm# 加载字体
font_path = "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf"
times_new_roman_font = fm.FontProperties(fname=font_path, size=20)# 绘图
plt.figure(dpi=100)
plt.plot([1, 2, 3], [4, 5, 6], label="Sample Line")
plt.title("Final Example", fontproperties=times_new_roman_font)
plt.xlabel("X-axis", fontproperties=times_new_roman_font)
plt.ylabel("Y-axis", fontproperties=times_new_roman_font)
plt.legend(loc='upper left', prop=times_new_roman_font)
plt.show()
相关文章:
ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小
ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小 文章目录 ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小1. 安装 Times New Roman 字体验证字体是否安装成功 2. 在 Matplotlib 中加载 Times New Roman 字体3. 在 Matplotlib 中使…...
openGauss开源数据库实战二十三
文章目录 任务二十三 openGauss 参数管理任务目标实施步骤一、启动参数文件及参数类型1.参数值修改后必须重新启动数据库的参数2.参数值修改后只需要reload操作的参数 二、设置数据库级参数三、设置用户级参数四、设置会话级参数五、将参数设置为默认值 任务二十三 openGauss 参…...
MySQL 复合查询(重点)
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 MySQL 复合查询(重点) 收录于专栏[MySQL] 本专栏旨在分享学习MySQL的一点学习笔记,欢迎大家在评论区交流讨论💌 …...
ASP.NET |日常开发中连接Oracle数据库详解
ASP.NET |日常开发中连接Oracle数据库详解 前言一、安装和配置 Oracle 数据访问组件1.1 安装ODP.NET(Oracle Data Provider for.NET):1.2 引用相关程序集: 二、配置连接字符串2.1 连接字符串的基本组成部分:…...
java_连接数据库的方法_后端处理_前端调用_打通整体思路
参考:14 尚上优选项目-平台管理端-权限管理模块-开发角色管理接口(上)_哔哩哔哩_bilibili 第一步. 定义数据 在数据库中定义好数据(如role表格),在java后端定义好对应的实体类(Role类…...
网络安全知识点
第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 1.2.3 网络安全的种类P5 (1…...
pyfink1.20版本下实现消费kafka中数据并实时计算
1、环境 JDK版本:1.8.0_412python版本:3.10.6apache-flink版本:1.20.0flink版本:1.20kafka版本:kafka_2.12-3.1.1flink-sql-connector-kafka版本:3.3.0-1.202、执行python-flink脚本 从kafka的demo获取消…...
国产Tomcat东方通(TongWeb):Linux系统部署全攻略
国产Tomcat东方通(TongWeb):Linux系统部署全攻略 国产tomcat东方通tongweb在linux系统上部署全流程 [这里是图片001] 项目地址: https://gitcode.com/Resource-Bundle-Collection/fca68 项目介绍 在当前的软件开发和运维环境中,…...
bilstm -crf 的torch官方的教程 不支持 batchsize 。。。。有更效率更高的方案吗
根据您的需求,您正在寻找一个支持批量处理(batch size)的BiLSTM-CRF模型的PyTorch教程。以下是一些资源,它们提供了更高效的解决方案,包括批量处理的支持: 1. **a-PyTorch-Tutorial-to-Sequence-Labeling*…...
Python面试常见问题及答案6
一、基础部分 问题1: 在Python中,如何将字符串转换为整数?如果字符串不是合法的数字字符串会怎样? 答案: 在Python中,可以使用int()函数将字符串转换为整数。如果字符串是合法的数字字符串,转换…...
代码随想录算法训练营第三天 | 链表理论基础 | 203.移除链表元素
感觉上是可以轻松完成的,因为对链接的结构,元素的删除过程心里明镜似的 实际上四处跑气 结构体的初始化好像完全忘掉了,用malloc折腾半天,忘记了用new,真想扇自己嘴巴子到飞起删除后写一个函数,把链表打印…...
1. 机器学习基本知识(5)——练习题(1)
1.7 🐦🔥练习题(本章重点回顾与总结) 0.回答格式约定: 对于书本内容的回答,将优先寻找书本内容作为答案进行回答。 书本内容回答完毕后,将对问题进行补充回答,上面分割线作为两个…...
vue 自定义组件image 和 input
本章主要是介绍自定义的组件:WInput:这是一个验证码输入框,自动校验,输入完成回调等;WImage:这是一个图片展示组件,集成了缩放,移动等操作。 目录 一、安装 二、引入组件 三、使用…...
系列3:基于Centos-8.6 Kubernetes使用nfs挂载pod的应用日志文件
每日禅语 古代,一位官员被革职遣返,心中苦闷无处排解,便来到一位禅师的法堂。禅师静静地听完了此人的倾诉,将他带入自己的禅房之中。禅师指着桌上的一瓶水,微笑着对官员说:“你看这瓶水,它已经…...
Jfinal项目整合Redis
1、引入相关依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency><depen…...
在Ubuntu服务器上备份文件到自己的百度网盘
文章目录 概述安装bypy同步文件定时任务脚本 概述 之前自购了一台阿里云服务器,系统镜像为Ubuntu 22.04, 并且搭建了LNMP开发环境(可以参考:《Ubuntu搭建PHP开发环境操作步骤(保姆级教程)》)。由于项目运行中会产生附…...
Unity 模板测试透视效果(URP)
可以实现笼中窥梦和PicoVR中通过VST局部透视效果。 使用到的Shader: Shader "Unlit/StencilShader" {Properties{[IntRange]_Index("Stencil Index",Range(0,255))0}SubShader{Tags{"RenderType""Opaque""Queue""Geo…...
《计算机视觉证书:开启职业发展新航道》
一、引言 在当今科技飞速发展的时代,计算机视觉技术正以惊人的速度改变着我们的生活和工作方式。从智能手机的人脸识别解锁到自动驾驶汽车的环境感知,计算机视觉技术的应用无处不在。而计算机视觉证书作为这一领域的专业认证,其作用愈发凸显…...
.NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】
一、使用VSCode开发.NET项目 1、创建文件夹,使用VSCode打开 2、安装扩展工具 1>C# 2>安装NuGet包管理工具,外部dll包依靠它来加载 法1》:NuGet Gallery,注意要启动科学的工具 法2》NuGet Package Manager GUl,…...
Git-分布式版本控制工具
目录 1. 概述 1. 1集中式版本控制工具 1.2分布式版本控制工具 2.Git 2.1 git 工作流程 1. 概述 在开发活动中,我们经常会遇到以下几个场景:备份、代码回滚、协同开发、追溯问题代码编写人和编写时间(追责)等。备份的话是为了…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
