python生成图表

python生成图表
# 必须放在所有import最顶部解决MKL/PIL加载卡死 import os os.environ[MKL_THREADING_LAYER] GNU # 禁用PIL部分加速避免中断 os.environ[PILLOW_NO_JPEG2000] 1 import matplotlib.pyplot as plt import pandas as pd from io import StringIO import matplotlib.dates as mdates # ---------------------- 完整数据内置 ---------------------- data_text 净值日期 单位净值 累计净值 2025/12/29 0.9556 0.9556 2025/12/30 0.9595 0.9595 2025/12/31 0.9274 0.9274 2026/1/1 0.9274 0.9274 2026/1/2 0.9274 0.9274 2026/1/3 0.9274 0.9274 2026/1/4 0.9274 0.9274 2026/1/5 0.9587 0.9587 2026/1/6 0.9758 0.9758 2026/1/7 1.0108 1.0108 2026/1/8 0.9959 0.9959 2026/1/9 1.0130 1.0130 2026/1/10 1.0130 1.0130 2026/1/11 1.0130 1.0130 2026/1/12 1.0391 1.0391 2026/1/13 1.0092 1.0092 2026/1/14 1.0292 1.0292 2026/1/15 1.0151 1.0151 2026/1/16 1.0456 1.0456 2026/1/17 1.0456 1.0456 2026/1/18 1.0456 1.0456 2026/1/19 1.0620 1.0620 2026/1/20 1.0571 1.0571 2026/1/21 1.0749 1.0749 2026/1/22 1.0862 1.0862 2026/1/23 1.0872 1.0872 2026/1/24 1.0872 1.0872 2026/1/25 1.0872 1.0872 2026/1/26 1.0692 1.0692 2026/1/27 1.0927 1.0927 2026/1/28 1.0776 1.0776 2026/1/29 1.0536 1.0536 2026/1/30 1.0842 1.0842 2026/1/31 1.0842 1.0842 2026/2/1 1.0842 1.0842 2026/2/2 0.9944 0.9944 2026/2/3 1.0638 1.0638 2026/2/4 1.0405 1.0405 2026/2/5 1.0124 1.0124 2026/2/6 0.9921 0.9921 2026/2/7 0.9921 0.9921 2026/2/8 0.9921 0.9921 2026/2/9 1.0556 1.0556 2026/2/10 1.0287 1.0287 2026/2/11 1.0330 1.0330 2026/2/12 1.0870 1.0870 2026/2/13 1.0967 1.0967 2026/2/14 1.0967 1.0967 2026/2/15 1.0967 1.0967 2026/2/16 1.0967 1.0967 2026/2/17 1.0967 1.0967 2026/2/18 1.0967 1.0967 2026/2/19 1.0967 1.0967 2026/2/20 1.0967 1.0967 2026/2/21 1.0967 1.0967 2026/2/22 1.0967 1.0967 2026/2/23 1.0967 1.0967 2026/2/24 1.1248 1.1248 2026/2/25 1.1642 1.1642 2026/2/26 1.1967 1.1967 2026/2/27 1.2190 1.2190 2026/2/28 1.2190 1.2190 2026/3/1 1.2190 1.2190 2026/3/2 1.2350 1.2350 2026/3/3 1.1522 1.1522 2026/3/4 1.1110 1.1110 2026/3/5 1.2077 1.2077 2026/3/6 1.2628 1.2628 2026/3/7 1.2628 1.2628 2026/3/8 1.2628 1.2628 2026/3/9 1.2131 1.2131 2026/3/10 1.2723 1.2723 2026/3/11 1.2226 1.2226 2026/3/12 1.1750 1.1750 2026/3/13 1.1281 1.1281 2026/3/14 1.1281 1.1281 2026/3/15 1.1281 1.1281 2026/3/16 1.1398 1.1398 2026/3/17 1.0404 1.0404 2026/3/18 1.0824 1.0824 2026/3/19 1.0067 1.0067 2026/3/20 0.9817 0.9817 2026/3/21 0.9817 0.9817 2026/3/22 0.9817 0.9817 2026/3/23 0.9039 0.9039 2026/3/24 0.9423 0.9423 2026/3/25 0.9627 0.9627 2026/3/26 0.9261 0.9261 2026/3/27 0.9212 0.9212 2026/3/28 0.9212 0.9212 2026/3/29 0.9212 0.9212 2026/3/30 0.9142 0.9142 2026/3/31 0.8867 0.8867 2026/4/1 0.9392 0.9392 2026/4/2 0.9065 0.9065 2026/4/3 0.9159 0.9159 2026/4/4 0.9159 0.9159 2026/4/5 0.9159 0.9159 2026/4/6 0.9159 0.9159 2026/4/7 0.9196 0.9196 2026/4/8 1.0605 1.0605 2026/4/9 1.0721 1.0721 2026/4/10 1.1310 1.1310 2026/4/11 1.1310 1.1310 2026/4/12 1.1310 1.1310 2026/4/13 1.1597 1.1597 2026/4/14 1.1981 1.1981 2026/4/15 1.2265 1.2265 2026/4/16 1.2759 1.2759 2026/4/17 1.3194 1.3194 2026/4/18 1.3194 1.3194 2026/4/19 1.3194 1.3194 2026/4/20 1.3061 1.3061 2026/4/21 1.2973 1.2973 2026/4/22 1.3597 1.3597 2026/4/23 1.3377 1.3377 2026/4/24 1.3256 1.3256 2026/4/25 1.3256 1.3256 2026/4/26 1.3256 1.3256 2026/4/27 1.3349 1.3349 2026/4/28 1.3163 1.3163 2026/4/29 1.3280 1.3280 2026/4/30 1.3860 1.3860 2026/5/1 1.3860 1.3860 2026/5/2 1.3860 1.3860 2026/5/3 1.3860 1.3860 2026/5/4 1.3860 1.3860 2026/5/5 1.3860 1.3860 2026/5/6 1.5640 1.5640 2026/5/7 1.6581 1.6581 2026/5/8 1.7008 1.7008 2026/5/9 1.7008 1.7008 2026/5/10 1.7008 1.7008 2026/5/11 1.8202 1.8202 2026/5/12 1.8536 1.8536 2026/5/13 1.9544 1.9544 2026/5/14 1.9020 1.9020 2026/5/15 1.7750 1.7750 2026/5/16 1.7750 1.7750 2026/5/17 1.7750 1.7750 2026/5/18 1.7627 1.7627 2026/5/19 1.7448 1.7448 2026/5/20 1.7470 1.7470 2026/5/21 1.7141 1.7141 2026/5/22 1.8009 1.8009 2026/5/23 1.8009 1.8009 2026/5/24 1.8009 1.8009 2026/5/25 1.8444 1.8444 2026/5/26 1.8923 1.8923 2026/5/27 1.9985 1.9985 2026/5/28 2.0738 2.0738 2026/5/29 2.0292 2.0292 2026/5/30 2.0292 2.0292 2026/5/31 2.0292 2.0292 2026/6/1 2.0026 2.0026 2026/6/2 2.0010 2.0010 2026/6/3 2.0149 2.0149 2026/6/4 2.0355 2.0355 2026/6/5 1.8362 1.8362 2026/6/6 1.8362 1.8362 2026/6/7 1.8362 1.8362 2026/6/8 1.7505 1.7505 2026/6/9 1.8973 1.8973 2026/6/10 1.7938 1.7938 2026/6/11 1.8920 1.8920 2026/6/12 1.8520 1.8520 2026/6/13 1.8520 1.8520 2026/6/14 1.8520 1.8520 2026/6/15 2.0506 2.0506 2026/6/16 2.0812 2.0812 2026/6/17 2.2198 2.2198 2026/6/18 2.3938 2.3938 2026/6/19 2.3938 2.3938 2026/6/20 2.3938 2.3938 2026/6/21 2.3938 2.3938 2026/6/22 2.6737 2.6737 2026/6/23 2.3590 2.3590 2026/6/24 2.4849 2.4849 2026/6/25 2.7376 2.7376 # 读取文本数据 df pd.read_csv(StringIO(data_text), sep\t) # 转换日期格式 df[净值日期] pd.to_datetime(df[净值日期]) # ---------------------- 绘图配置 ---------------------- plt.rcParams[font.family] [SimHei] plt.rcParams[axes.unicode_minus] False # 加宽画布容纳更多日期 fig, ax plt.subplots(figsize(16, 8), dpi120) # 单位净值灰色线累计净值红色线 ax.plot(df[净值日期], df[单位净值], color#707070, linewidth2, label单位净值) ax.plot(df[净值日期], df[累计净值], color#D82020, linewidth2.2, label累计净值) # Y轴范围 ax.set_ylim(0.5, 2.8) # 横向网格 ax.grid(axisy, color#dddddd, linestyle-) # 核心修改增加日期刻度密度 # 主刻度每10天显示 ax.xaxis.set_major_locator(mdates.DayLocator(interval10)) # 次刻度每5天显示不标注文字仅短刻度线 ax.xaxis.set_minor_locator(mdates.DayLocator(interval5)) # 日期格式月/日 ax.xaxis.set_major_formatter(mdates.DateFormatter(%m/%d)) # 缩小字体、加大旋转避免重叠 plt.xticks(rotation70, haright, fontsize8) # 手动指定所有X轴刻度日期 import matplotlib.dates as mdates from datetime import datetime xtick_dates [ datetime(2025,12,29), datetime(2026,1,8), datetime(2026,1,18), datetime(2026,1,28), datetime(2026,2,7), datetime(2026,2,17), datetime(2026,2,27), datetime(2026,3,9), datetime(2026,3,19), datetime(2026,3,29), datetime(2026,4,8), datetime(2026,4,18), datetime(2026,4,28), datetime(2026,5,8), datetime(2026,5,18), datetime(2026,5,28), datetime(2026,6,7), datetime(2026,6,17) ] # 绑定刻度与格式 ax.set_xticks(xtick_dates) ax.xaxis.set_major_formatter(mdates.DateFormatter(%Y年%m月%d日)) plt.xticks(rotation65, haright, fontsize9) # 图例 ax.legend(locupper left, frameonFalse, fontsize11) # 隐藏上边、右边边框 ax.spines[top].set_visible(False) ax.spines[right].set_visible(False) ax.set_xlabel(净值日期, fontsize12) ax.set_ylabel(净值, fontsize12) ax.set_title(, fontsize14, pad15) plt.tight_layout() # 保存图片 plt.savefig(基金净值走势图_多日期.png) plt.show()