用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 和…

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

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

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

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

MacOS 命令行详解使用教程

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

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…

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 的实现…

开发模式选择与最佳实践指南20241230

开发模式选择与最佳实践指南 引言 在现代软件开发中&#xff0c;选择合适的开发模式直接影响项目的开发效率和质量。本文将帮助您&#xff1a; &#x1f3af; 了解三种主流开发模式的优缺点&#x1f4a1; 根据项目特点选择最适合的开发模式&#x1f527; 掌握混合开发模式的…

IDEA错题集

一、 报java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have错。 二、一个工程在编译时报某个模块没有指定JDK。 解决方案&#xff1a; 从IDEA的菜单中&#xff0c;依次执行&#xff1a;文件-项目结构-项目设置-项目&#xff…

stm32内部flash在线读写操作

stm32内部flash在线读写操作 &#x1f4cd;相关开源库文章介绍《STM32 利用FlashDB库实现在线扇区数据管理不丢失》 ✨不同系列&#xff0c;内部flash编程有所区别。例如stm32f1是按照页擦除&#xff0c;半字&#xff08;16bit&#xff09;或全字(32bit)数据写入&#xff1b;st…

Acwing 基础算法课 数学知识 筛法求欧拉函数

【G09 筛法求欧拉函数】https://www.bilibili.com/video/BV1VP411p7Bs?vd_source57dbd16b8c7c2ad258cccce5966c5be8 闫总真是把听者当数学系转cs的来讲&#xff0c;菜逼完全听不懂&#xff0c;只能其他地再搜 欧拉函数 φ ( n ) \varphi(n) φ(n)&#xff1a;1~n中与n互质的数…

攻防世界web新手第五题supersqli

这是题目&#xff0c;题目看起来像是sql注入的题&#xff0c;先试一下最常规的&#xff0c;输入1&#xff0c;回显正常 输入1‘&#xff0c;显示错误 尝试加上注释符号#或者–或者%23&#xff08;注释掉后面语句&#xff0c;使1后面的单引号与前面的单引号成功匹配就不会报错…

SQL SERVER日常运维巡检系列之-日志

前言 做好日常巡检是数据库管理和维护的重要步骤&#xff0c;而且需要对每次巡检日期、结果进行登记&#xff0c;同时可能需要出一份巡检报告。 本系列旨在解决一些常见的困扰&#xff1a; 不知道巡检哪些东西不知道怎么样便捷体检机器太多体检麻烦生成报告困难&#xff0c;无…

小程序基础 —— 08 文件和目录结构

文件和目录结构 一个完整的小程序项目由两部分组成&#xff1a;主体文件、页面文件&#xff1a; 主体文件&#xff1a;全局文件&#xff0c;能够作用于整个小程序&#xff0c;影响小程序的每个页面&#xff0c;主体文件必须放到项目的根目录下&#xff1b; 主体文件由三部分组…

Vue 中el-table-column 进行循环,页面没渲染成功

文章目录 前言效果图代码示例可能出现的问题及原因解决思路 前言 实现效果&#xff1a;el-table-column 进行循环&#xff0c;使之代码简化 遇到的问题&#xff1a; data进行默认赋值&#xff0c;操作列的删除都可以出来&#xff0c;其他表格里面的数据没出来 效果图 示例&am…

HarmonyOS NEXT应用开发实战:一分钟写一个网络接口,JsonFormat插件推荐

在开发鸿蒙操作系统应用时&#xff0c;网络接口的实现往往是一个繁琐且重复的过程。为了提高开发效率&#xff0c;坚果派(nutpi.net)特别推出了一个非常实用的插件——JsonFormat。这款插件的主要功能是将JSON格式的数据直接转换为arkts的结构定义&#xff0c;让我们在编写接口…