You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Makie.jl饼图中为每个颜色添加单独标签

在Makie.jl饼图中为每个扇区添加单独标签

要给Makie.jl的饼图每个扇区设置单独标签,因为原生pie函数的label参数不支持传入向量,我们可以通过手动添加文本标签+自定义图例的方式解决,完整代码如下:

using CairoMakie

data   = [0.63, 0.15, 0.11, 0.11, 0.01]
colors = [:red, :yellow, :grey, :blue, :green]
labels = ["A", "B", "C", "D", "E"]

f = Figure()
ax = Axis(f[1,1], autolimitaspect=1)

# 绘制基础饼图
plt = pie!(ax, data, color=colors)

# 为每个扇区计算位置并添加标签
total = sum(data)
current_angle = -π/2  # 饼图默认从正上方开始,对应-π/2弧度
for (val, lab) in zip(data, labels)
    # 计算当前扇区的中心角度
    sector_angle = val / total * 2π
    center_angle = current_angle + sector_angle / 2
    # 计算标签的坐标(0.5是饼图半径的一半,避免标签超出扇区)
    x = 0.5 * cos(center_angle)
    y = 0.5 * sin(center_angle)
    # 添加文本标签
    text!(ax, x, y, text=lab, align=(:center, :center), color=:white)
    # 更新角度到下一个扇区的起始位置
    current_angle += sector_angle
end

# 创建自定义图例
legend_items = [PolyElement(color=col) for col in colors]
Legend(f[1,2], legend_items, labels, "分类")

display(f)

关键步骤说明:

  • 绘制基础饼图:先调用pie!绘制饼图,不使用原生label参数。
  • 计算标签位置:根据每个扇区的占比计算其中心角度,再转换为坐标,确保标签落在扇区中心。这里默认饼图从正上方开始,所以初始角度设为-π/2。
  • 添加文本标签:用text!函数在计算好的位置添加对应标签,可通过color参数调整标签颜色,增强可读性。
  • 自定义图例:由于原生饼图是单个绘图对象,无法直接生成多条目图例,因此创建对应每个颜色的PolyElement,再和标签绑定生成图例。

内容的提问来源于stack exchange,提问作者Corylus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:24:30