[{"data":1,"prerenderedAt":2517},["ShallowReactive",2],{"blog-taxonomies":3,"blog-stats":507,"post-数据可视化\u002F2026-06-15-数据可视化-可视化库":1083},[4,11,16,21,25,29,36,39,44,47,52,58,63,66,71,76,80,84,87,93,96,101,105,110,113,117,122,127,132,136,141,143,146,151,155,157,162,165,169,173,176,179,183,186,190,193,197,200,205,208,211,214,219,222,228,234,237,239,245,249,253,256,260,266,271,276,281,283,287,290,293,298,301,304,306,308,311,314,316,318,321,327,332,337,342,347,352,354,356,358,361,365,367,369,371,374,376,378,381,386,390,393,396,400,404,407,411,413,415,417,421,423,425,428,431,433,435,437,439,441,443,446,448,450,454,456,459,461,463,465,467,469,471,473,477,483,486,488,491,493,495,497,499,501,503,505],{"category":5,"tags":6},"笔记",[7,8,9,10],"QQ","插件","LiteLoader","美化",{"category":12,"tags":13},"其他",[14,15,10],"博客","IP签名",{"category":17,"tags":18},"杂谈",[19,20],"互联网","观点",{"category":5,"tags":22},[14,23,24],"GitHub","数据可视化",{"category":5,"tags":26},[14,27,28],"访问统计","不蒜子",{"category":30,"tags":31},"工具",[32,33,34,35],"Python","爬虫","选课脚本","广州大学",{"category":5,"tags":37},[38,5],"数学分析",{"category":40,"tags":41},"算法",[42,40,43],"数据结构","线性表",{"category":40,"tags":45},[42,46],"复习",{"category":5,"tags":48},[49,50,51],"高等代数","线性代数","知识点",{"category":5,"tags":53},[14,54,55,56,57],"Typora","PicGo","图床","Markdown",{"category":30,"tags":59},[60,61,62],"Jupyter","工具配置","中文",{"category":30,"tags":64},[65,61,10],"VSCode",{"category":30,"tags":67},[68,69,70,35],"路由器","OpenWrt","校园网",{"category":12,"tags":72},[73,74,75],"网络协议","Wireshark","DEVP2P",{"category":5,"tags":77},[73,74,78,79],"Lua","解码器",{"category":5,"tags":81},[82,5,83],"常微分方程","数学",{"category":5,"tags":85},[86,5,83],"概率论",{"category":30,"tags":88},[89,90,91,92],"Docker","WSL","Windows","磁盘清理",{"category":30,"tags":94},[32,33,95,35],"课程表",{"category":5,"tags":97},[14,98,99,100],"Hexo","Gitalk","评论系统",{"category":5,"tags":102},[14,103,98,104],"Obsidian","写作工具",{"category":12,"tags":106},[107,108,109],"课题研究","泊松分布","参数估计",{"category":12,"tags":111},[107,108,109,112],"组会",{"category":12,"tags":114},[109,115,108,116],"IM模型","统计学",{"category":17,"tags":118},[119,120,121],"软考","网络规划","信息系统项目管理",{"category":30,"tags":123},[124,125,126],"Arch Linux","AppImage","Linux",{"category":5,"tags":128},[129,130,131],"编程语言","计算机科学","内存管理",{"category":5,"tags":133},[134,135],"Canvas","前端",{"category":5,"tags":137},[14,138,139,140],"GitHub Actions","Vite","部署",{"category":5,"tags":142},[135],{"category":5,"tags":144},[135,145],"系统设计",{"category":5,"tags":147},[135,148,149,150],"安全","XSS","CSRF",{"category":152,"tags":153},"项目",[134,154],"PixiJS",{"category":152,"tags":156},null,{"category":40,"tags":158},[42,159,160,161],"栈","队列","JavaScript",{"category":40,"tags":163},[42,164,161],"哈希表",{"category":5,"tags":166},[167,161,168],"ES6","Set",{"category":40,"tags":170},[40,171,172],"动态规划","背包问题",{"category":40,"tags":174},[40,175],"滑动窗口",{"category":40,"tags":177},[42,178,161],"链表",{"category":40,"tags":180},[40,181,161,182],"ACM","面试",{"category":40,"tags":184},[40,161,185],"数据类型转换",{"category":40,"tags":187},[42,188,178,189],"顺序表","TypeScript",{"category":5,"tags":191},[135,154,134,192],"渲染",{"category":5,"tags":194},[135,195,134,196],"富文本编辑","wangEditor",{"category":40,"tags":198},[199,40,178],"力扣",{"category":5,"tags":201},[202,203,204,91],"DNS","加密","网络安全",{"category":5,"tags":206},[135,207],"Axios",{"category":5,"tags":209},[135,207,189,210],"接口封装",{"category":5,"tags":212},[135,213,145],"JWT",{"category":152,"tags":215},[134,216,217,154,218],"画布","React","项目开发",{"category":17,"tags":220},[221],"日志",{"category":5,"tags":223},[224,225,226,227],"Neo4j","图数据库","中心度分析","PageRank",{"category":12,"tags":229},[230,231,232,233],"论文","机器学习","随机森林","保险欺诈",{"category":5,"tags":235},[236],"人工智能",{"category":5,"tags":238},[231,40,32],{"category":12,"tags":240},[241,242,243,244],"共识算法","最长链","区块链","算法设计",{"category":5,"tags":246},[161,247,248,135],"闭包","作用域",{"category":5,"tags":250},[14,138,251,252],"RSS","自动化",{"category":30,"tags":254},[89,90,91,255],"安装",{"category":30,"tags":257},[258,91,259],"MSYS2","开发环境",{"category":5,"tags":261},[262,263,264,265],"团队协作","Git","Commit规范","代码审查",{"category":30,"tags":267},[268,269,270],"oh-my-posh","终端美化","CLI",{"category":5,"tags":272},[273,274,275],"上下文工程","Agent","RAG",{"category":5,"tags":277},[278,279,280],"前端工程化","技术选型","工程基建",{"category":5,"tags":282},[275],{"category":5,"tags":284},[285,286],"SDD","规格驱动开发",{"category":5,"tags":288},[289],"neovim",{"category":5,"tags":291},[292],"技术写作",{"category":5,"tags":294},[295,32,296,89,297],"FastAPI","后端","工程实践",{"category":152,"tags":299},[274,300],"Harness Engineering",{"category":5,"tags":302},[303],"RFC",{"category":152,"tags":305},[274,300,275],{"category":152,"tags":307},[274],{"category":40,"tags":309},[199,40,161,310],"两数之和",{"category":40,"tags":312},[199,40,161,313],"双指针",{"category":40,"tags":315},[199,40,161,178],{"category":40,"tags":317},[199,40,161,175],{"category":40,"tags":319},[199,40,161,320],"回溯",{"category":5,"tags":322},[323,324,325,326],"分布式处理与计算","Spark","Scala","RDD",{"category":5,"tags":328},[323,329,330,331],"线性回归","逻辑回归","监督学习",{"category":5,"tags":333},[323,334,335,336],"数值优化","牛顿法","收敛性",{"category":5,"tags":338},[323,339,340,341],"PCA","数据降维","正则化",{"category":5,"tags":343},[323,344,345,346],"聚类","层次聚类","K-Means",{"category":5,"tags":348},[323,349,350,351],"随机模拟","统计推断","EM算法",{"category":5,"tags":353},[24],{"category":5,"tags":355},[24],{"category":5,"tags":357},[24],{"category":40,"tags":359},[42,360],"图论",{"category":40,"tags":362},[42,363,364],"树","二叉树",{"category":40,"tags":366},[42,160],{"category":40,"tags":368},[42],{"category":40,"tags":370},[42,159],{"category":40,"tags":372},[42,40,373],"复杂度分析",{"category":40,"tags":375},[42,43,178],{"category":40,"tags":377},[42,43,188],{"category":40,"tags":379},[42,380],"基础概念",{"category":17,"tags":382},[383,384,385],"随记","照片","高中",{"category":17,"tags":387},[383,388,389],"团建","战地",{"category":17,"tags":391},[383,392],"生活",{"category":17,"tags":394},[383,395],"文学",{"category":17,"tags":397},[383,398,399],"SCP","模因",{"category":17,"tags":401},[383,402,403],"画集","艺术",{"category":17,"tags":405},[14,406,383],"写作",{"category":17,"tags":408},[383,409,410],"音乐","摇滚",{"category":17,"tags":412},[383,392],{"category":17,"tags":414},[383,409],{"category":17,"tags":416},[383,35,392],{"category":17,"tags":418},[383,419,420],"同人","手书",{"category":17,"tags":422},[383,392],{"category":17,"tags":424},[383,392],{"category":17,"tags":426},[383,427],"植物",{"category":17,"tags":429},[383,430],"读书",{"category":17,"tags":432},[383,392],{"category":17,"tags":434},[383,392],{"category":17,"tags":436},[383,392],{"category":17,"tags":438},[383,392],{"category":17,"tags":440},[383,392],{"category":17,"tags":442},[383,392],{"category":17,"tags":444},[14,445,383],"一周年",{"category":17,"tags":447},[383,392],{"category":17,"tags":449},[383,392],{"category":17,"tags":451},[35,452,453],"开源组织","SITE-193",{"category":17,"tags":455},[383,392],{"category":17,"tags":457},[383,458],"年末",{"category":17,"tags":460},[383,392],{"category":17,"tags":462},[383,392],{"category":17,"tags":464},[14,17],{"category":17,"tags":466},[383,392],{"category":17,"tags":468},[383,392],{"category":17,"tags":470},[383,392],{"category":17,"tags":472},[383,392],{"category":17,"tags":474},[383,475,476],"游戏","Control",{"category":30,"tags":478},[479,480,481,482],"Quadim","图像处理","四叉树","Rust",{"category":17,"tags":484},[14,485],"上线纪念",{"category":17,"tags":487},[383,395],{"category":30,"tags":489},[203,490],"测试",{"category":17,"tags":492},[383],{"category":17,"tags":494},[383,392],{"category":17,"tags":496},[383],{"category":5,"tags":498},[40],{"category":5,"tags":500},[40],{"category":5,"tags":502},[40],{"category":5,"tags":504},[40],{"category":5,"tags":506},[40],[508,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,579,583,587,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646,650,654,658,662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726,730,734,738,742,746,750,754,758,762,766,770,774,778,782,786,790,794,798,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865,869,873,877,881,885,889,893,897,901,904,907,911,915,919,923,927,930,934,938,942,946,950,954,957,961,965,969,973,977,981,984,988,992,996,1000,1004,1007,1011,1015,1019,1023,1027,1031,1035,1039,1043,1047,1051,1055,1059,1063,1067,1071,1075,1079],{"path":509,"words":510,"published":511,"date":156},"\u002Fposts\u002F2024\u002F2024-06-25-liteloaderqqnt",1296,"2024-06-25 11:03:08",{"path":513,"words":514,"published":515,"date":156},"\u002Fposts\u002F2024\u002F2024-06-26-ip签名",0,"2024-06-26 22:53:53",{"path":517,"words":518,"published":519,"date":156},"\u002Fposts\u002F2024\u002F2024-06-29-何加盐中文互联网正在加速崩塌",4853,"2024-06-29 00:47:13",{"path":521,"words":522,"published":523,"date":156},"\u002Fposts\u002F2024\u002F2024-07-12-github-chart",270,"2024-07-12 20:02:50",{"path":525,"words":526,"published":527,"date":156},"\u002Fposts\u002F2024\u002F2024-07-14-访客数统计",192,"2024-07-24 01:34:28",{"path":529,"words":530,"published":531,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-广大选课脚本",110,"2024-07-26 01:34:28",{"path":533,"words":534,"published":535,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数学分析笔记其二",14,"2024-07-26 23:54:02",{"path":537,"words":538,"published":539,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习其二",12856,"2024-07-26 02:48:08",{"path":541,"words":542,"published":543,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习相关",32856,"2024-07-26 02:24:14",{"path":545,"words":546,"published":547,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-线性代数与空间解析几何知识点全汇总",6110,"2024-07-26 03:27:55",{"path":549,"words":550,"published":551,"date":156},"\u002Fposts\u002F2024\u002F2024-07-31-typora-picgo-兰空图床打造markdown写作环境",311,"2024-07-31 12:56:23",{"path":553,"words":554,"published":555,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-jupyter配置中文",441,"2024-09-02 23:49:05",{"path":557,"words":558,"published":559,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-自定义vscode背景图片",100,"2024-09-02 23:39:00",{"path":561,"words":562,"published":563,"date":156},"\u002Fposts\u002F2024\u002F2024-09-03-制作gzhu校园网路由器",1423,"2024-09-03 23:43:18",{"path":565,"words":566,"published":567,"date":156},"\u002Fposts\u002F2024\u002F2024-09-26-09-25-2024",136,"2024-09-26 00:49:26",{"path":569,"words":570,"published":571,"date":156},"\u002Fposts\u002F2024\u002F2024-11-04-创建一个网络包解码器分析devp2p协议",1943,"2024-11-04 16:45:19",{"path":573,"words":574,"published":575,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记常微分",16,"2024-12-09 22:51:00",{"path":577,"words":574,"published":578,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记概率论","2025-03-09 22:51:00",{"path":580,"words":581,"published":582,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-windows下释放docker占用的wsl空间",164,"2025-03-01 13:54:15",{"path":584,"words":585,"published":586,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-爬虫实战-爬取广州大学课程表",774,"2025-03-01 14:55:48",{"path":588,"words":530,"published":589,"date":156},"\u002Fposts\u002F2025\u002F2025-04-03-hexo集成gitalk的问题","2025-04-03 14:26:34",{"path":591,"words":592,"published":593,"date":156},"\u002Fposts\u002F2025\u002F2025-09-22-记一次配置obsidian配合hexo写博客",92,"2025-09-22 16:47:52",{"path":595,"words":596,"published":597,"date":156},"\u002Fposts\u002F2025\u002F2025-10-24-10-20课题",204,"2025-10-24 08:15:01",{"path":599,"words":600,"published":601,"date":156},"\u002Fposts\u002F2025\u002F2025-11-02-组会朝花夕拾",501,"2025-11-02 18:56:59",{"path":603,"words":604,"published":605,"date":156},"\u002Fposts\u002F2025\u002F2025-11-05-基于随机加权推断模型im的参数估计算法",481,"2025-11-05 20:51:41",{"path":607,"words":608,"published":609,"date":156},"\u002Fposts\u002F2025\u002F2025-11-09-关于软考高项网规",884,"2025-11-09 19:54:52",{"path":611,"words":612,"published":613,"date":156},"\u002Fposts\u002F2025\u002F2025-11-17-arch-linux运行appimage相关",365,"2025-11-17 09:59:59",{"path":615,"words":616,"published":617,"date":156},"\u002Fposts\u002F2025\u002F2025-11-19-相关概念",2058,"2025-11-19 11:06:20",{"path":619,"words":620,"published":621,"date":156},"\u002Fposts\u002F2025\u002F2025-11-21-web可视化实践canvas",6393,"2025-11-21 14:50:48",{"path":623,"words":624,"published":625,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-使用-github-actions-自动部署基于vite的项目到-github-pages",272,"2025-11-23 01:59:24",{"path":627,"words":628,"published":629,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-关于前端包管理器npmpnpmyarn和bun",4890,"2025-11-22 21:21:15",{"path":631,"words":632,"published":633,"date":156},"\u002Fposts\u002F2025\u002F2025-11-23-undo-redo-机制具体实现",7839,"2025-11-23 19:15:00",{"path":635,"words":636,"published":637,"date":156},"\u002Fposts\u002F2025\u002F2025-11-27-前端安全-关于xss与crsf",1866,"2025-11-28 02:05:25",{"path":639,"words":640,"published":641,"date":156},"\u002Fposts\u002F2025\u002F2025-12-05-现代协同-2d-画布编辑器pixijs-v8",4285,"2025-12-05 02:00:16",{"path":643,"words":644,"published":645,"date":156},"\u002Fposts\u002F2025\u002F2025-12-07-杂谈-课题组系统设计",3710,"2025-12-07 21:09:33",{"path":647,"words":648,"published":649,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-javascript中的数组方法与栈stack和队列queue的实现",474,"2025-11-29 16:58:15",{"path":651,"words":652,"published":653,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript-实现哈希表",189,"2025-11-27 11:31:39",{"path":655,"words":656,"published":657,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript的set方法",332,"2025-12-25 15:26:18",{"path":659,"words":660,"published":661,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于动态规划(背包问题为例)",1238,"2025-11-17 18:24:04",{"path":663,"words":664,"published":665,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于滑动窗口",712,"2025-11-20 15:04:40",{"path":667,"words":668,"published":669,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于链表(javascript)",500,"2025-11-25 13:00:48",{"path":671,"words":672,"published":673,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-面试算法acm模式构建构建输入输出模板",2051,"2025-12-25 23:09:45",{"path":675,"words":676,"published":677,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascript-数字数组字符串的处理",483,"2025-12-26 11:20:25",{"path":679,"words":680,"published":681,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascripttypescript-的顺序表链表实现",446,"2025-12-26 12:16:12",{"path":683,"words":684,"published":685,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-1-实现基础yuan素渲染和状态控制",2136,"2025-12-28 01:23:08",{"path":687,"words":688,"published":689,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-2-实现富文本编辑",1838,"2025-12-28 02:58:47",{"path":691,"words":692,"published":693,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-算法刷题-关于链表操作",2135,"2025-12-27 16:12:42",{"path":695,"words":696,"published":697,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-配置dnscrypt-proxy实现加密dns服务windows",1899,"2025-11-15 01:06:37",{"path":699,"words":700,"published":701,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-关于网络请求xhrajaxfetchaxios",7788,"2025-10-28 15:48:46",{"path":703,"words":704,"published":705,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-接口封装与请求规范axios为例",2373,"2025-12-29 01:01:18",{"path":707,"words":708,"published":709,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-身份验证管理-基于-jwt-token-的实现",2709,"2025-11-23 22:04:41",{"path":711,"words":712,"published":713,"date":156},"\u002Fposts\u002F2025\u002F2025-12-29-记canvas画布项目开发",6254,"2025-12-29 04:52:15",{"path":715,"words":716,"published":717,"date":156},"\u002Fposts\u002F2025\u002Fabout-site",116,"2025-03-31 16:44:24",{"path":719,"words":720,"published":721,"date":156},"\u002Fposts\u002F2025\u002F使用neo4j图数据科学库gds进行中心度分析",143,"2025-04-02 23:37:24",{"path":723,"words":724,"published":725,"date":156},"\u002Fposts\u002F2026\u002F2026-01-03-论文实训草稿",10445,"2026-01-03 14:10:49",{"path":727,"words":728,"published":729,"date":156},"\u002Fposts\u002F2026\u002F2026-01-06-人工智能导论",11461,"2026-01-07 03:25:49",{"path":731,"words":732,"published":733,"date":156},"\u002Fposts\u002F2026\u002F2026-01-07-机器学习相关算法",82,"2026-01-08 02:28:13",{"path":735,"words":736,"published":737,"date":156},"\u002Fposts\u002F2026\u002F2026-01-16-关于低复杂度最长链共识算法设计",4466,"2026-01-16 10:33:23",{"path":739,"words":740,"published":741,"date":156},"\u002Fposts\u002F2026\u002F2026-01-19-杂记2026-01-19",5754,"2026-01-20 01:03:26",{"path":743,"words":744,"published":745,"date":156},"\u002Fposts\u002F2026\u002F2026-01-22-github-action-自动同步博客到-github-主页",1069,"2026-01-22 16:31:47",{"path":747,"words":748,"published":749,"date":156},"\u002Fposts\u002F2026\u002F2026-03-01-windows-wsl安装docker",257,"2026-03-01 20:55:31",{"path":751,"words":752,"published":753,"date":156},"\u002Fposts\u002F2026\u002F2026-03-14-关于-msys2",701,"2026-03-15 03:05:04",{"path":755,"words":756,"published":757,"date":156},"\u002Fposts\u002F2026\u002F2026-03-28-团队项目协作规范随记",2419,"2026-03-29 05:33:50",{"path":759,"words":760,"published":761,"date":156},"\u002Fposts\u002F2026\u002F2026-03-29-oh-my-posh配置分享",104,"2026-03-29 16:34:43",{"path":763,"words":764,"published":765,"date":156},"\u002Fposts\u002F2026\u002F2026-06-13-从上下文工程到-agent-harness-engineering",8840,"2026-06-13 21:06:20",{"path":767,"words":768,"published":769,"date":156},"\u002Fposts\u002F2026\u002F2026-07-13-简谈前端基建质量标准与ai友好建设",3814,"2026-07-13 21:06:20",{"path":771,"words":772,"published":773,"date":156},"\u002Fposts\u002F2026\u002F2026-07-15-agentic-rag-系统实践",13357,"2026-07-15 21:06:20",{"path":775,"words":776,"published":777,"date":156},"\u002Fposts\u002F2026\u002F2026-07-18-简谈sdd规范驱动开发-copy",4476,"2026-07-18 11:06:20",{"path":779,"words":780,"published":781,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-个人neovim配置分享",366,"2026-07-22 13:46:50",{"path":783,"words":784,"published":785,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-关于技术写作-设计文档",6763,"2026-07-20 13:46:50",{"path":787,"words":788,"published":789,"date":156},"\u002Fposts\u002F2026\u002F2026-07-29-fastapi-工程实践随记",3417,"2026-07-29 04:58:34",{"path":791,"words":792,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-06-19-rfc-liskin_code_agent",3563,"2026-06-19 15:18:20",{"path":795,"words":796,"published":797,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-07-25-rfc-glushkov_ogas",13461,"2026-07-28 23:46:50",{"path":799,"words":800,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-08-03-adr-ogas-arkhiv",2698,{"path":802,"words":803,"published":804,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002Frag\u002F2026-08-12-arkhiv_rag-vol-1",4366,"2026-08-12 15:18:20",{"path":806,"words":807,"published":808,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-25-力扣百题速练javascripttypescriptvol-1",3108,"2025-12-25 13:57:08",{"path":810,"words":811,"published":812,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-26-力扣百题速练javascripttypescriptvol-2",3185,"2025-12-26 13:57:08",{"path":814,"words":815,"published":816,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-28-力扣百题速练javascripttypescriptvol-3",2533,"2025-12-29 02:15:44",{"path":818,"words":819,"published":820,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-17-力扣百题速练javascripttypescriptvol-4",3024,"2026-01-17 22:53:01",{"path":822,"words":823,"published":824,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-19-力扣百题速练javascripttypescriptvol-5",293,"2026-01-19 15:15:12",{"path":826,"words":827,"published":828,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算spark系统与scala语言",4320,"2026-07-06 14:10:49",{"path":830,"words":831,"published":832,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算分类与回归分析",2081,"2026-07-07 12:40:29",{"path":834,"words":835,"published":836,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数值优化方法",2182,"2026-07-07 13:50:29",{"path":838,"words":839,"published":840,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数据降维",1583,"2026-07-07 21:50:29",{"path":842,"words":843,"published":844,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算聚类分析",1882,"2026-07-07 16:50:29",{"path":846,"words":847,"published":848,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算随机模拟与统计推断",2433,"2026-07-06 22:40:29",{"path":850,"words":851,"published":852,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-基本图像",10011,"2026-06-14 20:18:20",{"path":854,"words":855,"published":856,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-概论",10030,"2026-06-14 15:18:20",{"path":858,"words":859,"published":860,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-15-数据可视化-可视化库",2032,"2026-06-15 20:18:20",{"path":862,"words":863,"published":864,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-图",5451,"2025-04-15 20:48:06",{"path":866,"words":867,"published":868,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-树",4211,"2025-04-30 02:19:06",{"path":870,"words":871,"published":872,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-队列",921,"2025-04-11 15:30:08",{"path":874,"words":875,"published":876,"date":156},"\u002Fposts\u002F数据结构\u002F关于数据结构的一些想法",456,"2025-04-04 19:13:49",{"path":878,"words":879,"published":880,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-栈",920,"2025-04-18 00:17:37",{"path":882,"words":883,"published":884,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-算法复杂度",2153,"2025-04-05 16:09:55",{"path":886,"words":887,"published":888,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表链表",4572,"2025-04-06 00:24:40",{"path":890,"words":891,"published":892,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表顺序表",4191,"2025-04-05 22:09:59",{"path":894,"words":895,"published":896,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-绪论",2881,"2025-04-05 11:31:22",{"path":898,"words":899,"published":156,"date":900},"\u002Fposts\u002F杂记\u002F2023-12-26-2023年12月26日",7,"2023-12-26 23:51:33",{"path":902,"words":899,"published":156,"date":903},"\u002Fposts\u002F杂记\u002F2024-01-01-2024团建","2024-01-01 01:51:27",{"path":905,"words":581,"published":156,"date":906},"\u002Fposts\u002F杂记\u002F2024-01-09-随记","2024-01-09 20:50:35",{"path":908,"words":909,"published":156,"date":910},"\u002Fposts\u002F杂记\u002F2024-03-12-花名",5275,"2024-03-12 16:04:23",{"path":912,"words":913,"published":156,"date":914},"\u002Fposts\u002F杂记\u002F2024-04-15-逆模因",1353,"2024-04-15 00:26:16",{"path":916,"words":917,"published":156,"date":918},"\u002Fposts\u002F杂记\u002F2024-05-03-艺作",27,"2024-05-03 00:01:00",{"path":920,"words":921,"published":156,"date":922},"\u002Fposts\u002F杂记\u002F2024-05-21-关于博客",1720,"2024-02-21 23:21:11",{"path":924,"words":925,"published":156,"date":926},"\u002Fposts\u002F杂记\u002F2024-06-20-dnvrc维克多崔专访-2023",2036,"2024-06-20 00:28:39",{"path":928,"words":760,"published":156,"date":929},"\u002Fposts\u002F杂记\u002F2024-06-25-6月25日随记","2024-06-25 12:46:36",{"path":931,"words":932,"published":156,"date":933},"\u002Fposts\u002F杂记\u002F2024-06-25-歌名-想見星星",148,"2024-06-25 22:47:59",{"path":935,"words":936,"published":156,"date":937},"\u002Fposts\u002F杂记\u002F2024-07-11-桂花岗",6,"2024-07-11 00:28:17",{"path":939,"words":940,"published":156,"date":941},"\u002Fposts\u002F杂记\u002F2024-07-15-rolling-bocci",9,"2024-07-15 21:25:56",{"path":943,"words":944,"published":156,"date":945},"\u002Fposts\u002F杂记\u002F2024-07-22-七月九日",34,"2024-07-09 17:54:23",{"path":947,"words":948,"published":156,"date":949},"\u002Fposts\u002F杂记\u002F2024-07-22-六月随记",1052,"2024-07-22 01:03:19",{"path":951,"words":952,"published":156,"date":953},"\u002Fposts\u002F杂记\u002F2024-07-22-石菖蒲",41,"2024-07-10 01:26:05",{"path":955,"words":514,"published":156,"date":956},"\u002Fposts\u002F杂记\u002F2024-07-23-新书","2024-07-23 01:05:49",{"path":958,"words":959,"published":156,"date":960},"\u002Fposts\u002F杂记\u002F2024-07-29-年前",74,"2024-07-29 23:59:07",{"path":962,"words":963,"published":156,"date":964},"\u002Fposts\u002F杂记\u002F2024-07-30-周边",138,"2024-07-30 02:03:23",{"path":966,"words":967,"published":156,"date":968},"\u002Fposts\u002F杂记\u002F2024-07-31-2024-7-31日",185,"2024-07-31 01:21:52",{"path":970,"words":971,"published":156,"date":972},"\u002Fposts\u002F杂记\u002F2024-08-02-八月",1710,"2024-08-30 00:31:02",{"path":974,"words":975,"published":156,"date":976},"\u002Fposts\u002F杂记\u002F2024-09-01-九月",1484,"2024-09-26 16:30:15",{"path":978,"words":979,"published":156,"date":980},"\u002Fposts\u002F杂记\u002F2024-09-08-2024年9月8日",97,"2024-09-08 13:59:36",{"path":982,"words":514,"published":156,"date":983},"\u002Fposts\u002F杂记\u002F2024-09-19-博客站的一周年","2024-09-18 23:36:24",{"path":985,"words":986,"published":156,"date":987},"\u002Fposts\u002F杂记\u002F2024-10-03-十月",1028,"2024-10-31 23:54:27",{"path":989,"words":990,"published":156,"date":991},"\u002Fposts\u002F杂记\u002F2024-11-04-十一月",2134,"2024-11-30 00:04:39",{"path":993,"words":994,"published":156,"date":995},"\u002Fposts\u002F杂记\u002F2024-11-10-gzhu-site-193",80,"2024-11-10 19:19:12",{"path":997,"words":998,"published":156,"date":999},"\u002Fposts\u002F杂记\u002F2024-12-01-十二月",455,"2024-12-30 23:13:47",{"path":1001,"words":1002,"published":156,"date":1003},"\u002Fposts\u002F杂记\u002F2024-12-21-年末",23,"2024-12-21 23:21:49",{"path":1005,"words":522,"published":156,"date":1006},"\u002Fposts\u002F杂记\u002F2025-01-30-一月","2025-01-30 23:44:41",{"path":1008,"words":1009,"published":156,"date":1010},"\u002Fposts\u002F杂记\u002F2025-03-01-二月",224,"2025-02-28 00:11:08",{"path":1012,"words":1013,"published":156,"date":1014},"\u002Fposts\u002F杂记\u002F2025-03-01-博客杂谈",344,"2025-03-01 16:03:18",{"path":1016,"words":1017,"published":156,"date":1018},"\u002Fposts\u002F杂记\u002F2025-03-05-三月",2090,"2025-03-05 19:17:28",{"path":1020,"words":1021,"published":156,"date":1022},"\u002Fposts\u002F杂记\u002F2025-07-10-七月",361,"2025-07-10 22:04:32",{"path":1024,"words":1025,"published":156,"date":1026},"\u002Fposts\u002F杂记\u002F2025-09-21-九月",781,"2025-09-21 20:53:37",{"path":1028,"words":1029,"published":156,"date":1030},"\u002Fposts\u002F杂记\u002F2025-10-09-十月",591,"2025-10-09 00:35:07",{"path":1032,"words":1033,"published":156,"date":1034},"\u002Fposts\u002F杂记\u002Fcontrol",13,"2023-09-25 13:03:59",{"path":1036,"words":1037,"published":156,"date":1038},"\u002Fposts\u002F杂记\u002Fquadim四叉树图像处理",1094,"2023-10-21 11:27:06",{"path":1040,"words":1041,"published":156,"date":1042},"\u002Fposts\u002F杂记\u002Fsuccess",24,"2023-09-22 15:59:07",{"path":1044,"words":1045,"published":156,"date":1046},"\u002Fposts\u002F杂记\u002F三光年",295,"2023-11-18 04:18:40",{"path":1048,"words":1049,"published":156,"date":1050},"\u002Fposts\u002F杂记\u002F加密测试",961,"2023-11-21 14:24:01",{"path":1052,"words":1053,"published":156,"date":1054},"\u002Fposts\u002F杂记\u002F啊啊啊啊啊啊啊",54,"2023-09-20 17:29:33",{"path":1056,"words":1057,"published":156,"date":1058},"\u002Fposts\u002F杂记\u002F杂谈",124,"2023-09-25 23:11:32",{"path":1060,"words":1061,"published":156,"date":1062},"\u002Fposts\u002F杂记\u002F艹",25,"2023-10-21 17:40:43",{"path":1064,"words":1065,"published":1066,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习卷积神经网络",3168,"2026-06-07 11:23:08",{"path":1068,"words":1069,"published":1070,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习循环神经网络",2348,"2026-06-07 11:33:08",{"path":1072,"words":1073,"published":1074,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习改进学习方法",3360,"2026-06-07 10:13:08",{"path":1076,"words":1077,"published":1078,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习深度生成模型",2727,"2026-06-07 11:43:08",{"path":1080,"words":1081,"published":1082,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习神经网络基础",3205,"2026-06-07 10:03:08",{"id":1084,"title":1085,"abbrlink":1086,"body":1087,"category":5,"cover":2506,"date":156,"description":2507,"extension":2508,"mathjax":2509,"meta":2510,"navigation":2509,"path":858,"published":860,"readingMinutes":899,"seo":2513,"stem":2514,"sticky":156,"swiper_index":156,"tags":2515,"updated":156,"words":859,"__hash__":2516},"posts\u002Fposts\u002F数据可视化\u002F2026-06-15-数据可视化-可视化库.md","2026-06-14-数据可视化 Vol.3 可视化库","ec34ebf1",{"type":1088,"value":1089,"toc":2476},"minimark",[1090,1095,1098,1103,1143,1153,1155,1159,1195,1200,1206,1211,1217,1223,1229,1239,1245,1250,1256,1258,1262,1308,1314,1316,1320,1326,1328,1332,1426,1432,1434,1438,1443,1455,1461,1467,1578,1582,1595,1601,1605,1621,1629,1634,1640,1645,1758,1762,1768,1770,1774,1778,1798,1806,1812,1817,1913,1917,1926,1932,1937,1943,1947,1952,1957,1963,1967,1973,1977,1983,1987,1993,1997,2327,2331,2452,2454,2458,2464,2466,2470],[1091,1092,1094],"h1",{"id":1093},"matplotlib-seaborn","matplotlib \u002F Seaborn",[1096,1097],"hr",{},[1099,1100,1102],"h2",{"id":1101},"一全局配置","一、全局配置",[1104,1105,1106],"blockquote",{},[1107,1108,1109,1113,1114,1118,1119,1122,1123,1126,1127,1130,1131,1134,1135,1138,1139,1142],"p",{},[1110,1111,1112],"strong",{},"字体配置","：通过 ",[1115,1116,1117],"code",{},"rcParams"," 字典全局修改 matplotlib 的运行时配置参数。\n",[1115,1120,1121],{},"font.sans-serif"," 指定无衬线字体族的回退列表，matplotlib 按列表顺序查找第一个系统中已安装的字体。\n",[1115,1124,1125],{},"axes.unicode_minus"," 设为 ",[1115,1128,1129],{},"False"," 是为了让 matplotlib 使用 ASCII 连字符 ",[1115,1132,1133],{},"-"," 替代 Unicode 负号 ",[1115,1136,1137],{},"−","，\n因为很多中文字体缺这个 Unicode 字符，会显示为方块 □。\n这些配置放在 ",[1115,1140,1141],{},"import"," 之后、任何绘图之前，对所有后续图表生效。",[1144,1145,1151],"pre",{"className":1146,"code":1148,"language":1149,"meta":1150},[1147],"language-python","import matplotlib.pyplot as plt               # 导入 pyplot 模块，约定别名为 plt\n\n# ===== 字体配置 =====\nplt.rcParams['font.sans-serif'] = ['SimHei']   # 【字体配置】无衬线字体族列表，SimHei=黑体(Windows自带)，\n                                               # 也可用 'Microsoft YaHei'(微软雅黑)、'WenQuanYi Micro Hei'(Linux文泉驿)、\n                                               # 'PingFang SC'(macOS苹方)；matplotlib 按列表顺序查找第一个可用字体\n\nplt.rcParams['axes.unicode_minus'] = False     # 【字体配置】关闭 Unicode 负号，用 ASCII '-' 替代 Unicode '−'，\n                                               # 避免中文字体缺失该字符导致负号显示为方块 □\n\n# ===== 画布默认值 =====\nplt.rcParams['figure.figsize'] = (8, 5)        # 全局默认画布尺寸：宽8英寸、高5英寸（所有未显式指定 figsize 的图都用这个）\nplt.rcParams['figure.dpi'] = 100               # 全局默认分辨率：100 dots per inch，控制屏幕上图片的像素密度\n                                               # 最终像素数 = figsize × dpi，如 8×100=800px 宽\n","python","",[1115,1152,1148],{"__ignoreMap":1150},[1096,1154],{},[1099,1156,1158],{"id":1157},"二figure-axes-创建区","二、Figure \u002F Axes 创建区",[1104,1160,1161],{},[1107,1162,1163,1166,1167,1170,1171,1174,1175,1178,1179,1182,1183,1186,1187,1190,1191,1194],{},[1110,1164,1165],{},"子图","： API 是 ",[1115,1168,1169],{},"plt.subplots()","，它一次性创建 Figure（画布容器）和 Axes（坐标轴\u002F子图区域）对象。\n",[1115,1172,1173],{},"nrows"," 和 ",[1115,1176,1177],{},"ncols"," 定义子图网格的行列数，返回的 ",[1115,1180,1181],{},"axes"," 是一个二维 NumPy 数组，通过 ",[1115,1184,1185],{},"axes[row, col]"," 索引操作每个子图。\n这是\"面向对象\"写法，比老的 ",[1115,1188,1189],{},"plt.subplot()"," 更灵活——你可以对每个子图单独设置标题、刻度、图例等，互不干扰。\n最后用 ",[1115,1192,1193],{},"plt.tight_layout()"," 自动计算并调整子图之间的间距，防止标签文字重叠\u002F被裁切。",[1107,1196,1197],{},[1110,1198,1199],{},"单图",[1144,1201,1204],{"className":1202,"code":1203,"language":1149,"meta":1150},[1147],"fig, ax = plt.subplots(figsize=(8, 5), dpi=100)\n# 【子图】创建一个包含单个 Axes 的 Figure；fig 是整张画布，ax 是画布上的唯一坐标轴区域\n# figsize 参数会覆盖全局 rcParams 中的默认值，单位是英寸 (width, height)\n# dpi=100 表示该图的分辨率为 100 像素\u002F英寸，最终像素 = 800×500\n",[1115,1205,1203],{"__ignoreMap":1150},[1107,1207,1208],{},[1110,1209,1210],{},"多子图（网格布局）",[1144,1212,1215],{"className":1213,"code":1214,"language":1149,"meta":1150},[1147],"fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))\n# 【子图】创建 2行×2列 共4个子图的网格，axes 是 shape=(2,2) 的 ndarray\n# figsize=(10,8) 指定整个画布的大小(宽10,高8英寸)，每个子图自动均分画布空间\n\naxes[0, 0].plot(x1, y1, color='blue')        # 【子图】通过行列索引 [行, 列] 访问第1个子图，在上面画折线图\naxes[0, 1].bar(x2, y2, color='orange')       # 【子图】访问第2个子图（第0行第1列），在上面画柱状图\naxes[1, 0].scatter(x3, y3, color='green')    # 【子图】访问第3个子图（第1行第0列），在上面画散点图\naxes[1, 1].hist(data, bins=20)               # 【子图】访问第4个子图（第1行第1列），在上面画直方图\n\n# 遍历所有子图做统一设置（如添加标题、去边框）\nfor i, row in enumerate(axes):               # 遍历行\n    for j, ax in enumerate(row):             # 遍历列\n        ax.set_title(f'子图 {i+1},{j+1}')     # 【子图】给每个子图分别设置标题\n        ax.spines['top'].set_visible(False)   # 去顶边框\n        ax.spines['right'].set_visible(False) # 去右边框\n\nplt.tight_layout()                           # 【子图】自动调整子图间距(padding)，\n                                             # 防止相邻子图的标签\u002F标题重叠，是最后一步布局操作\n",[1115,1216,1214],{"__ignoreMap":1150},[1107,1218,1219,1222],{},[1110,1220,1221],{},"plt.subplots 解包规则","（易错点）",[1144,1224,1227],{"className":1225,"code":1226,"language":1149,"meta":1150},[1147],"# nrows=1, ncols=1 时，axes 是单个对象，直接赋值\nfig, ax = plt.subplots(1, 1)                 # ✅ ax 是 Axes 对象，可直接 .plot()\n\n# nrows=1, ncols>1 时，axes 是一维数组\nfig, axes = plt.subplots(1, 3)               # ✅ axes 是 shape=(3,) 的一维数组\naxes[0].plot(x, y)                           # ✅ 用一维索引访问\n\n# nrows>1, ncols>1 时，axes 是二维数组\nfig, axes = plt.subplots(2, 3)               # ✅ axes 是 shape=(2,3) 的二维数组\naxes[0, 1].plot(x, y)                        # ✅ 用二维索引 [行, 列] 访问\n",[1115,1228,1226],{"__ignoreMap":1150},[1107,1230,1231,1234,1235,1238],{},[1110,1232,1233],{},"不规则子图布局","（使用 ",[1115,1236,1237],{},"subplot_mosaic","，matplotlib 3.3+）",[1144,1240,1243],{"className":1241,"code":1242,"language":1149,"meta":1150},[1147],"# 用字符串定义布局：每个字母代表一个子图，同一字母跨越多格表示合并\nfig, axes = plt.subplot_mosaic([\n    ['A', 'A', 'B'],     # 第1行：A 占2列，B 占1列\n    ['A', 'A', 'C'],     # 第2行：A 继续占2列，C 占1列\n    ['D', 'E', 'F'],     # 第3行：D、E、F 各占1列\n], figsize=(10, 8))\n# axes 是 dict，key 是布局字母：{'A': ax_A, 'B': ax_B, ...}\naxes['A'].plot(x1, y1)                       # 【子图】A 是合并了2行×2列的大子图\naxes['B'].bar(x2, y2)                        # 【子图】B 是右上角单格\naxes['D'].scatter(x3, y3)                    # 【子图】D 是左下角单格\n",[1115,1244,1242],{"__ignoreMap":1150},[1107,1246,1247],{},[1110,1248,1249],{},"其他写法",[1144,1251,1254],{"className":1252,"code":1253,"language":1149,"meta":1150},[1147],"plt.figure(figsize=(8, 5))                   # 先创建 Figure\nplt.subplot(2, 2, 1)                         # 再逐个添加子图：(行数, 列数, 序号)，序号从1开始\nplt.plot(x, y)\nplt.subplot(2, 2, 2)                         # 切换到第2个子图\nplt.bar(x, y)\n# 缺点：状态机写法，难以精确控制每个子图的属性\n",[1115,1255,1253],{"__ignoreMap":1150},[1096,1257],{},[1099,1259,1261],{"id":1260},"三坐标轴与刻度区","三、坐标轴与刻度区",[1104,1263,1264,1270,1281,1291,1298],{},[1107,1265,1266,1269],{},[1110,1267,1268],{},"刻度配置","：刻度分为\"刻度位置\"（ticks，即数据坐标系中刻度线出现的位置）和\"刻度标签\"（tick labels，\n即刻度线上方\u002F旁边的文字）。配置分为四个层次：",[1107,1271,1272,1273,1276,1277,1280],{},"① ",[1115,1274,1275],{},"set_xticks()"," \u002F ",[1115,1278,1279],{},"set_yticks()"," — 设定刻度在数据轴上的位置（数值列表）；",[1107,1282,1283,1284,1276,1287,1290],{},"② ",[1115,1285,1286],{},"set_xticklabels()",[1115,1288,1289],{},"set_yticklabels()"," — 覆盖刻度标签文字（与刻度位置一一对应）；",[1107,1292,1293,1294,1297],{},"③ ",[1115,1295,1296],{},"tick_params()"," — 统一控制所有刻度的视觉样式（旋转角度、字体大小、颜色、刻度线长度等）；",[1107,1299,1300,1301,1276,1304,1307],{},"④ ",[1115,1302,1303],{},"set_xlim()",[1115,1305,1306],{},"set_ylim()"," — 设定坐标轴的数值范围，超出范围的刻度不会显示。",[1144,1309,1312],{"className":1310,"code":1311,"language":1149,"meta":1150},[1147],"# ===== 轴标签 =====\nax.set_xlabel('时间', fontsize=12)\n# 【刻度配置】设置 x 轴标签文字为\"时间\"，字号12pt；该标签显示在 x 轴下方居中位置\n\nax.set_ylabel('数值', fontsize=12)\n# 【刻度配置】设置 y 轴标签文字为\"数值\"，字号12pt；该标签显示在 y 轴左侧居中位置\n\n# ===== 图表标题 =====\nax.set_title('图表标题', fontsize=14, fontweight='bold')\n# 【刻度配置】设置图表标题，fontweight='bold' 加粗，标题显示在坐标轴顶部居中\n\n# ===== 坐标轴范围 =====\nax.set_xlim(0, 100)\n# 【刻度配置】锁定 x 轴显示范围从 0 到 100，超出范围的数据点不会被裁剪但不可见\n# 参数等价于 ax.set_xlim(left=0, right=100)\n\nax.set_ylim(0, 1)\n# 【刻度配置】锁定 y 轴显示范围从 0 到 1\n\n# ===== 刻度位置（ticks 在哪里） =====\nax.set_xticks([0, 25, 50, 75, 100])\n# 【刻度配置】在 x 轴的 0、25、50、75、100 这5个位置放置刻度线和标签\n# 刻度位置是数据坐标，必须落在 set_xlim 范围内才能显示\n\nax.set_yticks([0, 0.2, 0.4, 0.6, 0.8, 1.0])\n# 【刻度配置】在 y 轴的这些位置放置刻度线；如果不调此参数，matplotlib 会自动选择合适的刻度位置\n\n# ===== 刻度标签（ticks 上显示什么文字） =====\nax.set_xticklabels(['一月', '二月', '三月', '四月', '五月'])\n# 【刻度配置】用自定义文字覆盖刻度标签，与 set_xticks 的位置一一对应\n# 第1个位置(0)显示\"一月\"，第2个位置(25)显示\"二月\"...\n# 必须先调 set_xticks 再调 set_xticklabels，否则标签数量和位置可能不匹配\n\n# ===== 刻度样式（tick_params 统一控制外观） =====\nax.tick_params(axis='x', rotation=45, labelsize=10, colors='gray')\n# 【刻度配置】axis='x' 只作用于 x 轴刻度（也可设为 'y' 或 'both'）\n# rotation=45：刻度标签文字逆时针旋转45度，用于标签文字过长时防止重叠\n# labelsize=10：刻度标签字号设为10pt\n# colors='gray'：刻度标签和刻度线颜色设为灰色\n\nax.tick_params(axis='both', which='major', length=6, width=1.5)\n# 【刻度配置】which='major' 控制主刻度线长度和宽度（which='minor' 控制次刻度线）\n# length=6 刻度线向外延伸6点；width=1.5 刻度线宽度1.5点\n\n# ===== 坐标轴脊线（spines）美化 =====\nax.spines['top'].set_visible(False)          # 【刻度配置】隐藏顶部边框脊线，实现\"开口式\"坐标轴风格\nax.spines['right'].set_visible(False)        # 【刻度配置】隐藏右侧边框脊线（Edward Tufte 推荐的数据-墨水比优化）\n# spines 的 key 有4个：'top', 'bottom', 'left', 'right'\n# 还可调 spine 位置：ax.spines['left'].set_position(('data', 0)) 将 y 轴移到 x=0 处\n\n# ===== 网格线 =====\nax.grid(True, linestyle='--', alpha=0.3)\n# 【刻度配置】显示网格线，linestyle='--' 虚线风格，alpha=0.3 透明度30%（降低视觉干扰）\n# 网格线的位置与刻度位置对齐，帮助读者从数据标记点对到坐标轴数值\n\n# ===== 图例 =====\nax.legend(loc='upper right', frameon=False)\n# 【刻度配置】显示图例，loc='upper right' 放在右上角；\n# frameon=False 取消图例的边框矩形（更简洁）\n# 图例的每一项对应之前 plot\u002Fbar\u002Fscatter 时设置的 label 参数\n",[1115,1313,1311],{"__ignoreMap":1150},[1096,1315],{},[1099,1317,1319],{"id":1318},"四常见图型","四、常见图型",[1144,1321,1324],{"className":1322,"code":1323,"language":1149,"meta":1150},[1147],"# 1. 柱形图\nax.bar(x, y, color='#3A86FF', width=0.6, edgecolor='black')\n# x: 每个柱子的 x 轴位置（类别标签的数值映射）\n# y: 每个柱子的高度\n# width=0.6: 柱宽（默认0.8），值越小柱子越窄、间距越大\n# edgecolor='black': 柱子边框颜色，使柱子边界清晰\n\n# 2. 横向条形图\nax.barh(y, x, height=0.6, color='#FF6B6B')\n# barh = horizontal bar，y 是类别位置，x 是对应数值（与 bar 的 x,y 互换）\n# height 控制条形的\"厚度\"（在横向图中相当于柱宽）\n\n# 3. 直方图\nax.hist(data, bins=20, density=False, edgecolor='black')\n# data: 一维原始数据数组，matplotlib 自动分箱统计频数\n# bins=20: 分成20个区间（柱子数量），bins 越大直方图越精细\n# density=False: y 轴显示频数（计数）；density=True 则显示概率密度（总面积=1）\n\n# 4. 箱线图\nax.boxplot(data, labels=['A','B','C'], showfliers=True, notch=False)\n# data: 列表的列表，每个子列表是一组数据\n# showfliers=True: 显示离群点（用小圆圈标记超出1.5倍IQR的点）\n# notch=True: 中位数处做凹槽，凹槽不重叠表示中位数差异显著\n\n# 5. 散点图\nax.scatter(x, y, c=colors, s=sizes, alpha=0.6, cmap='viridis')\n# c: 每个点的颜色值（可以是单色字符串或数值数组，数值时配合 cmap 映射颜色）\n# s: 每个点的大小（标量或数组），单位是点的平方\n# alpha=0.6: 透明度，点重叠时能看出密度分布\n# 【cmap】cmap='viridis'：将 c 的数值映射到 viridis 色带（蓝→绿→黄），是默认推荐的色盲友好 colormap\n\n# 6. 气泡图（散点的s参数映射第三维）\nax.scatter(x, y, s=z*100, c=z, cmap='coolwarm', alpha=0.7)\n# s=z*100: 用第三维 z 控制气泡大小，*100 是为了让点可见（z 值可能太小）\n# c=z: 同一维 z 也映射为颜色，实现\"大小+颜色\"双通道编码第三维\n# 【cmap】cmap='coolwarm'：双向色带（蓝→白→红），适合有正负对比的数据（如相关系数）\n\n# 7. 折线图\nax.plot(x, y, color='red', linestyle='--', linewidth=2, marker='o', label='系列A')\n# linestyle='--': 虚线（'-'实线, '-.'点划线, ':'点线）\n# marker='o': 数据点处画实心圆标记（'s'方块, '^'三角, 'd'菱形, 'x'叉号）\n# label='系列A': 图例中显示的系列名称，需配合 ax.legend() 才能显示\n\n# 8. 面积图\nax.fill_between(x, y1, y2, alpha=0.3, color='skyblue')\n# y1 和 y2 之间的区域被填充颜色（y1 可以是全0数组，实现从x轴向上的填充）\n# alpha=0.3: 填充区域半透明，避免遮挡背后的线条或网格\n\n# 9. 主题河流图\nax.stackplot(x, y1, y2, y3, labels=['A','B','C'], baseline='wiggle')\n# stackplot: 堆叠面积图，y1,y2,y3 依次堆叠在彼此的顶部\n# baseline='wiggle': 关键参数！使整体围绕中心轴波动，形成\"河流\"的视觉效果\n# baseline='zero' 是从 y=0 向上堆叠（默认），baseline='sym' 是对称堆叠\n\n# 10. 玫瑰图 \u002F 雷达图（极坐标）\nfig, ax = plt.subplots(subplot_kw={'projection': 'polar'})\n# subplot_kw={'projection': 'polar'}：在创建子图时传入，将坐标系从直角坐标转为极坐标\n# 极坐标下 x 轴变成角度(弧度)，y 轴变成半径\n\nax.bar(theta, r, width=2*np.pi\u002FN)\n# 玫瑰图：在极坐标上画柱状图，theta 是角度(弧度制)，r 是半径长度\n# width 控制每个扇形的弧宽，N 是扇形数量，2π\u002FN 让扇形刚好铺满360°\n\nax.fill(angles, values, alpha=0.25)\n# 雷达图填充：angles 是各轴的角度，values 是各轴的数据值\n# fill 将多边形内部填充颜色，alpha 控制透明度以显示网格\n",[1115,1325,1323],{"__ignoreMap":1150},[1096,1327],{},[1099,1329,1331],{"id":1330},"五颜色与-colormap","五、颜色与 colormap",[1104,1333,1334,1356,1419],{},[1107,1335,1336,1339,1340,1343,1344,1347,1348,1351,1352,1355],{},[1110,1337,1338],{},"cmap 怎么使用的","：colormap（颜色映射表，简称 cmap）是一种将",[1110,1341,1342],{},"数值","映射到",[1110,1345,1346],{},"颜色","的查找表。\n",[1115,1349,1350],{},"c=数值数组"," + ",[1115,1353,1354],{},"cmap='映射表名'","，matplotlib 自动完成映射：最小值→cmap最左颜色，最大值→cmap最右颜色。",[1357,1358,1359,1377,1393,1408],"ul",{},[1360,1361,1362,1365,1366,1369,1370,1373,1374],"li",{},[1110,1363,1364],{},"顺序数据","（温度、人口）：",[1115,1367,1368],{},"viridis","（默认，色盲友好）、",[1115,1371,1372],{},"plasma","、",[1115,1375,1376],{},"hot",[1360,1378,1379,1382,1383,1373,1386,1389,1390],{},[1110,1380,1381],{},"双向数据","（相关系数、增长率，有正有负）：",[1115,1384,1385],{},"coolwarm",[1115,1387,1388],{},"RdBu","（红蓝）、",[1115,1391,1392],{},"bwr",[1360,1394,1395,1398,1399,1373,1402,1373,1405],{},[1110,1396,1397],{},"分类数据","（离散类别）：",[1115,1400,1401],{},"Set1",[1115,1403,1404],{},"tab10",[1115,1406,1407],{},"Pastel1",[1360,1409,1410,1411,1414,1415,1418],{},"加 ",[1115,1412,1413],{},"_r"," 后缀反转颜色顺序（如 ",[1115,1416,1417],{},"viridis_r","：黄→绿→蓝）",[1107,1420,1421,1422,1425],{},"cmap 配合 ",[1115,1423,1424],{},"plt.colorbar()"," 添加颜色条（图例），让读者知道颜色和数值的对应关系。",[1144,1427,1430],{"className":1428,"code":1429,"language":1149,"meta":1150},[1147],"# ===== 三种颜色写法 =====\ncolor='red'               # 命名颜色：matplotlib 内置140+种命名颜色（'red','blue','green','orange'等）\ncolor='#FF5733'           # 十六进制 HEX：6位，每2位分别表示 R G B (00-FF)，与 CSS\u002FWeb 通用\ncolor=(0.2, 0.4, 0.6)     # RGB 元组：每个通道 0.0~1.0 的浮点数（0.2=20%红, 0.4=40%绿, 0.6=60%蓝）\n\n# ===== 常用 cmap 及选择场景 =====\ncmap='viridis'   # 默认推荐，从蓝渐变到绿到黄，色盲友好（红绿色盲也能分辨），适合连续数值的默认选择\ncmap='coolwarm'  # 双向色带：冷色（蓝）→ 中性（白\u002F灰）→ 暖色（红），适合有正负值的数据如相关系数矩阵\ncmap='RdYlBu_r'  # 红→黄→蓝 的反转（_r = reversed），适合降水量、风险等级等\"红=高\"直觉的数据\ncmap='hot'       # 黑→红→黄→白，模仿热辐射，适合热力图、密度图\ncmap='plasma'    # 深紫→粉→黄，替代 jet 的现代选择，感知均匀（perceptually uniform）\ncmap='Set1'      # 9种鲜明颜色的离散色板，适合分类数据（柱状图多类别着色）\ncmap='tab10'     # Tableau 的10色离散色板，比默认色更美观，适合折线图多系列区分\n\n# ===== 添加 colorbar（颜色条\u002F色阶图例） =====\nsc = ax.scatter(x, y, c=z, cmap='viridis', s=50)\n# 【cmap】scatter 返回一个 PathCollection 对象，它是 colorbar 的\"数据源\"\n# c=z：将数值数组 z 映射到 viridis 色带；z 的最小值→紫色，最大值→黄色\n\ncbar = plt.colorbar(sc, ax=ax, label='强度', shrink=0.8)\n# 【cmap】colorbar 必须传入一个 mappable 对象（如 scatter\u002Fcontourf\u002Fimshow 的返回值）\n# ax=ax：指定 colorbar 与哪个 Axes 对齐（宽度自动匹配该 Axes）\n# label='强度'：colorbar 旁边显示的标签文字\n# shrink=0.8：缩小 colorbar 高度到80%，避免顶部超出图表\n\ncbar.ax.tick_params(labelsize=8)             # 【cmap】调整 colorbar 刻度标签字体大小\ncbar.set_ticks([0, 0.5, 1.0])               # 【cmap】手动设置 colorbar 的刻度位置\ncbar.set_ticklabels(['低', '中', '高'])       # 【cmap】用中文覆盖 colorbar 刻度标签\n\n# ===== 热力图的 cmap（imshow \u002F pcolormesh） =====\nim = ax.imshow(matrix, cmap='coolwarm', aspect='auto', origin='upper')\n# 【cmap】imshow 显示二维矩阵作为图片，每个像素的颜色由 matrix[i,j] 经 cmap 映射\n# aspect='auto'：自动拉伸填充 Axes；origin='upper'：矩阵 [0,0] 在左上角\nplt.colorbar(im, ax=ax, label='值')\n\n# ===== 等高线图的 cmap =====\ncontour = ax.contourf(X, Y, Z, levels=20, cmap='viridis')\n# 【cmap】contourf 绘制填充等高线图，levels=20 表示20个层级，每层颜色由 cmap 映射 Z 值\n# 每个等高线区间对应 cmap 中的一段颜色，颜色过渡越平滑越好\n\n# ===== 颜色归一化（控制 cmap 映射范围） =====\nfrom matplotlib.colors import Normalize, LogNorm\nnorm = Normalize(vmin=0, vmax=100)           # 线性映射：将 [0,100] 映射到 cmap 的 [起点, 终点]\nsc = ax.scatter(x, y, c=z, cmap='viridis', norm=norm)\n# vmin\u002Fvmax 直接在 scatter 中传也行：ax.scatter(..., vmin=0, vmax=100)\n\nlog_norm = LogNorm(vmin=1, vmax=1000)        # 对数映射：适合数据跨度几个数量级的情况\n# 使用场景：数据从 1 到 1000，用线性映射时小值全挤到 cmap 一端，对数映射让低值区间也有颜色区分\n",[1115,1431,1429],{"__ignoreMap":1150},[1096,1433],{},[1099,1435,1437],{"id":1436},"六seaborn","六、Seaborn",[1439,1440,1442],"h3",{"id":1441},"_61-定义加载与优势","6.1 定义、加载与优势",[1104,1444,1445],{},[1107,1446,1447,1450,1451,1454],{},[1110,1448,1449],{},"Seaborn 是什么","：Seaborn 是基于 matplotlib 构建的 Python 高级统计可视化库，由 Michael Waskom 开发。\n它封装了 matplotlib 的底层绘图 API，提供面向 DataFrame 的高级接口，让统计图表能用",[1110,1452,1453],{},"一行代码","完成。",[1144,1456,1459],{"className":1457,"code":1458,"language":1149,"meta":1150},[1147],"import seaborn as sns          # 加载 Seaborn，约定别名 sns（取自电视剧《白宫风云》角色 Samuel Norman Seaborn）\n",[1115,1460,1458],{"__ignoreMap":1150},[1107,1462,1463,1466],{},[1110,1464,1465],{},"Seaborn 相比裸 matplotlib 的优势","：",[1468,1469,1470,1486],"table",{},[1471,1472,1473],"thead",{},[1474,1475,1476,1480,1483],"tr",{},[1477,1478,1479],"th",{},"优势",[1477,1481,1482],{},"说明",[1477,1484,1485],{},"对比 matplotlib",[1487,1488,1489,1510,1526,1539,1552],"tbody",{},[1474,1490,1491,1497,1504],{},[1492,1493,1494],"td",{},[1110,1495,1496],{},"① DataFrame 原生支持",[1492,1498,1499,1500,1503],{},"直接传列名字符串（",[1115,1501,1502],{},"x='col1'","），无需手动提取数组",[1492,1505,1506,1509],{},[1115,1507,1508],{},"plt.plot(df['col1'], df['col2'])"," 需手动取列",[1474,1511,1512,1517,1523],{},[1492,1513,1514],{},[1110,1515,1516],{},"② 自动分组着色",[1492,1518,1519,1522],{},[1115,1520,1521],{},"hue='类别列'"," 一个参数完成分组+配色+图例",[1492,1524,1525],{},"需手动循环分组、选色、拼图例",[1474,1527,1528,1533,1536],{},[1492,1529,1530],{},[1110,1531,1532],{},"③ 统计功能内置",[1492,1534,1535],{},"箱线图\u002F小提琴图自动计算分位数；回归图自动拟合+置信区间",[1492,1537,1538],{},"需手动调用 numpy\u002Fscipy 计算",[1474,1540,1541,1546,1549],{},[1492,1542,1543],{},[1110,1544,1545],{},"④ 默认美观",[1492,1547,1548],{},"自带精心设计的调色板和主题样式，开箱即用",[1492,1550,1551],{},"默认配色朴素，需大量手动美化",[1474,1553,1554,1559,1571],{},[1492,1555,1556],{},[1110,1557,1558],{},"⑤ Figure-level API",[1492,1560,1561,1373,1564,1373,1567,1570],{},[1115,1562,1563],{},"pairplot",[1115,1565,1566],{},"clustermap",[1115,1568,1569],{},"catplot"," 等自动创建多子图布局",[1492,1572,1573,1574,1577],{},"需手动 ",[1115,1575,1576],{},"subplots"," + 循环填充每个子图",[1439,1579,1581],{"id":1580},"_62-风格特点","6.2 风格特点",[1104,1583,1584],{},[1107,1585,1586,1587,1590,1591,1594],{},"Seaborn 提供",[1110,1588,1589],{},"五大内置主题","，通过 ",[1115,1592,1593],{},"sns.set_theme()"," 一键切换整体视觉风格。\n主题控制的是背景色、网格线、刻度线等\"画布层面\"的样式，不改变数据本身的绘制逻辑。",[1144,1596,1599],{"className":1597,"code":1598,"language":1149,"meta":1150},[1147],"import seaborn as sns\n\n# ===== 主题风格（style） =====\nsns.set_theme(style='whitegrid')   # 白底+灰色网格线（最常用，商务图表首选）\nsns.set_theme(style='darkgrid')    # 灰底+白色网格线（适合深色背景的演示文稿）\nsns.set_theme(style='white')       # 纯白底无网格（极简风格，适合海报\u002F信息图）\nsns.set_theme(style='dark')        # 纯灰底无网格（与 darkgrid 类似但无网格）\nsns.set_theme(style='ticks')       # 白底+刻度短线（Edward Tufte 推荐风格，最小化非数据元素）\n\n# ===== 调色板（palette） =====\nsns.set_theme(palette='deep')      # 默认10色，饱和度高，适合分类数据\nsns.set_theme(palette='muted')     # 低饱和度版本，视觉更柔和（推荐用于论文）\nsns.set_theme(palette='pastel')    # 粉彩色系，适合浅色背景\nsns.set_theme(palette='bright')    # 高亮度色系，适合深色背景\nsns.set_theme(palette='dark')      # 深色系\nsns.set_theme(palette='colorblind')# 色盲友好色板（约8%男性色盲，学术\u002F公开报告推荐）\n\n# ===== 上下文缩放（context） =====\nsns.set_context('paper')           # 论文用：小字体，适合嵌入 LaTeX\u002FWord\nsns.set_context('notebook')        # 默认：适中字体，适合 Jupyter Notebook\nsns.set_context('talk')            # 演讲用：大字体，适合投影演示\nsns.set_context('poster')          # 海报用：超大字体，适合打印展板\n# context 会自动缩放所有文字元素（标签、刻度、图例）的字体大小\n\n# ===== 一行设置全部 =====\nsns.set_theme(style='whitegrid', palette='muted', context='notebook', font='SimHei')\n# 同时设定：主题样式 + 调色板 + 上下文缩放 + 中文字体\n",[1115,1600,1598],{"__ignoreMap":1150},[1439,1602,1604],{"id":1603},"_63-与-matplotlib-的关系","6.3 与 Matplotlib 的关系",[1104,1606,1607],{},[1107,1608,1609,1612,1613,1616,1617,1620],{},[1110,1610,1611],{},"关系","：Seaborn 是 matplotlib 的",[1110,1614,1615],{},"高级封装","，不是替代品。\nSeaborn 内部所有绘图最终都调用 matplotlib 的底层 API，返回的仍然是 matplotlib 的 ",[1115,1618,1619],{},"Axes"," 对象。\n这意味着：你可以用 Seaborn 快速出图，再用 matplotlib 的 API 做精细微调。",[1144,1622,1627],{"className":1623,"code":1625,"language":1626},[1624],"language-text","Seaborn（高层：DataFrame 直传、自动统计、默认美观）\n    ↓ 调用\nMatplotlib（底层：像素级控制、坐标轴定制、图表保存）\n","text",[1115,1628,1625],{"__ignoreMap":1150},[1107,1630,1631,1466],{},[1110,1632,1633],{},"三种典型的协作模式",[1144,1635,1638],{"className":1636,"code":1637,"language":1149,"meta":1150},[1147],"import matplotlib.pyplot as plt\nimport seaborn as sns\nimport pandas as pd\n\ndf = pd.DataFrame({'x': range(5), 'y': [3,7,2,5,8]})\n\n# ===== 模式1：Seaborn 画图 + Matplotlib 美化 =====\nfig, ax = plt.subplots(figsize=(8, 5))        # matplotlib 创建画布\nsns.barplot(x='x', y='y', data=df, ax=ax)      # Seaborn 在指定 ax 上绘图\nax.set_title('Seaborn画+Matplotlib美', fontsize=14)  # matplotlib 微调标题\nax.spines['top'].set_visible(False)             # matplotlib 去边框\nax.tick_params(labelsize=10)                    # matplotlib 调刻度\nplt.tight_layout()                              # matplotlib 调布局\n\n# ===== 模式2：纯 Seaborn Figure-level 函数（自动管理画布） =====\ng = sns.pairplot(df)                            # pairplot 返回 PairGrid 对象\ng.fig.suptitle('散点矩阵', y=1.02)               # 通过 .fig 访问底层 Figure 加总标题\n# PairGrid \u002F FacetGrid 是 Seaborn 独有的高级对象，.fig 是底层的 matplotlib Figure\n# .axes 是底层的 matplotlib Axes 数组，可逐个微调\n\n# ===== 模式3：Matplotlib 全局设置影响 Seaborn =====\nplt.rcParams['font.sans-serif'] = ['SimHei']    # matplotlib 的 rcParams 对 Seaborn 同样生效\nplt.rcParams['axes.unicode_minus'] = False\nsns.set_theme(style='whitegrid')                 # Seaborn 主题覆盖部分 rcParams\n# Seaborn 的 set_theme() 内部也是修改 rcParams，两者可混用但注意调用顺序：\n# 先设 rcParams（字体等），再设 set_theme（主题），后者会覆盖前者冲突的键\n",[1115,1639,1637],{"__ignoreMap":1150},[1107,1641,1642,1466],{},[1110,1643,1644],{},"API 层级对比",[1468,1646,1647,1663],{},[1471,1648,1649],{},[1474,1650,1651,1654,1657,1660],{},[1477,1652,1653],{},"层级",[1477,1655,1656],{},"matplotlib",[1477,1658,1659],{},"Seaborn",[1477,1661,1662],{},"何时用",[1487,1664,1665,1698,1736],{},[1474,1666,1667,1672,1677,1695],{},[1492,1668,1669],{},[1110,1670,1671],{},"Figure-level",[1492,1673,1674,1676],{},[1115,1675,1169],{}," 手动创建",[1492,1678,1679,1682,1683,1682,1686,1682,1689,1682,1692],{},[1115,1680,1681],{},"sns.pairplot()",", ",[1115,1684,1685],{},"sns.catplot()",[1115,1687,1688],{},"sns.displot()",[1115,1690,1691],{},"sns.jointplot()",[1115,1693,1694],{},"sns.clustermap()",[1492,1696,1697],{},"需要自动多子图布局时",[1474,1699,1700,1705,1713,1733],{},[1492,1701,1702],{},[1110,1703,1704],{},"Axes-level",[1492,1706,1707,1682,1710],{},[1115,1708,1709],{},"ax.plot()",[1115,1711,1712],{},"ax.bar()",[1492,1714,1715,1682,1718,1682,1721,1682,1724,1682,1727,1682,1730],{},[1115,1716,1717],{},"sns.barplot()",[1115,1719,1720],{},"sns.boxplot()",[1115,1722,1723],{},"sns.heatmap()",[1115,1725,1726],{},"sns.lineplot()",[1115,1728,1729],{},"sns.scatterplot()",[1115,1731,1732],{},"sns.histplot()",[1492,1734,1735],{},"画到指定 ax，嵌入自定义布局时",[1474,1737,1738,1743,1748,1755],{},[1492,1739,1740],{},[1110,1741,1742],{},"样式层",[1492,1744,1745],{},[1115,1746,1747],{},"plt.rcParams",[1492,1749,1750,1682,1752],{},[1115,1751,1593],{},[1115,1753,1754],{},"sns.set_context()",[1492,1756,1757],{},"全局外观设置",[1439,1759,1761],{"id":1760},"_64-相关图表-api","6.4 相关图表 API",[1144,1763,1766],{"className":1764,"code":1765,"language":1149,"meta":1150},[1147],"import seaborn as sns\nimport pandas as pd\n\n# 假设 df 是一个包含多列的 DataFrame\ndf = pd.DataFrame({\n    'cat':    ['A','A','B','B','C','C'],\n    'val':    [23, 45, 56, 78, 32, 47],\n    'group':  ['G1','G2','G1','G2','G1','G2'],\n    'gender': ['M','F','M','F','M','F'],\n    'x': [1,2,3,4,5,6],\n    'y': [3,7,2,5,8,4],\n    'z': [10,30,20,50,40,60],\n    'time': pd.date_range('2024-01-01', periods=6, freq='D'),\n})\n\n# 1. 柱状图（自动计算均值+误差棒）\nsns.barplot(x='cat', y='val', data=df, ax=ax, palette='deep')\n# 自动对每个 cat 类别的 val 求均值，误差棒默认显示95%置信区间\n\n# 2. 箱线图（自动计算四分位数）\nsns.boxplot(x='group', y='val', data=df, hue='gender', palette='Set2')\n# hue='gender'：按性别分组，同一 x 位置并排显示两个箱线图\n\n# 3. 小提琴图（箱线图 + 密度曲线）\nsns.violinplot(x='group', y='val', data=df, hue='gender', split=True)\n# split=True：两半各一组，便于直接对比分布形状\n\n# 4. 直方图 + KDE 密度曲线\nsns.histplot(data=df, x='val', bins=20, kde=True, hue='gender', alpha=0.5)\n# kde=True：叠加核密度估计平滑曲线；hue 分组后透明叠加便于对比\n\n# 5. 散点图（支持 size\u002Fhue\u002Fstyle 三维编码）\nsns.scatterplot(x='x', y='y', size='z', hue='cat', style='gender', data=df, sizes=(20, 200))\n# size='z'：z 列控制点大小；hue='cat'：类别列着色；style='gender'：不同标记形状\n\n# 6. 热力图\ncorr = df.select_dtypes('number').corr()             # 计算数值列的相关系数矩阵\nsns.heatmap(corr, annot=True, fmt='.2f', cmap='coolwarm',\n            vmin=-1, vmax=1, square=True, linewidths=0.5,\n            cbar_kws={'shrink': 0.8, 'label': '相关系数'})\n# 【cmap】cmap='coolwarm'：蓝(-1)→白(0)→红(+1)，相关系数黄金配色\n\n# 7. 折线图（自动按 hue 分组，带置信区间）\nsns.lineplot(x='time', y='val', hue='cat', data=df, style='cat', markers=True)\n# 默认显示各时间点的均值±95%置信区间半透明带\n\n# 8. 散点矩阵图（Figure-level，自动创建 N×N 子图网格）\nsns.pairplot(df, hue='cat', diag_kind='kde', corner=True, palette='deep')\n# 【子图】自动为每对数值列创建散点图矩阵；对角线显示 KDE 密度曲线\n# corner=True：只显示左下三角，去重+省空间\n",[1115,1767,1765],{"__ignoreMap":1150},[1096,1769],{},[1099,1771,1773],{"id":1772},"七pyecharts","七、Pyecharts",[1439,1775,1777],{"id":1776},"_71-定义加载与特点","7.1 定义、加载与特点",[1104,1779,1780],{},[1107,1781,1782,1785,1786,1793,1794,1797],{},[1110,1783,1784],{},"Pyecharts 是什么","：Pyecharts 是百度开源 JavaScript 图表库 ",[1787,1788,1792],"a",{"href":1789,"rel":1790},"https:\u002F\u002Fecharts.apache.org\u002F",[1791],"nofollow","Apache ECharts"," 的 Python 封装，\n由陈键冬等人开发维护。它将 ECharts 的配置项映射为 Python 的链式 API，让你用纯 Python 代码生成",[1110,1795,1796],{},"交互式","网页图表。\n与 matplotlib\u002FSeaborn 生成静态图片不同，Pyecharts 输出的是 HTML 文件，内嵌 JavaScript，支持缩放、悬停提示、数据筛选等交互。",[1144,1799,1804],{"className":1800,"code":1802,"language":1803,"meta":1150},[1801],"language-bash","pip install pyecharts          # 安装 Pyecharts（库，包含常用图表）\n","bash",[1115,1805,1802],{"__ignoreMap":1150},[1144,1807,1810],{"className":1808,"code":1809,"language":1149,"meta":1150},[1147],"# ===== 加载方式：按需导入，不导入整个库 =====\nfrom pyecharts.charts import Bar        # 柱状图\nfrom pyecharts.charts import Line       # 折线图\nfrom pyecharts.charts import Pie        # 饼图\nfrom pyecharts.charts import Scatter    # 散点图\nfrom pyecharts.charts import HeatMap    # 热力图\nfrom pyecharts.charts import Map        # 地图\nfrom pyecharts.charts import Geo        # 地理坐标系图\nfrom pyecharts.charts import Graph      # 关系图\u002F网络图\nfrom pyecharts.charts import Sankey     # 桑基图\nfrom pyecharts.charts import Radar      # 雷达图\nfrom pyecharts.charts import Funnel     # 漏斗图\nfrom pyecharts.charts import Gauge      # 仪表盘\nfrom pyecharts.charts import Liquid     # 水球图\nfrom pyecharts.charts import WordCloud  # 词云图\nfrom pyecharts.charts import TreeMap    # 矩形树图\nfrom pyecharts.charts import Sunburst   # 旭日图\nfrom pyecharts.charts import Timeline   # 时间线轮播（容器）\n\nfrom pyecharts import options as opts   # 全局配置项模块（标题、图例、工具箱、提示框等）\n# opts 是最关键的模块，几乎所有图表属性都通过 opts.XXXOpts 类来配置\n",[1115,1811,1809],{"__ignoreMap":1150},[1107,1813,1814,1466],{},[1110,1815,1816],{},"Pyecharts 的特点",[1468,1818,1819,1831],{},[1471,1820,1821],{},[1474,1822,1823,1826,1828],{},[1477,1824,1825],{},"特点",[1477,1827,1482],{},[1477,1829,1830],{},"对比 matplotlib\u002FSeaborn",[1487,1832,1833,1846,1859,1875,1896],{},[1474,1834,1835,1840,1843],{},[1492,1836,1837],{},[1110,1838,1839],{},"① 交互式",[1492,1841,1842],{},"输出 HTML，支持鼠标悬停查看数值、缩放、拖拽、图例点击过滤",[1492,1844,1845],{},"matplotlib 生成静态图片，无交互",[1474,1847,1848,1853,1856],{},[1492,1849,1850],{},[1110,1851,1852],{},"② 图表类型丰富",[1492,1854,1855],{},"覆盖 30+ 种图表类型，包括地图、桑基图、仪表盘、3D 图等",[1492,1857,1858],{},"matplotlib 偏基础统计图，地图\u002F桑基图需额外库",[1474,1860,1861,1866,1872],{},[1492,1862,1863],{},[1110,1864,1865],{},"③ 链式调用",[1492,1867,1868,1871],{},[1115,1869,1870],{},".add_xaxis().add_yaxis().set_global_opts()"," 流式 API 链式配置",[1492,1873,1874],{},"matplotlib 是函数调用式，每个属性单独设置",[1474,1876,1877,1882,1893],{},[1492,1878,1879],{},[1110,1880,1881],{},"④ 配置项体系",[1492,1883,1884,1885,1888,1889,1892],{},"全局配置 ",[1115,1886,1887],{},"set_global_opts()"," + 系列配置 ",[1115,1890,1891],{},"set_series_opts()","，分层清晰",[1492,1894,1895],{},"matplotlib 所有属性都在 ax 上调，层级扁平",[1474,1897,1898,1903,1906],{},[1492,1899,1900],{},[1110,1901,1902],{},"⑤ 网页嵌入",[1492,1904,1905],{},"生成的 HTML 可在浏览器中独立运行，也可嵌入 Flask\u002FDjango\u002FJupyter",[1492,1907,1908,1909,1912],{},"matplotlib 图片需嵌入 ",[1115,1910,1911],{},"\u003Cimg>"," 标签",[1439,1914,1916],{"id":1915},"_72-生成图表的主要步骤","7.2 生成图表的主要步骤",[1104,1918,1919],{},[1107,1920,1921,1922,1925],{},"Pyecharts 的图表创建遵循",[1110,1923,1924],{},"五步流程","：初始化图表 → 添加数据 → 设置全局配置 → 设置系列配置 → 渲染输出。\n所有图表类型共享相同的配置模式，学会一个就等于学会全部。",[1144,1927,1930],{"className":1928,"code":1929,"language":1149,"meta":1150},[1147],"from pyecharts.charts import Bar\nfrom pyecharts import options as opts\n\n# ===== 第1步：初始化图表对象 =====\nbar = Bar()                                      # 创建柱状图实例（无参数，或传入 init_opts 设定宽高\u002F主题）\n\n# 也可在初始化时指定画布大小和主题：\nbar = Bar(init_opts=opts.InitOpts(\n    width='900px',                               # 画布宽度（支持 px \u002F %）\n    height='500px',                              # 画布高度\n    theme='light',                                # 内置主题：'light','dark','white','chalk','essos'等\n    # 更多主题需安装：pip install pyecharts-snapshot\n))\n\n# ===== 第2步：添加数据 =====\nbar.add_xaxis(['苹果', '香蕉', '橙子', '葡萄', '西瓜'])\n# 设置 x 轴类别标签（所有系列共享同一 x 轴）\n\nbar.add_yaxis('2024年销量', [120, 200, 150, 80, 70])\n# 添加一个系列：series_name='2024年销量'，数据列表与 x 轴一一对应\n# 可多次调用 add_yaxis 添加多个系列，实现分组对比\n\nbar.add_yaxis('2025年销量', [150, 220, 180, 90, 85])\n# 第二个系列：自动并排显示\n\n# ===== 第3步：设置全局配置（标题、图例、工具箱、提示框、坐标轴等） =====\nbar.set_global_opts(\n    title_opts=opts.TitleOpts(\n        title='水果销量对比',                    # 主标题文字\n        subtitle='2024 vs 2025',                 # 副标题\n        pos_left='center',                       # 标题水平位置：'center' \u002F 'left' \u002F 'right' \u002F 百分比\n    ),\n    legend_opts=opts.LegendOpts(\n        pos_top='8%',                            # 图例距顶部的距离\n        orient='horizontal',                     # 横向排列（'vertical' 纵向）\n    ),\n    toolbox_opts=opts.ToolboxOpts(\n        is_show=True,                            # 显示右上角工具箱（下载图片、数据视图、缩放等）\n        feature={\n            'saveAsImage': {},                   # 启用\"保存为图片\"按钮\n            'dataView': {'readOnly': False},     # 启用\"数据视图\"按钮（可编辑）\n            'restore': {},                       # 启用\"还原\"按钮\n            'dataZoom': {},                      # 启用\"区域缩放\"按钮\n        },\n    ),\n    tooltip_opts=opts.TooltipOpts(\n        trigger='axis',                          # 触发方式：'axis'(坐标轴触发，显示所有系列) \u002F 'item'(数据项触发)\n        axis_pointer_type='shadow',              # 指示器类型：'line','shadow','cross'\n    ),\n    xaxis_opts=opts.AxisOpts(\n        name='水果种类',                          # x 轴名称\n        axislabel_opts=opts.LabelOpts(rotate=30),# x 轴标签旋转30°\n    ),\n    yaxis_opts=opts.AxisOpts(\n        name='销量（吨）',                        # y 轴名称\n        splitline_opts=opts.SplitLineOpts(is_show=True),  # 显示水平分割线\n    ),\n)\n\n# ===== 第4步：设置系列配置（标签、标记点、颜色等——作用于数据系列层面） =====\nbar.set_series_opts(\n    label_opts=opts.LabelOpts(\n        is_show=True,                            # 在柱顶显示数值标签\n        position='top',                          # 标签位置：'top','inside','bottom'\n        font_size=12,\n    ),\n    markpoint_opts=opts.MarkPointOpts(\n        data=[\n            opts.MarkPointItem(type_='max', name='最大值'),   # 标记最大值点\n            opts.MarkPointItem(type_='min', name='最小值'),   # 标记最小值点\n        ],\n    ),\n    markline_opts=opts.MarkLineOpts(\n        data=[\n            opts.MarkLineItem(type_='average', name='平均值'), # 标记平均值线\n        ],\n    ),\n)\n\n# ===== 第5步：渲染输出 =====\nbar.render('bar_chart.html')                     # 生成独立 HTML 文件，浏览器打开即可查看交互图表\n# 在 Jupyter Notebook 中可直接用 bar.render_notebook() 内嵌显示\n# bar 对象本身在 Jupyter 中也会自动渲染\n",[1115,1931,1929],{"__ignoreMap":1150},[1107,1933,1934,1466],{},[1110,1935,1936],{},"五步流程总结",[1144,1938,1941],{"className":1939,"code":1940,"language":1626},[1624],"① Bar() \u002F Line() \u002F Pie() ...\n        ↓\n② .add_xaxis() + .add_yaxis()\n        ↓\n③ .set_global_opts()   ← 标题\u002F图例\u002F工具箱\u002F提示框\u002F坐标轴（跨系列共用）\n        ↓\n④ .set_series_opts()   ← 标签\u002F标记点\u002F标记线（按系列设置）\n        ↓\n⑤ .render('output.html')\n",[1115,1942,1940],{"__ignoreMap":1150},[1439,1944,1946],{"id":1945},"_73-可生成的图表类型","7.3 可生成的图表类型",[1104,1948,1949],{},[1107,1950,1951],{},"Pyecharts 继承 ECharts 的全部图表能力，分为以下几大类。",[1953,1954,1956],"h4",{"id":1955},"一类基础统计图与-matplotlibseaborn-重叠但交互式","一类：基础统计图（与 matplotlib\u002FSeaborn 重叠，但交互式）",[1144,1958,1961],{"className":1959,"code":1960,"language":1149,"meta":1150},[1147],"from pyecharts.charts import Bar, Line, Pie, Scatter, Boxplot, HeatMap\n\n# ===== 柱状图 =====\nbar = Bar()\nbar.add_xaxis(['Q1', 'Q2', 'Q3', 'Q4'])\nbar.add_yaxis('营收', [120, 200, 150, 180])\nbar.set_global_opts(title_opts=opts.TitleOpts(title='柱状图'))\n# 支持：普通柱状图、堆叠柱状图（stack_='stack1'）、条形图（.reversal_axis()）\n\n# ===== 折线图（自带平滑和面积填充） =====\nline = Line()\nline.add_xaxis(['1月', '2月', '3月', '4月', '5月'])\nline.add_yaxis('温度', [5, 12, 18, 25, 30], is_smooth=True, areastyle_opts=opts.AreaStyleOpts(opacity=0.3))\n# is_smooth=True：贝塞尔曲线平滑；areastyle_opts 填充折线下方区域成为面积图\n\n# ===== 饼图\u002F环形图 =====\npie = Pie()\npie.add('品类占比', [list(z) for z in zip(['A','B','C','D'], [335, 310, 234, 135])],\n        radius=['40%', '75%'])     # 内半径40%、外半径75% → 环形图；radius='70%' → 普通饼图\n# 数据格式必须是 [(key1, val1), (key2, val2), ...]\n\n# ===== 散点图（支持视觉映射 visualmap） =====\nscatter = Scatter()\nscatter.add_xaxis([10, 20, 30, 40, 50])\nscatter.add_yaxis('系列A', [5, 20, 36, 10, 75], symbol_size=20)\nscatter.set_global_opts(\n    visualmap_opts=opts.VisualMapOpts(max_=100),  # 视觉映射组件，类似 matplotlib 的 colorbar\n)\n\n# ===== 箱线图 =====\nbox = Boxplot()\nbox.add_xaxis(['对照组', '实验组'])\nbox.add_yaxis('', box.prepare_data([[10,20,30,40,50,60], [15,25,35,45,55,65]]))\n# 注意：数据需用 .prepare_data() 预处理\n\n# ===== 热力图 =====\nheat = HeatMap()\nheat.add_xaxis(['周一','周二','周三','周四','周五'])\nheat.add_yaxis('上午', [0,1,2,3,4],\n               [[i, j, np.random.randint(0, 100)] for i in range(5) for j in range(5)])\n# 数据格式必须是 [[x_idx, y_idx, value], ...]\n",[1115,1962,1960],{"__ignoreMap":1150},[1953,1964,1966],{"id":1965},"二类地理可视化pyecharts-最大亮点之一","二类：地理可视化（Pyecharts 最大亮点之一）",[1144,1968,1971],{"className":1969,"code":1970,"language":1149,"meta":1150},[1147],"from pyecharts.charts import Map, Geo\n\n# ===== 中国地图（内置中国省级\u002F市级地理数据） =====\nmap_chart = Map()\nmap_chart.add('确诊人数',\n              [['广东', 1200], ['浙江', 1100], ['河南', 980], ['四川', 850], ['北京', 600]],\n              maptype='china')                # maptype='china' 中国地图；也可填省份名如 '广东'\nmap_chart.set_global_opts(\n    title_opts=opts.TitleOpts(title='中国疫情地图'),\n    visualmap_opts=opts.VisualMapOpts(\n        max_=1500,                             # 颜色映射的最大值\n        is_piecewise=True,                     # 分段型视觉映射（离散色块）\n        pieces=[\n            {'min': 1000, 'label': '>1000', 'color': '#B40404'},\n            {'min': 500, 'max': 999, 'label': '500-999', 'color': '#E41A1C'},\n            {'min': 100, 'max': 499, 'label': '100-499', 'color': '#FC8D59'},\n            {'min': 0,   'max': 99,  'label': '\u003C100', 'color': '#FEE5D9'},\n        ],\n    ),\n)\n\n# ===== Geo 地理坐标系（散点+涟漪效果在地图上） =====\ngeo = Geo()\ngeo.add_schema(maptype='china')                # 加载中国地图底图\ngeo.add('城市分布',\n        [('北京', 120), ('上海', 110), ('广州', 90), ('深圳', 85), ('杭州', 70)],\n        type_='effectScatter',                  # 涟漪散点效果\n        symbol_size=15,\n)\ngeo.set_global_opts(\n    title_opts=opts.TitleOpts(title='Geo 地理散点'),\n    visualmap_opts=opts.VisualMapOpts(is_show=False),  # 不显示视觉映射条\n)\n# type_ 可选：'scatter'(散点), 'effectScatter'(涟漪), 'heatmap'(热力)\n",[1115,1972,1970],{"__ignoreMap":1150},[1953,1974,1976],{"id":1975},"三类关系与流程类","三类：关系与流程类",[1144,1978,1981],{"className":1979,"code":1980,"language":1149,"meta":1150},[1147],"from pyecharts.charts import Graph, Sankey, TreeMap, Sunburst\n\n# ===== 关系图\u002F网络图 =====\ngraph = Graph()\ngraph.add('人物关系',\n          nodes=[{'name': 'A', 'symbolSize': 50}, {'name': 'B', 'symbolSize': 30},\n                 {'name': 'C', 'symbolSize': 40}],\n          links=[{'source': 'A', 'target': 'B'}, {'source': 'A', 'target': 'C'},\n                 {'source': 'B', 'target': 'C'}],\n          layout='force',                      # 力引导布局（'circular' 环形布局）\n          repulsion=8000,                      # 节点斥力（力布局参数）\n)\n\n# ===== 桑基图（流向图） =====\nsankey = Sankey()\nsankey.add('能量流向',\n           nodes=[{'name': '煤炭'}, {'name': '发电'}, {'name': '居民用电'},\n                  {'name': '工业用电'}, {'name': '损耗'}],\n           links=[{'source': '煤炭', 'target': '发电', 'value': 100},\n                  {'source': '发电', 'target': '居民用电', 'value': 40},\n                  {'source': '发电', 'target': '工业用电', 'value': 50},\n                  {'source': '发电', 'target': '损耗', 'value': 10}],\n           linestyle_opt=opts.LineStyleOpts(opacity=0.5, curve=0.5),\n)\n\n# ===== 矩形树图（层级占比） =====\ntreemap = TreeMap()\ntreemap.add('市场份额',\n            [{'value': 40, 'name': '品牌A'},\n             {'value': 30, 'name': '品牌B'},\n             {'value': 20, 'name': '品牌C'},\n             {'value': 10, 'name': '其他'}],\n)\n\n# ===== 旭日图（多层级的饼图） =====\nsunburst = Sunburst()\nsunburst.add('部门结构',\n             [{'name': 'CEO', 'children': [\n                 {'name': '技术部', 'children': [\n                     {'name': '前端', 'value': 20},\n                     {'name': '后端', 'value': 30}]},\n                 {'name': '市场部', 'value': 50}]}],\n)\n",[1115,1982,1980],{"__ignoreMap":1150},[1953,1984,1986],{"id":1985},"四类特殊图表","四类：特殊图表",[1144,1988,1991],{"className":1989,"code":1990,"language":1149,"meta":1150},[1147],"from pyecharts.charts import Gauge, Liquid, WordCloud, Radar, Timeline\n\n# ===== 仪表盘 =====\ngauge = Gauge()\ngauge.add('完成率', [('完成率', 78.5)],\n          min_=0, max_=100,\n          detail_label_opts=opts.LabelOpts(formatter='{value}%'))\n# 适合 KPI 看板\n\n# ===== 水球图（进度球） =====\nliquid = Liquid()\nliquid.add('完成度', [0.68, 0.55],              # 多圈叠加（可从外到内显示多圈）\n           shape='circle')                      # 'circle','diamond','rect','roundRect','triangle'\n# 适合展示百分比指标\n\n# ===== 词云图 =====\nwordcloud = WordCloud()\nwordcloud.add('关键词',\n              [('数据可视化', 100), ('Python', 80), ('matplotlib', 60),\n               ('Seaborn', 50), ('Pyecharts', 70)],\n              shape='circle',                   # 词云形状：'circle','cardioid','diamond','triangle'\n              word_size_range=[20, 100],        # 字号范围\n)\n\n# ===== 雷达图 =====\nradar = Radar()\nradar.add_schema(schema=[\n    opts.RadarIndicatorItem(name='速度', max_=100),\n    opts.RadarIndicatorItem(name='力量', max_=100),\n    opts.RadarIndicatorItem(name='技巧', max_=100),\n    opts.RadarIndicatorItem(name='防守', max_=100),\n    opts.RadarIndicatorItem(name='体能', max_=100),\n])\nradar.add('球员A', [[85, 70, 90, 60, 80]])       # 数据需两层列表\nradar.add('球员B', [[70, 90, 65, 85, 75]])\n\n# ===== 时间线轮播（将多个图表串联成动画） =====\ntimeline = Timeline()\nfor year in ['2020', '2021', '2022', '2023']:\n    bar = Bar()\n    bar.add_xaxis(['A', 'B', 'C'])\n    bar.add_yaxis(year, [np.random.randint(100) for _ in range(3)])\n    timeline.add(bar, year)                      # 每年一个图表帧\ntimeline.add_schema(is_auto_play=True, play_interval=1500)  # 自动播放，每帧1.5秒\n# Timeline 是一个容器，可以将任何图表作为帧放入\n",[1115,1992,1990],{"__ignoreMap":1150},[1439,1994,1996],{"id":1995},"_74-pyecharts-图表类型速查总表","7.4 Pyecharts 图表类型速查总表",[1468,1998,1999,2015],{},[1471,2000,2001],{},[1474,2002,2003,2006,2009,2012],{},[1477,2004,2005],{},"分类",[1477,2007,2008],{},"图表",[1477,2010,2011],{},"导入路径",[1477,2013,2014],{},"典型场景",[1487,2016,2017,2035,2052,2069,2086,2103,2120,2138,2155,2172,2189,2206,2223,2240,2258,2275,2292,2309],{},[1474,2018,2019,2024,2027,2032],{},[1492,2020,2021],{},[1110,2022,2023],{},"基础",[1492,2025,2026],{},"柱状图",[1492,2028,2029],{},[1115,2030,2031],{},"from pyecharts.charts import Bar",[1492,2033,2034],{},"类别对比",[1474,2036,2037,2041,2044,2049],{},[1492,2038,2039],{},[1110,2040,2023],{},[1492,2042,2043],{},"折线图",[1492,2045,2046],{},[1115,2047,2048],{},"from pyecharts.charts import Line",[1492,2050,2051],{},"趋势变化",[1474,2053,2054,2058,2061,2066],{},[1492,2055,2056],{},[1110,2057,2023],{},[1492,2059,2060],{},"饼图\u002F环形图",[1492,2062,2063],{},[1115,2064,2065],{},"from pyecharts.charts import Pie",[1492,2067,2068],{},"占比分布",[1474,2070,2071,2075,2078,2083],{},[1492,2072,2073],{},[1110,2074,2023],{},[1492,2076,2077],{},"散点图",[1492,2079,2080],{},[1115,2081,2082],{},"from pyecharts.charts import Scatter",[1492,2084,2085],{},"相关性",[1474,2087,2088,2092,2095,2100],{},[1492,2089,2090],{},[1110,2091,2023],{},[1492,2093,2094],{},"箱线图",[1492,2096,2097],{},[1115,2098,2099],{},"from pyecharts.charts import Boxplot",[1492,2101,2102],{},"分布对比",[1474,2104,2105,2109,2112,2117],{},[1492,2106,2107],{},[1110,2108,2023],{},[1492,2110,2111],{},"热力图",[1492,2113,2114],{},[1115,2115,2116],{},"from pyecharts.charts import HeatMap",[1492,2118,2119],{},"矩阵数据",[1474,2121,2122,2127,2130,2135],{},[1492,2123,2124],{},[1110,2125,2126],{},"地理",[1492,2128,2129],{},"地图",[1492,2131,2132],{},[1115,2133,2134],{},"from pyecharts.charts import Map",[1492,2136,2137],{},"区域数据",[1474,2139,2140,2144,2147,2152],{},[1492,2141,2142],{},[1110,2143,2126],{},[1492,2145,2146],{},"地理坐标系",[1492,2148,2149],{},[1115,2150,2151],{},"from pyecharts.charts import Geo",[1492,2153,2154],{},"地理散点",[1474,2156,2157,2161,2164,2169],{},[1492,2158,2159],{},[1110,2160,1611],{},[1492,2162,2163],{},"关系图",[1492,2165,2166],{},[1115,2167,2168],{},"from pyecharts.charts import Graph",[1492,2170,2171],{},"网络拓扑",[1474,2173,2174,2178,2181,2186],{},[1492,2175,2176],{},[1110,2177,1611],{},[1492,2179,2180],{},"桑基图",[1492,2182,2183],{},[1115,2184,2185],{},"from pyecharts.charts import Sankey",[1492,2187,2188],{},"流量流向",[1474,2190,2191,2195,2198,2203],{},[1492,2192,2193],{},[1110,2194,1611],{},[1492,2196,2197],{},"漏斗图",[1492,2199,2200],{},[1115,2201,2202],{},"from pyecharts.charts import Funnel",[1492,2204,2205],{},"转化率",[1474,2207,2208,2212,2215,2220],{},[1492,2209,2210],{},[1110,2211,1653],{},[1492,2213,2214],{},"矩形树图",[1492,2216,2217],{},[1115,2218,2219],{},"from pyecharts.charts import TreeMap",[1492,2221,2222],{},"层级占比",[1474,2224,2225,2229,2232,2237],{},[1492,2226,2227],{},[1110,2228,1653],{},[1492,2230,2231],{},"旭日图",[1492,2233,2234],{},[1115,2235,2236],{},"from pyecharts.charts import Sunburst",[1492,2238,2239],{},"多层饼图",[1474,2241,2242,2247,2250,2255],{},[1492,2243,2244],{},[1110,2245,2246],{},"特殊",[1492,2248,2249],{},"仪表盘",[1492,2251,2252],{},[1115,2253,2254],{},"from pyecharts.charts import Gauge",[1492,2256,2257],{},"KPI 指标",[1474,2259,2260,2264,2267,2272],{},[1492,2261,2262],{},[1110,2263,2246],{},[1492,2265,2266],{},"水球图",[1492,2268,2269],{},[1115,2270,2271],{},"from pyecharts.charts import Liquid",[1492,2273,2274],{},"进度百分比",[1474,2276,2277,2281,2284,2289],{},[1492,2278,2279],{},[1110,2280,2246],{},[1492,2282,2283],{},"词云图",[1492,2285,2286],{},[1115,2287,2288],{},"from pyecharts.charts import WordCloud",[1492,2290,2291],{},"文本权重",[1474,2293,2294,2298,2301,2306],{},[1492,2295,2296],{},[1110,2297,2246],{},[1492,2299,2300],{},"雷达图",[1492,2302,2303],{},[1115,2304,2305],{},"from pyecharts.charts import Radar",[1492,2307,2308],{},"多维对比",[1474,2310,2311,2316,2319,2324],{},[1492,2312,2313],{},[1110,2314,2315],{},"容器",[1492,2317,2318],{},"时间线轮播",[1492,2320,2321],{},[1115,2322,2323],{},"from pyecharts.charts import Timeline",[1492,2325,2326],{},"动态播放",[1439,2328,2330],{"id":2329},"_75-pyecharts-vs-matplotlibseaborn-对比","7.5 Pyecharts vs Matplotlib\u002FSeaborn 对比",[1468,2332,2333,2346],{},[1471,2334,2335],{},[1474,2336,2337,2340,2343],{},[1477,2338,2339],{},"维度",[1477,2341,2342],{},"Pyecharts",[1477,2344,2345],{},"Matplotlib\u002FSeaborn",[1487,2347,2348,2361,2374,2387,2400,2413,2426,2439],{},[1474,2349,2350,2355,2358],{},[1492,2351,2352],{},[1110,2353,2354],{},"输出格式",[1492,2356,2357],{},"HTML（交互式）",[1492,2359,2360],{},"PNG\u002FSVG\u002FPDF（静态）",[1474,2362,2363,2368,2371],{},[1492,2364,2365],{},[1110,2366,2367],{},"交互性",[1492,2369,2370],{},"悬停、缩放、拖拽、图例筛选",[1492,2372,2373],{},"无（除非用 %matplotlib widget）",[1474,2375,2376,2381,2384],{},[1492,2377,2378],{},[1110,2379,2380],{},"学习曲线",[1492,2382,2383],{},"中等（需理解 opts 配置体系）",[1492,2385,2386],{},"中等（需理解 figure\u002Faxes 对象）",[1474,2388,2389,2394,2397],{},[1492,2390,2391],{},[1110,2392,2393],{},"图表类型",[1492,2395,2396],{},"30+ 种，含地图\u002F桑基\u002F仪表等",[1492,2398,2399],{},"基础统计图为主",[1474,2401,2402,2407,2410],{},[1492,2403,2404],{},[1110,2405,2406],{},"中文支持",[1492,2408,2409],{},"原生完美支持",[1492,2411,2412],{},"需额外配置字体",[1474,2414,2415,2420,2423],{},[1492,2416,2417],{},[1110,2418,2419],{},"网页嵌入",[1492,2421,2422],{},"天然适配，一个 HTML 搞定",[1492,2424,2425],{},"需先保存图片再嵌入",[1474,2427,2428,2433,2436],{},[1492,2429,2430],{},[1110,2431,2432],{},"论文\u002F出版",[1492,2434,2435],{},"不支持（无法导出矢量图）",[1492,2437,2438],{},"完美支持（PDF\u002FSVG 矢量输出）",[1474,2440,2441,2446,2449],{},[1492,2442,2443],{},[1110,2444,2445],{},"适用场景",[1492,2447,2448],{},"Web 看板、数据分析报告、交互仪表盘",[1492,2450,2451],{},"学术论文、出版物、静态报告",[1096,2453],{},[1099,2455,2457],{"id":2456},"八收尾区","八、收尾区",[1144,2459,2462],{"className":2460,"code":2461,"language":1149,"meta":1150},[1147],"plt.tight_layout(pad=1.5, h_pad=1.0, w_pad=1.0)\n# 【子图】自动调整子图间距和边距；pad 控制 Figure 边缘与子图间的距离（英寸）\n# h_pad\u002Fw_pad 控制子图之间的垂直\u002F水平间距\n\nplt.savefig('out.png', dpi=300, bbox_inches='tight', facecolor='white', transparent=False)\n# dpi=300：输出分辨率300 DPI（出版级），图片像素 = figsize × dpi\n# bbox_inches='tight'：自动裁剪多余的空白边缘，让图片内容紧凑（最常用）\n# bbox_inches=None 则保留完整画布（含白边）；也可手动指定 bbox_inches=(-0.5,-0.5,8.5,5.5)\n# facecolor='white'：图片背景色设为白色；transparent=True 则背景透明（适合叠加到海报\u002F网页）\n\nplt.show()\n# 显示所有已创建的 Figure；在 Jupyter 中通常自动显示，脚本中必须显式调用\n",[1115,2463,2461],{"__ignoreMap":1150},[1096,2465],{},[1099,2467,2469],{"id":2468},"九模板","九、模板",[1144,2471,2474],{"className":2472,"code":2473,"language":1149,"meta":1150},[1147],"import numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\n# ===== 1. 全局配置 =====\nplt.rcParams['font.sans-serif'] = ['SimHei']        # 【字体配置】全局中文字体\nplt.rcParams['axes.unicode_minus'] = False          # 【字体配置】负号正常显示\nplt.rcParams['figure.dpi'] = 100                    # 全局分辨率\n\n# ===== 2. 数据 =====\nnp.random.seed(42)\nx = np.arange(10)\ny1 = np.random.rand(10) * 100\ny2 = np.random.rand(10) * 100\nz_color = np.random.rand(10)                        # 用于 cmap 映射的第三维数据\nz_size = np.random.rand(10) * 500                   # 用于气泡大小的第三维数据\n\n# ===== 3. 画布与子图 =====\nfig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 10))\n# 【子图】创建2行2列共4个子图，axes[0,0]~axes[1,1]\n\n# ===== 4. 子图1：折线图（演示刻度配置） =====\nax1 = axes[0, 0]\nax1.plot(x, y1, color='#3A86FF', marker='o', linewidth=2, label='系列A')\nax1.set_xlabel('时间', fontsize=12)                  # 【刻度配置】x轴标签\nax1.set_ylabel('数值', fontsize=12)                  # 【刻度配置】y轴标签\nax1.set_title('折线图示例', fontsize=14, fontweight='bold')\nax1.set_xticks(x)                                   # 【刻度配置】每个数据点都有刻度\nax1.set_xticklabels([f'第{i}天' for i in range(10)], rotation=45)\n# 【刻度配置】自定义中文刻度标签+旋转45°防止重叠\nax1.tick_params(axis='both', labelsize=9)            # 【刻度配置】统一调整刻度字号\nax1.spines['top'].set_visible(False)                 # 去顶边框\nax1.spines['right'].set_visible(False)               # 去右边框\nax1.legend(loc='best', frameon=False)\nax1.grid(True, linestyle='--', alpha=0.3)\n\n# ===== 5. 子图2：柱状图（演示字体配置） =====\nax2 = axes[0, 1]\nbars = ax2.bar(x, y2, color='#FF6B6B', width=0.6, edgecolor='white')\nax2.set_title('柱状图 - 中文字体测试', fontsize=14)   # 【字体配置】标题用 SimHei 中文显示\nax2.set_xlabel('类别', fontsize=12)                   # 【字体配置】轴标签中文显示\nax2.set_ylabel('销售额（万元）', fontsize=12)          # 【字体配置】y轴标签含中文+特殊符号\nax2.spines['top'].set_visible(False)\nax2.spines['right'].set_visible(False)\n# 在柱顶加数值标签\nfor bar in bars:\n    height = bar.get_height()\n    ax2.text(bar.get_x() + bar.get_width()\u002F2., height + 1,\n             f'{height:.1f}', ha='center', va='bottom', fontsize=9)\n    # 【字体配置】ax.text 的 fontsize 控制标注文字大小\n\n# ===== 6. 子图3：气泡图（演示 cmap 使用） =====\nax3 = axes[1, 0]\nsc = ax3.scatter(x, y1, c=z_color, s=z_size, cmap='viridis', alpha=0.7, edgecolors='gray', linewidth=0.5)\n# 【cmap】c=z_color：z_color 数组的每个值通过 cmap='viridis' 映射为颜色\n# 【cmap】s=z_size：z_size 控制每个气泡的大小，实现\"大小+颜色\"双通道第三维编码\nax3.set_title('气泡图 - cmap 演示', fontsize=14)\nax3.set_xlabel('X 轴')\nax3.set_ylabel('Y 轴')\ncbar = plt.colorbar(sc, ax=ax3, label='颜色强度', shrink=0.85)\n# 【cmap】colorbar 将数值→颜色的映射关系可视化，shrink 缩小高度避免超出\ncbar.ax.tick_params(labelsize=8)\n\n# ===== 7. 子图4：热力图（演示 cmap 双向映射） =====\nax4 = axes[1, 1]\ncorr = np.corrcoef(np.random.randn(5, 100))          # 5×5 相关系数矩阵（-1到1）\nsns.heatmap(corr, annot=True, fmt='.2f', cmap='coolwarm',\n            vmin=-1, vmax=1, square=True, linewidths=0.5,\n            cbar_kws={'shrink': 0.8, 'label': '相关系数'}, ax=ax4)\n# 【cmap】cmap='coolwarm'：蓝(-1)→白(0)→红(+1)，正向暖色负向冷色，相关系数可视化的黄金选择\n# 【cmap】vmin=-1, vmax=1：锁定 cmap 映射范围，确保0始终映射到白色\nax4.set_title('相关系数热力图', fontsize=14)\n\n# ===== 8. 收尾 =====\nplt.tight_layout(pad=2.0)                            # 【子图】统一调整所有子图间距\nplt.savefig('demo.png', dpi=300, bbox_inches='tight')\nplt.show()\n",[1115,2475,2473],{"__ignoreMap":1150},{"title":1150,"searchDepth":2477,"depth":2477,"links":2478},4,[2479,2481,2482,2483,2484,2485,2492,2504,2505],{"id":1101,"depth":2480,"text":1102},2,{"id":1157,"depth":2480,"text":1158},{"id":1260,"depth":2480,"text":1261},{"id":1318,"depth":2480,"text":1319},{"id":1330,"depth":2480,"text":1331},{"id":1436,"depth":2480,"text":1437,"children":2486},[2487,2489,2490,2491],{"id":1441,"depth":2488,"text":1442},3,{"id":1580,"depth":2488,"text":1581},{"id":1603,"depth":2488,"text":1604},{"id":1760,"depth":2488,"text":1761},{"id":1772,"depth":2480,"text":1773,"children":2493},[2494,2495,2496,2502,2503],{"id":1776,"depth":2488,"text":1777},{"id":1915,"depth":2488,"text":1916},{"id":1945,"depth":2488,"text":1946,"children":2497},[2498,2499,2500,2501],{"id":1955,"depth":2477,"text":1956},{"id":1965,"depth":2477,"text":1966},{"id":1975,"depth":2477,"text":1976},{"id":1985,"depth":2477,"text":1986},{"id":1995,"depth":2488,"text":1996},{"id":2329,"depth":2488,"text":2330},{"id":2456,"depth":2480,"text":2457},{"id":2468,"depth":2480,"text":2469},"https:\u002F\u002Fpicx.zhimg.com\u002F80\u002Fv2-282d207715c4d3a3fc7465fd5d6b5210_720w.webp?source=d16d100b","关于 matplotlib、Seaborn 和 Pyecharts 三个库的内容","md",true,{"uuid":2511,"slots":2512},"b8d70910-c4f4-11f0-83bd-25018b4642b8",{},{"title":1085,"description":2507},"posts\u002F数据可视化\u002F2026-06-15-数据可视化-可视化库",[24],"b7w2VlAdIg1Hl2fWub3PLe-8YEZryhwRr6NGbZt41a0",1790443284140]