python在ubuntu22.04系统中运行乱码的问题
本帖最后由 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
来输出折线图的。
感谢大佬们拔刀相助。
代码如下:
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.tolist()# 从第二行到最后一行的 B 列数据
y = df.iloc.tolist()# 从第二行到最后一行的 C 列数据
labels = df.iloc]# 从第二行到最后一行的 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 =
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))
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)):
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
要类似import导入中文字体包吧 289051401 发表于 2024-7-25 22:33
要类似import导入中文字体包吧
没有搞定,换成plotly搞定了。
还是这个好用。
页:
[1]