如何使用matplotlib绘制薪资最高的前5名员工条形图
实现仅展示薪资最高5名员工图表的方案
提供两种实现思路,优先推荐数据库层面处理的方案,性能更好:
方案1:修改SQL查询语句直接获取目标数据(推荐)
直接在查询时完成排序和截断,不需要拉取全量员工数据到本地处理,适合数据量较大的场景。你只需要把原代码中的SQL语句替换为以下内容即可:
SELECT name, salary FROM employee ORDER BY salary DESC LIMIT 5
- 逻辑说明:
ORDER BY salary DESC会按薪资从高到低排序,LIMIT 5直接取排序后的前5条结果,后续的绘图逻辑不需要做任何改动。 - 如果你使用的是SQL Server类数据库,把LIMIT语法替换为
SELECT TOP 5 name, salary...即可;Oracle数据库可使用WHERE ROWNUM <=5实现。
修改后完整代码参考:
def graph(): con = None try: con = connect("project.db") cursor = con.cursor() # 仅修改了这一行SQL语句 sql = "SELECT name, salary FROM employee ORDER BY salary DESC LIMIT 5" cursor.execute(sql) data = cursor.fetchall() name = [] salary = [] for i in data: name.append(i[0]) salary.append(i[1]) plt.bar(name, salary) plt.xlabel("Names of Employee") plt.ylabel("Salary of Employee") plt.title("Top 5 Highest Salaried Employee") plt.show() except Exception as e: showerror("issue ", e) con.rollback() finally: if con is not None: con.close()
方案2:Python层面处理全量数据
如果不方便修改SQL查询语句,可以在拉取到全量数据后,在Python代码中完成排序和截取:
只需要在cursor.fetchall()获取数据后,增加排序截取逻辑即可,示例如下:
# 原有获取数据逻辑不变 data = cursor.fetchall() # 新增:按薪资降序排序,取前5条 data = sorted(data, key=lambda x: x[1], reverse=True)[:5] # 后续遍历、绘图逻辑不变
如果你需要处理薪资并列的场景(比如第5、6名薪资相同,需要同时展示),可以调整判断逻辑,筛选所有薪资大于等于第5名薪资的员工即可。
内容的提问来源于stack exchange,提问作者Sharii
相关产品推荐
相关产品推荐

