用ttf文件解决python画图乱码和中文方框问题

在这里插入图片描述

#将字体放到某个路径下,下载的字体simsun支持中文
font = FontProperties(fname=“/usr/share/fonts/chinese/simsun.ttc”,size=15)

我的字体文件在
“D:\中文字体TTF源文件\中文字体TTF源文件\simhei.ttf”
帮我解决乱码问题

import os
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import logging
import argparse
import glob
from datetime import datetime
from matplotlib.font_manager import FontProperties# 配置日志记录
logging.basicConfig(filename='plot_error_log.txt', level=logging.ERROR,format='%(asctime)s:%(levelname)s:%(message)s')def load_proportion_data(file_path):"""加载统计结果的 Excel 文件。参数:- file_path (str): Excel 文件的路径。返回:- DataFrame: 包含统计比例的数据。"""try:proportion_df = pd.read_excel(file_path, index_col=0)print(f"成功加载统计结果文件:{file_path}")return proportion_dfexcept FileNotFoundError:logging.error(f"文件未找到:{file_path}")print(f"错误:文件未找到 - {file_path}")except Exception as e:logging.error(f"读取文件 {file_path} 时出错:{e}")print(f"错误:读取文件时出错 - {e}")return Nonedef plot_proportion(proportion_df, font_path, output_path=None):"""绘制堆积柱状图,展示各活动类型下教学倾向的比例分布。参数:- proportion_df (DataFrame): 包含统计比例的数据,行索引为活动类型,列为教学倾向类别。- font_path (str): 字体文件的路径,用于支持中文显示。- output_path (str, 可选): 图表保存路径。如果提供,将保存图表而不显示。"""try:# 检查字体文件是否存在if not os.path.exists(font_path):logging.error(f"字体文件未找到:{font_path}")print(f"错误:字体文件未找到 - {font_path}")return# 设置中文字体font_prop = FontProperties(fname=font_path)# 设置绘图风格sns.set(style="whitegrid")# 绘制堆积柱状图ax = proportion_df.plot(kind='bar', stacked=True, figsize=(16, 12), colormap='tab20')# 设置轴标签和标题,应用中文字体plt.xlabel('活动类型', fontproperties=font_prop, fontsize=24)plt.ylabel('教学倾向比例', fontproperties=font_prop, fontsize=24)plt.title('各活动类型下教学倾向的比例分布', fontproperties=font_prop, fontsize=30)# 设置图例,应用中文字体plt.legend(title='教学倾向', title_fontsize=18, fontsize=16, prop=font_prop, bbox_to_anchor=(1.05, 1), loc='upper left')# 调整刻度标签字体大小,应用中文字体plt.xticks(fontsize=18, fontproperties=font_prop)plt.yticks(fontsize=18, fontproperties=font_prop)# 添加数据标签(可选)# 注意:`ax.bar_label` 需要 Matplotlib 3.4.0 及以上版本try:for container in ax.containers:ax.bar_label(container, fmt='%.2f', label_type='center', fontsize=10, fontproperties=font_prop)except AttributeError:logging.warning("Matplotlib 版本过低,无法使用 'ax.bar_label' 添加数据标签。")print("警告:Matplotlib 版本过低,无法添加数据标签。")plt.tight_layout()if output_path:plt.savefig(output_path, bbox_inches='tight')print(f"图表已保存为:{output_path}")else:plt.show()except Exception as e:logging.error(f"绘制图表时出错:{e}")print(f"错误:绘制图表时出错 - {e}")def get_latest_temp_file(folder_path):"""获取指定文件夹中最新的以 'temp' 开头的 Excel 文件。参数:- folder_path (str): 文件夹路径。返回:- str or None: 最新文件的路径,如果未找到则返回 None。"""temp_files = glob.glob(os.path.join(folder_path, 'temp*.xlsx'))if not temp_files:# 如果没有以 'temp' 开头的文件,尝试寻找特定文件名temp_files = glob.glob(os.path.join(folder_path, 'temp_proportion.xlsx'))if not temp_files:return Nonelatest_file = max(temp_files, key=os.path.getmtime)return latest_filedef parse_arguments():parser = argparse.ArgumentParser(description="读取统计结果并绘制图表。")parser.add_argument('--input', type=str, default=None, help="输入的 Excel 文件路径。")parser.add_argument('--output', type=str, default=None, help="输出的图表文件路径。")parser.add_argument('--auto', action='store_true', help="自动选择最新的 temp 文件。")return parser.parse_args()def main():args = parse_arguments()if args.auto:# 使用自动选择最新的 temp 文件folder_path = r'D:\BaiduSyncdisk\硕士毕业相关\毕业论文数据\test'temp_excel_path = get_latest_temp_file(folder_path)if temp_excel_path is None:print(f"错误:没有找到任何以 'temp' 开头的 Excel 文件。")returnprint(f"使用最新的统计结果文件:{temp_excel_path}")else:# 使用指定的输入文件if args.input:temp_excel_path = args.inputelse:# 如果未指定输入文件且未使用自动模式,提示用户print("错误:未指定输入文件路径。请使用 --input 参数或启用 --auto 模式。")return# 设置字体文件路径font_path = r'D:\中文字体TTF源文件\中文字体TTF源文件\simhei.ttf'# 检查字体文件是否存在if not os.path.exists(font_path):logging.error(f"字体文件未找到:{font_path}")print(f"错误:字体文件未找到 - {font_path}")return# 检查统计结果文件是否存在if not os.path.exists(temp_excel_path):print(f"错误:统计结果文件不存在 - {temp_excel_path}")return# 加载统计结果proportion_df = load_proportion_data(temp_excel_path)if proportion_df is not None:# 绘制图表plot_proportion(proportion_df, font_path, output_path=args.output)if __name__ == "__main__":main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷云科技数据集成社区焕新登场:功能、资源、会员权益全面升级

12月26日,谷云科技ETLCloud技术社区迎来全新升级。升级后社区的内容更加丰富,满足社区用户更多需要。 功能更细致,查找更方便 社 区 问 答 | 博 客 文 章 | 文 档 中 心 作为社区内容贡献的核心板块,我们对社区问答、博客…

MySql详细教程-从入门到进阶(超实用)

基础篇 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用…

20241225在ubuntu20.04.5下监控SSD

20241225在ubuntu20.04.5下监控SSD 2024/12/25 20:29 参考资料: 百度:ubuntu查看ssd寿命 方法 1:使用「磁盘」工具监测 SSD 健康状态 sudo apt install gnome-disk-utility 方法 2:使用 smartctl 工具检查 SSD 健康状态 Ubuntu 和…

node.js之---单线程异步非阻塞 I/O

单线程模型 1、Node.js 使用 单线程 来处理客户端请求和执行任务 2、如果遇到异步任务,node.js使用事件循环和异步 I/O 模型,使得它能够高效地处理大量并发请求 异步操作有哪些 1、读取文件 2、网络请求 3、数据库操作等等 异步非阻塞 I/O Node.…

基于PLC的电梯控制系统(论文+源码)

1.系统设计 电梯采用了PLC控制方式,通过对PLC进行逻辑程序设计,电梯不仅在控制水平上得到了质的提升,同时在安全性上也得到了大大提高。控制系统在构造上实现了简洁化,不仅优化了硬件接线方便了线路施工,同时对控制要…

【AR的手势识别算法有哪些】

在增强现实(AR)应用中,手势识别是实现用户与虚拟环境互动的关键技术之一。手势识别算法通过捕捉并分析用户的手势,转化为具体的控制命令,从而实现对虚拟物体、机器设备等的操作。以下是常见的AR手势识别算法及其实现方…

C++ hashtable

文章目录 1. 基本概念2. 哈希函数3. 哈希冲突及解决方法开放定址法链地址法再哈希法建立公共溢出区4. 哈希表的操作实现5. 内存管理及优化 时间复杂度理想情况(无哈希冲突或冲突极少)一般情况(考虑哈希冲突及解决方法)综合来看 以…

深度学习使用Anaconda打开Jupyter Notebook编码

新手入门深度学习使用Anaconda打开Jupyter Notebook编码 1. 安装Anaconda 第一种是Anaconda官网下载安装包,但是很慢,不太建议 第二种使用国内清华大学镜像源下载 选择适合自己电脑的版本,支持windows,linux系统 下载完之后自行…

GDPU Vue前端框架开发 跨年大礼包

记住,年底陪你跨年的不会仅是方便面跟你的闺蜜,还有孑的笔记。 选择题 1.下列选项用于设置Vue.js页面视图的元素是()。 A. Template B. script C. style D. title 2.下列选项中能够定义Vuejs根实例对象的元素是(&…

vue 中 ref 详解

一、定义与基本用法 1. 定义 在 Vue.js 中,ref是一个用于在组件中获取 DOM 元素或者子组件实例引用的属性。它提供了一种直接访问元素或组件的方式,使得我们可以在 JavaScript 代码中对它们进行操作。 2. 基本使用 在模板中,可以通过给元…

MacOS 命令行详解使用教程

本章讲述MacOs命令行详解的使用教程,感谢大家观看。 本人博客:如烟花般绚烂却又稍纵即逝的主页 MacOs命令行前言: 在 macOS 上,Terminal(终端) 是一个功能强大的工具,它允许用户通过命令行直接与系统交互。本教程将详细介绍 macOS…

【数据结构】线性数据结构——链表

1. 定义 链表是一种线性数据结构,由多个节点(Node)组成。每个节点存储数据和指向下一个节点的指针。与数组不同,链表的节点不需要在内存中连续存储。 2. 特点 动态存储: 链表的大小不固定,可以动态增加或…

WPF 样式

WPF 有自己的样式设置系统&#xff0c;也自带类似 Winform 的默认样式。默认样式比较一般&#xff0c;我们可以使用下面几种方式自定义好看的 wpf 样式。 1. 本地直接设置 比如更改按钮的背景色和字体颜色&#xff0c; <Grid><StackPanel Orientation"Horizon…

WOFOST作物模型(3):敏感性分析

目录 一、定义参数范围二、采样生成参数样本三、运行不同参数组下的WOFOST四、计算敏感度与可视化1.敏感度2.二阶交互敏感度五、敏感变量对产量的影响结果可视化一、定义参数范围 使用TAGP(Total Above Ground Production),地上总产量 TSUM1,temperature sum from emergence…

小程序笔记

1.小程序全局配置app.json {"pages":["pages/index/index","pages/logs/logs"],"window":{"backgroundTextStyle":"light","navigationBarBackgroundColor": "#fff","navigationBarTit…

Isaac Sim Docker 中使用 Python 脚本

笔记&#xff0c;记录个人尝试过程 主要目的&#xff1a; 1. 直接在代码中运行仿真程序&#xff0c;并对某传感器帧率进行固定化设置&#xff0c;添加噪声等操作。 2. 试多个场景的并行处理&#xff0c;和多用户/账户在远程Docker中的并行使用。 3. 对车辆模型、车辆动力学等…

SickOs1.1

下载安装 名称&#xff1a;SickOs&#xff1a;1.1 发布日期&#xff1a;2015 年 12 月 11 日作者: D4rk系列&#xff1a;SickOs sick0s1.1.7z&#xff08;大小&#xff1a;623 MB&#xff09;下载&#xff08;镜像&#xff09;&#xff1a; https: //download.vulnhub.com/sick…

DP协议:PHY层

引言 DisplayPort物理层规定了上游设备(例如DisplayPort源或分支设备的AV输出端口)和下游设备(例如DisplayPort接收器或分支设备的AV输入端口)之间直接连接的物理属性。 它将数据传输的电气规范从DisplayPort链路层解耦,从而允许链路层具体设计增强的模块化,并且也允许…

Java - 日志体系_Apache Commons Logging(JCL)日志接口库_适配Log4j2 及 源码分析

文章目录 PreApache CommonsApache Commons ProperLogging &#xff08;Apache Commons Logging &#xff09; JCL 集成Log4j2添加 Maven 依赖配置 Log4j2验证集成 源码分析1. Log4j-jcl 的背景2. log4j-jcl 的工作原理2.1 替换默认的 LogFactoryImpl2.2 LogFactoryImpl 的实现…

#C01L11P02. C01.L11.while循环.while循环和for循环的区别

唉&#xff0c;你们善良的王又来给你们发文章了&#xff01;&#xff01;&#xff01; for循环一般应用于循环次数已知的情况&#xff1b; while循环一般应用于循环次数未知的情况&#xff1b; 在一般情况下&#xff0c;这两者是可以相互转化的。 举一个简单较适合用for循环…