matplotlib数据可视化之箱线图

matlablib数据可视化之箱线图(盒须图)

要想了解箱线图,我们从以下几个问题探讨的角度来了解它
箱线图长什么样?
箱线图可以做什么?
箱线图怎么画以及异常点怎么找?

第一个问题:箱线图长什么样?

直接上图
在这里插入图片描述
它就长这样,中间一个箱子,加上中间一条线贯穿,因此形象的被人们称为箱线图,那么看看中间想不想一个盒子,上下两边像不像两根“胡须”呢?
其实它还被人们形象的称为盒须图

那么

第二个问题:这样的图有有什么用?

相信你已经发现了,用这样一个箱线图,我们能够直观的看出数据的各个描述性统计信息分别大致在什么位置

当然,其实还能够显示平均数,下面画图的时候再演示

实际上,箱线图最大的作用并不止是这些,而是判断异常值

异常值也称为离群点,就是远离绝大多数样本点的特殊群体,通常这样的数据点在数据集中表现出不合理的特征。

可能看上面的图,你已经注意到了,超过上须的数据点我们就将它视为异常点,实际上,同样,低于下须的数据点我们也将它视为异常点

知道这些以后,我们着手通过数据集来找异常值了

第三个问题:箱线图怎么画以及异常点怎么找?

这里我用python的matplotlib的子模块plpyot来实现

实例:识别太阳黑子数据异常点

数据集(百度网盘)用兴趣一起做
链接:https://pan.baidu.com/s/1GZ8o9KYxuFZixl5inKADhA
提取码:wjwu

1.导入数据

导入数据分析三大神器

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = 'SimHei' # 处理图中中文显示不出的问题
plt.rcParams['axes.unicode_minus'] = False  # 让x刻度负号显现
%config InlineBackend.figure_format = 'svg'  # 解决图的分辨率问题(出矢量图)
sunsports = pd.read_csv('/datas/sunspots.csv',encoding='utf-8')  
# 换成你自己的数据存放路径

在这里插入图片描述
year是年份,counts是当年太阳黑子的数量

2.画箱线图
#绘制箱线图
plt.boxplot(x= sunsports['counts'],# 数据
            whis=1.5,#指定1.5倍四分位差
            widths=0.7, # 箱线图宽度
            showmeans=True,# 显示均值
            patch_artist=True,# 填充箱体颜色
            boxprops={'facecolor':'steelblue'}, # 指定箱体颜色
            meanprops={'markerfacecolor':'red'},# 指定均值点颜色
            labels=['']   # 去除箱线图x轴刻度值
           ) 
plt.show()

在这里插入图片描述
你可能已经注意到了,此数据中最少有5个异常值,但是遗憾的是,我们并不能看出是哪几个数据点是异常值。但是没有关系,我们可以采用计算的方式来找出异常值

2.1找异常值
# 计算下四分位数和上四分位数
Q1 = sunsports.counts.quantile(q=0.25)
Q3 =sunsports.counts.quantile(q=0.75)
Q1,Q3
# 计算上须和下须
up_whisker = Q3+1.5*(Q3-Q1)
lower_whisker = Q1-1.5*(Q3-Q1)
# 找到异常数据
sunsports[(sunsports.counts>up_whisker) | (sunsports.counts<lower_whisker)]

结果:
在这里插入图片描述
想了解更多知识,欢迎移步到微信公众号

扫码或搜索数据分析者

在这里插入图片描述

好了,箱线图就先分享到这儿,如果对你有帮助,不要忘记点赞或者小额打赏哦!

<think>好的,用户想做一个微信小程序,主题是愚公移山,每个人每秒钟生成10个子。我需要先理解用户的需求。首先,愚公移山的故事是关于坚持不懈的精神,所以小程序可能希望用户通过不断“生子”来象征移山的努力。 用户提到每秒钟生成10个子,这可能意味着用户需要一种自动增长的机制,但每秒10个的速度非常快,需要考虑实际可行性。微信小程序的性能是否支持这么高的生成频率?可能需要调整速度,比如每秒1个或每分钟几个,以避免卡顿或数据过载。 接下来,用户可能需要功能设计方面的建议。比如用户如何开始生成子嗣,是否需要点击按钮,还是自动进行。界面设计可能需要显示当前子嗣数量、移山进度,以及可能的成就系统来激励用户持续参。 数据存储方面,用户的进度需要保存在本地或服务器。本地存储简单但容易丢失,云开发可以持久化数据但涉及成本。用户可能没有技术背景,需要推荐易用的解决方案,比如微信云开发。 动画效果方面,简单的粒子效果或图标移动可以增强体验,但复杂动画可能影响性能。需要平衡美观和流畅度。 合规性方面,微信小程序有严格的内容规范,确保主题不涉及敏感内容,比如“生子”是否符合规定,可能需要调整用词,比如改为“帮手”或“工人”。 用户可能希望加入社交元素,比如排行榜或分享功能,让朋友之间竞争,增加活跃度。但需要用户授权和隐私保护。 最后,用户可能需要技术实现步骤的指导,比如使用setInterval或WebSocket进行实时更新,前端框架的选择,以及后端如何处理高并发请求。如果用户是新手,可能需要更详细的教程或推荐开发工具。 总结,用户的核心需求是做一个以愚公移山为主题的微信小程序,核心机制是自动生成子嗣来移山。需要从功能设计、技术实现、合规性和用户体验等方面提供建议,同时考虑实际可行性和用户的技术水平,给出合适的解决方案。</think>好的!如果要设计一个以“愚公移山”为主题的微信小程序,核心机制是“每秒钟生成10个子”来模拟愚公家族不断壮大的过程,以下是分步实现的思路和建议: --- ### **一、核心机制设计** 1. **子嗣生成逻辑** - **自动增长**:每秒自动生成10个子嗣(需考虑实际性能,建议用虚拟数值而非实时渲染大量对象)。 - **手动触发**:添加按钮让用户点击加速生成(例如“召集村民帮忙”)。 2. **数值平衡** - **初始速度**:1秒/10个子(默认速率)。 - **加速规则**:通过道具或成就提升速度(如“神话加成”使速度翻倍)。 --- ### **二、技术实现方案** #### **前端(微信小程序框架)** 1. **计时器控制** ```javascript let timer = null; let childrenCount = 0; // 启动生成 function startGenerating() { timer = setInterval(() => { childrenCount += 10; // 每秒+10 this.setData({ count: childrenCount }); }, 1000); } // 停止生成 function stopGenerating() { clearInterval(timer); } ``` 2. **动画效果** - 使用CSS3动画或`<canvas>`绘制简单粒子效果(如小人物图标从底部向上飘动)。 #### **后端(可选)** - 如需保存用户进度,可使用微信云开发(云数据库): ```javascript const db = wx.cloud.database(); // 存储数据 db.collection('users').add({ data: { count: childrenCount, timestamp: new Date() } }); ``` --- ### **三、功能扩展建议** 1. **移山进度可视化** - 设计一个山脉图标,子嗣数量越多,山脉逐渐被“挖空”(通过进度条或图形变化体现)。 2. **成就系统** - 里程碑奖励(如“1000子嗣解锁新工具”)。 - 彩蛋事件(如“玉帝感动,瞬间生成10000子”)。 3. **社交互动** - 排行榜:对比好友的移山进度。 - 分享助力:邀请好友加速生成。 --- ### **四、注意事项** 1. **性能优化** - 避免高频更新UI导致卡顿,可改为每秒更新一次数值。 - 粒子动画需限制最大数量(如仅显示最后100个子嗣的动画)。 2. **合规性** - 避免使用“生子”等敏感词汇,可替换为“帮手”“工人”等。 3. **用户留存** - 加入离线收益(关闭小程序后按时间计算子嗣增长)。 --- ### **五、示例界面设计** 1. **主页布局** ``` [山脉图标(动态减少)] [当前子嗣数量:10000] [加速按钮] [分享按钮] [成就列表] ``` 2. **动效灵感** - 子嗣图标从屏幕底部向上滑动,象征“移山”。 --- 如果需要具体代码片段或更详细的技术实现步骤,可以告诉我您想深入的部分(如动画、云存储等)! 🌄
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python和数据分析

钟意作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值