码字小白菜努力中 2024-03-11 22:55 采纳率: 88%
浏览 18
已结题

Python中怎么用matplotlib画图,需要显示百分比和数值(开发工具-pycharm)

Python怎么用matplotlib画图,想要显示百分比和数值怎么做?请在以下代码中补充

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = ["simhei"]

data = {"1星": 895, "2星": 187, "3星": 920, "4星": 986, "5星": 100495} 

data = pd.DataFrame([data])
# 绘制圆环图,并返回饼块对象
wedges, texts = plt.pie(data.iloc[0], wedgeprops={"width": 0.5})
# 构造annotate函数的**kwargs参数,设置引导线线型
kw = dict(arrowprops=dict(arrowstyle="-"), zorder=0, va="center")
# 遍历饼块绘制注释标签和引导线
for i, p in enumerate(wedges):
    # 根据matplotlib.patches.Wedge对象的theta1和theta2参数计算饼块均分点的角度
    ang = (p.theta2 - p.theta1) / 2.0 + p.theta1
    # 根据角度的弧度计算 饼块均分点的坐标(引导线的起点)
    y = np.sin(np.deg2rad(ang))
    x = np.cos(np.deg2rad(ang))
    # print(p.theta1, p.theta2, ang, np.deg2rad(ang), x, y)
    # 演示引导线起点位置
    # plt.plot(x, y, "or")
    # 根据x的值即角度所在象限确定引导线的对齐方式
    horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]
    # 设置引导线的连接方式
    connectionstyle = "angle,angleA=0,angleB={}".format(ang)
    kw["arrowprops"].update({"connectionstyle": connectionstyle})
    # 绘制注释标签和引导线
    plt.annotate(
        data.columns[i],
        xy=(x, y),
        xytext=(1.35 * np.sign(x), 1.4 * y),
        horizontalalignment=horizontalalignment,
        **kw
    )

plt.title("用户评分等级占比")
plt.show()

修改成功啦,但是数据重叠怎么办?

img

  • 写回答

4条回答 默认 最新

  • GISer Liu 2024-03-11 23:25
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    首先,根据题目描述,我们需要在圆环图上显示各部分的百分比和数值。为了实现这一点,我们可以对代码进行修改。下面是完整的解决方案:
    pythonCopy code

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    plt.rcParams["font.family"] = ["simhei"]
    data = {"1星": 895, "2星": 187, "3星": 920, "4星": 986, "5星": 100495}
    data = pd.DataFrame([data])
    # 绘制圆环图,并返回饼块对象
    wedges, texts, autotexts = plt.pie(data.iloc[0], wedgeprops={"width": 0.5}, autopct='%1.1f%%')
    # 添加百分比和数值标签
    for i, p in enumerate(wedges):
    # 根据matplotlib.patches.Wedge对象的theta1和theta2参数计算饼块均分点的角度
    ang = (p.theta2 - p.theta1) / 2.0 + p.theta1
    # 根据角度的弧度计算饼块均分点的坐标(引导线的起点)
    y = np.sin(np.deg2rad(ang))
    x = np.cos(np.deg2rad(ang))
    # 根据x的值即角度所在象限确定引导线的对齐方式
    horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]
    # 绘制注释标签和引导线
    plt.annotate(
    data.columns[i] + '\n' + f'{data.iloc[0, i]:,}' + '\n',  # 显示百分比和数值
    xy=(x, y),
    xytext=(1.35 * np.sign(x), 1.4 * y),
    horizontalalignment=horizontalalignment,
    arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color='black')
    )
    plt.title("用户评分等级占比")
    plt.show()
    

    在这个解决方案中,我们使用了autopct参数来自动计算并显示百分比,并通过autotexts获取了自动生成的文本对象。然后,我们在循环中为每个部分添加了自定义标签,包括原始标签、百分比和数值,并使用``` plt.annotate()

    ```函数将这些标签添加到图形中。
    这样,你就可以在圆环图上同时显示百分比和数值了。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月13日
  • 修改了问题 3月11日
  • 修改了问题 3月11日
  • 创建了问题 3月11日

悬赏问题

  • ¥30 为什么会失败呢,该如何调整
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析