吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 474|回复: 2
收起左侧

[求助] python在ubuntu22.04系统中运行乱码的问题

[复制链接]
agooo 发表于 2024-7-25 18:44
本帖最后由 agooo 于 2024-7-25 18:46 编辑

环境:
win10+wsl2里面的ubuntu22.04

编程语言:
python3.x

问题:
在Windows10下面运行py,窗口的折线图里面的中文正常显示。
在wsl2里面运行py,弹出的折线图里面的中文显示乱码。
我查询了wsl2中已经正常安装了dengxian的字体文件,该检查的都查过了。
奇怪的是,我完整的代码中,其他中文选项都能正常显示,唯独折线图里面的显示不了。
我用的是:
import matplotlib.pyplot as plt
import mplcursors
来输出折线图的。

感谢大佬们拔刀相助。

微信图片_20240725184615.png

代码如下:

[Python] 纯文本查看 复制代码
            elif choice == '4':
                    # 映射 local_type_id 到 local_type_display_name 的字典
                    local_type_display_name_map = {
                        2073: '物理类',
                        2074: '历史类',
                        1: '理科',
                        2: '文科'
                    }
                    try:
                        local_type_id = int(local_type_id)
                    except ValueError:
                        print(f"Error: local_type_id 的值不正确: {local_type_id}")
                        local_type_id = None
                    # 获取 local_type_display_name
                    if local_type_id is not None:
                        local_type_display_name = local_type_display_name_map.get(local_type_id, '未知类型')
                    else:
                        local_type_display_name = '未知类型'
                    # 读取 Excel 文件
                    province_name = get_province_name(local_province_id)
                    csv_folder = os.path.join("csv", str(province_name))
                    os.makedirs(csv_folder, exist_ok=True)
                    filename = f"一分一段表_{local_type_display_name}_{province_name}_{year}.xlsx"
                    file_path = os.path.join(csv_folder, filename)
                    sheet_name = '一分一段表'
                    # 使用 pandas 读取数据
                    df = pd.read_excel(file_path, sheet_name=sheet_name)
                    # 提取数据
                    x = df.iloc[1:, 1].tolist()  # 从第二行到最后一行的 B 列数据
                    y = df.iloc[1:, 2].tolist()  # 从第二行到最后一行的 C 列数据
                    labels = df.iloc[1:, [1, 2, 3, 5, 7, 9]]  # 从第二行到最后一行的 B、C、D、F、H、J 列数据
                    # 设置字体
                    plt.rcParams['font.sans-serif'] = ['DengXian']  # 使用 DengXian 字体
                    plt.rcParams['axes.unicode_minus'] = False
                    # 绘制图表
                    fig, ax = plt.subplots(figsize=(10, 6))
                    line, = ax.plot(x, y, color='#FF6F00', marker='o', linestyle='-')  # 使用 PANTONE 1505 C 的颜色
                    # 设置标题和标签   
                    plt_title_name = f"一分一段折线图 {local_type_display_name} {province_name} {year}"
                    plt.title(plt_title_name, fontsize=14, fontweight='bold')
                    plt.xlabel('分数', fontsize=12, fontweight='bold')
                    plt.ylabel('同位次人数', fontsize=12, fontweight='bold')
                    # 设置 X 轴刻度
                    x_ticks = [750, 687, 586, 485, 384, 283, 180, 80, 0]
                    ax.set_xticks(x_ticks)
                    ax.set_xticklabels(x_ticks)
                    # 设置 X 轴刻度从大到小显示
                    ax.invert_xaxis()
                    # 设置坐标轴范围
                    ax.set_xlim(750, 0)  # X 轴范围从 750 到 0
                    ax.set_ylim(0, max(y) + 100)  # 根据数据自动设置 Y 轴范围
                    ax.grid(True)
                    # 添加动态显示功能
                    cursor = mplcursors.cursor(line, hover=True)
                    annotations = []
                    @cursor.connect("add")
                    def on_add(sel):
                        index = sel.index
                        text = '\n'.join(f"{col}: {val}" for col, val in zip(labels.columns, labels.iloc[int(index)]))
                        annotation = sel.annotation
                        annotation.set(text=text, fontsize=10, color='white', fontweight='bold', bbox=dict(facecolor='#333333', alpha=0.8, edgecolor='none'))
                        annotation.set_visible(True)
                        annotations.append(annotation)  # 保存注释对象以便后续操作
                    @cursor.connect("remove")
                    def on_remove(sel):
                        annotation = sel.annotation
                        annotation.set(text='', bbox=dict(facecolor='none', edgecolor='none'))
                        annotation.set_visible(False)
                    def on_click(event):
                        # 如果点击区域不在折线图上,则隐藏所有注释
                        if not (event.inaxes == ax and event.inaxes.get_lines() and event.inaxes.contains(event)[0]):
                            for annotation in annotations:
                                annotation.set_visible(False)
                            fig.canvas.draw()
                    # 绑定点击事件
                    fig.canvas.mpl_connect('button_press_event', on_click)
                    # 设置图形窗口标题
                    fig.canvas.manager.set_window_title(plt_title_name)
                    # 显示图表
                    plt.show()
                    os.system('cls' if os.name == 'nt' else 'clear')
                    break

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

289051401 发表于 2024-7-25 22:33
要类似import导入中文字体包吧
 楼主| agooo 发表于 2024-7-26 08:33
289051401 发表于 2024-7-25 22:33
要类似import导入中文字体包吧

没有搞定,换成plotly搞定了。
还是这个好用。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-1 03:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表