如何在Matplotlib饼图中对相同标签的数值求和并合并占比?
合并饼图中相同标签的数值
方法1:在数据库查询阶段完成合并(推荐)
直接修改SQL语句,用GROUP BY按商品名称分组,同时对sztuki求和,从数据库拿到的就是已经合并好的数据,无需额外处理:
# 修改查询语句,分组求和商品数量 query = "SELECT towar, SUM(sztuki) AS suma_sztuk, SUM(zysk) AS suma_zysku FROM sklep GROUP BY towar" mycr.execute(query) wyniki = mycr.fetchall() nazwy = [] sztuki = [] for a in wyniki: nazwy.append(a[0]) sztuki.append(a[1]) plt.pie(sztuki, labels=nazwy, autopct='%.1f%%') plt.show()
方法2:在Python代码中处理查询结果
如果不想修改SQL,可以用字典遍历查询结果,累加相同标签对应的数值:
query = "SELECT towar, sztuki, zysk FROM sklep" mycr.execute(query) wyniki = mycr.fetchall() # 用字典存储合并后的商品名称与对应数量 towar_sztuki = {} for a in wyniki: towar = a[0] ilosc = a[1] if towar in towar_sztuki: towar_sztuki[towar] += ilosc else: towar_sztuki[towar] = ilosc # 提取字典的键和值作为饼图的标签与数据 nazwy = list(towar_sztuki.keys()) sztuki = list(towar_sztuki.values()) plt.pie(sztuki, labels=nazwy, autopct='%.1f%%') plt.show()
两种方法都能实现相同标签的数值合并,优先选择方法1——数据库的聚合操作比Python循环处理更高效,尤其是数据量较大时。
内容的提问来源于stack exchange,提问作者Michał
相关产品推荐
相关产品推荐

