增加饼图中单个扇区的半径matplotlib

increase radius of a single sector in pie chart matplotlib

我是matplotlib饼图新手,想知道如何设置饼图中单个扇区的半径。我知道如何设置图表的整体半径,但想增加单个扇区的半径。例如,在此图片中,扇区“1”与其他扇区相比具有更大的半径。 请注意:我不想为了增加半径而爆炸该扇区。

有知道的请告诉我!提前致谢。

直接的答案是,使用 Matplotlib 似乎不可能在同一个饼图中设置多个半径。

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt

data = [4, 3, 2, 1]

fig, ax = plt.subplots(figsize=(4,4))

wedges, texts = ax.pie(data, radius=1)

for w in wedges:
    w.set_width(.5)

wedges[0].set_radius(1.1)
wedges[1].set_radius(1)
wedges[2].set_radius(1)
wedges[3].set_radius(1)

plt.show()

radii = [w.radius for w in wedges]
print(radii)

我们可以看到半径实际上是不同的。

[1.1, 1, 1, 1]

但不同的半径看起来并没有什么不同

一个有趣的旁注是切片宽度 可以 不同:

不同宽度的切片

另一种方式

但是,您可以通过一些技巧来解决这个问题。不是绘制一个饼图,而是绘制两个 - 第一个“放大”切片不可见,第二个图“放大”切片设置为 only 可见切片。

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt

data = [4, 3, 2, 1]

fig, ax = plt.subplots(figsize=(4,4))

# Pie 1
wedges, texts = ax.pie(data, radius=1)

for w in wedges:
    w.set_width(.5)

wedges[0].set_visible(False)

# Pie 2
wedges1, texts1 = ax.pie(data, radius=1.1)

for w in wedges1:
    w.set_width(.6)

wedges1[1].set_visible(False)
wedges1[2].set_visible(False)
wedges1[3].set_visible(False)

plt.show()

带有放大切片的饼图示例

添加了 set_width 参数以使绘图成为像您的示例一样的“甜甜圈”图。请注意每个图表中实现所需外观所需的宽度值。