matplotlib 仅在饼图楔形之间绘制某些分隔线

3okqufwl  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(146)

我只想在一张纸上的楔子之间画一些分界线。
这是我的图表目前的样子:


的数据
我希望它看起来是这样的



在研究过程中,我发现我可以使用wedgeprops属性添加分割线,或者在绘制图表后添加分割线,如下所示:

wedges = plt.pie(sizes, labels=labels, colors=colours, autopct='%1.1f%%')
    for wedge in wedges[0]:
        wedge.set_lw(0.5)
        wedge.set_edgecolor("black")

字符串
然而,从我所看到的,一个楔形的线宽属性适用于整个楔形周围的方式,我不能修改一个单一的边缘。
我发现,通过使用补丁,你可以画一个像这样的图表的轮廓圆:

circle = matplotlib.patches.Circle(center, radius, fill=False, edgecolor="k", linewidth=2)
ax.add_patch(circle)


但是在wiki中,我看不到一行的补丁,我确实看到了matplotlib.lines.Line2D,但不确定如何在这种情况下正确使用它。
这是我的完整代码。我试图不画一个分界线之间的“分配”(橙色)和“填充”)(鲑鱼)部分。

def graph_memory_layout(memory_layout):
    # Format: F(ree)/A(llocated)[number of bytes]P(adding)[number of bytes] [space] [next entry]

    # Extract infomation
    layout = memory_layout.split()
    colours = []
    sizes=[]

    for memory in layout:
        first_char = memory[0]
        if (first_char == 'A'):
            allocated_bytes = 0
            padded_bytes = 0
            padded_flag = None

            for i, char in enumerate(memory[1:]):
                if char == 'P':
                    padded_flag = i + 1

            allocated_bytes = int(memory[1:padded_flag])
            padded_bytes = int(memory[padded_flag + 1:])

            payload_bytes = allocated_bytes - padded_bytes
            sizes.append(payload_bytes)
            colours.append(ALLOCATED_COLOUR)

            if padded_bytes is not 0:
                sizes.append(padded_bytes)
                colours.append(PADDED_COLOUR)
                # Perhaps I could track that these wedges shouldn't have a dividing line and use that infomation later somehow?
            
        elif (first_char == 'F'):
            sizes.append(memory[1:])
            colours.append(FREE_COLOUR)

    # Create pie chart 
    wedges = plt.pie(sizes, colors=colours)
    for wedge in wedges[0]:
        wedge.set_lw(0.5)
        wedge.set_edgecolor("black")

    plt.axis("equal")
    plt.title("Memory Layout")

     # Draw the chart
    plt.show()

nbysray5

nbysray51#

你的思路是正确的。你需要画出下面的扇形的轮廓,然后用饼图的半径画出一个轮廓圆。

import matplotlib.pyplot as plt
import matplotlib.patches

if __name__ == '__main__':

    data = [25.0, 25.0, 50.0]

    fig, ax = plt.subplots()
    wedges, _ = ax.pie(data)

    wedges[-1].set_linewidth(0.5)
    wedges[-1].set_edgecolor('k')

    center = wedges[0].center
    r = wedges[0].r
    circle = matplotlib.patches.Circle(center, r, fill=False, edgecolor="k", linewidth=0.5)
    ax.add_patch(circle)

    plt.show()

字符串

相关问题