Matplotlib 饼状图

创建饼状图

应用 Pyplot,您可以使用 pie() 函数来绘制饼状图:

实例

简单的饼图:

  1. import sys
  2. import matplotlib
  3. matplotlib.use('Agg')
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. y = np.array([35, 25, 25, 15])
  7. plt.pie(y)
  8. plt.show()
  9. #Two lines to make our compiler able to draw:
  10. plt.savefig(sys.stdout.buffer)
  11. sys.stdout.flush()
结果:

正如您所看到的,饼图为数组中的每个值(在本例中为[35,25,25,15])绘制了一块(称为 wedge)。

默认情况下,第一个 wedge 的打印从 x 轴开始,并 逆时针移动

注:通过使用以下公式将该值与所有其他值进行比较,确定每个 wedge 的尺寸:
值除以所有值之和:x/sum(x)

标签

使用 label 参数将标签添加到饼图中。

label 参数必须是一个数组,每个 wedge 有一个标签:

实例

一个简单的饼状图:

  1. import sys
  2. import matplotlib
  3. matplotlib.use('Agg')
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. y = np.array([35, 25, 25, 15])
  7. mylabels = ["Apples", "Bananas", "Cherries", "Dates"]
  8. plt.pie(y, labels = mylabels)
  9. plt.show()
  10. plt.savefig(sys.stdout.buffer)
  11. sys.stdout.flush()
结果:


起始角度

如前所述,默认的起始角度位于 x 轴,但您可以通过指定一个 startangle 参数来改变起始角度。

startangle 参数定义为角度,单位为度,默认角度为 0:

实例

以 90 度角开始第一个 wedge:

  1. import sys
  2. import matplotlib
  3. matplotlib.use('Agg')
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. y = np.array([35, 25, 25, 15])
  7. mylabels = ["Apples", "Bananas", "Cherries", "Dates"]
  8. plt.pie(y, labels = mylabels, startangle = 90)
  9. plt.show()
  10. #Two lines to make our compiler able to draw:
  11. plt.savefig(sys.stdout.buffer)
  12. sys.stdout.flush()
结果:


Explode

也许你想要一个突出的 wedge ?explode 参数可用让你达到这个效果。

explode参数(如果指定,而不是 None)必须是一个数组,每个 wedge 有一个值。

每个值表示每个 wedge 显示的离中心的距离:

实例

将 “Apples” 的 wedge 从饼的中心拉出 0.2:

  1. import sys
  2. import matplotlib
  3. matplotlib.use('Agg')
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. y = np.array([35, 25, 25, 15])
  7. mylabels = ["Apples", "Bananas", "Cherries", "Dates"]
  8. myexplode = [0.2, 0, 0, 0]
  9. plt.pie(y, labels = mylabels, explode = myexplode)
  10. plt.show()
  11. #Two lines to make our compiler able to draw:
  12. plt.savefig(sys.stdout.buffer)
  13. sys.stdout.flush()
结果:


阴影

通过设置 shadows 参数为 True 可以为饼图添加阴影效果:

实例

添加阴影:

  1. import sys
  2. import matplotlib
  3. matplotlib.use('Agg')
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. y = np.array([35, 25, 25, 15])
  7. mylabels = ["Apples", "Bananas", "Cherries", "Dates"]
  8. myexplode = [0.2, 0, 0, 0]
  9. plt.pie(y, labels = mylabels, explode = myexplode, shadow = True)
  10. plt.show()
  11. plt.savefig(sys.stdout.buffer)
  12. sys.stdout.flush()
结果:


颜色

您可以使用 colors 参数设置每个 wedge 的颜色。

如果指定 colors 参数必须是一个数组,每个 wedge 有一个值:

实例

为每个 wedge 指定一个新的颜色:

  1. import sys
  2. import matplotlib
  3. matplotlib.use('Agg')
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. y = np.array([35, 25, 25, 15])
  7. mylabels = ["Apples", "Bananas", "Cherries", "Dates"]
  8. mycolors = ["black", "hotpink", "b", "#4CAF50"]
  9. plt.pie(y, labels = mylabels, colors = mycolors)
  10. plt.show()
  11. plt.savefig(sys.stdout.buffer)
  12. sys.stdout.flush()
结果:

你可以使用 十六进制颜色, 或者另外的 140 种支持的颜色名称 , 或者以下简写的其中之一:

  • r - Red
  • g - Green
  • b - Blue
  • c - Cyan
  • m - Magenta
  • y - Yellow
  • k - Black
  • w - White

图例

要添加每个 wedge 的说明列表,请使用 legend() 函数:

实例

添加一个图例:

  1. import sys
  2. import matplotlib
  3. matplotlib.use('Agg')
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. y = np.array([35, 25, 25, 15])
  7. mylabels = ["Apples", "Bananas", "Cherries", "Dates"]
  8. plt.pie(y, labels = mylabels)
  9. plt.legend()
  10. plt.show()
  11. plt.savefig(sys.stdout.buffer)
  12. sys.stdout.flush()
结果:

图例添加标题

要在图例添加标题,请将 title 参数添加到 legend 函数中。

实例

在图例添加标题

  1. import sys
  2. import matplotlib
  3. matplotlib.use('Agg')
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. y = np.array([35, 25, 25, 15])
  7. mylabels = ["Apples", "Bananas", "Cherries", "Dates"]
  8. plt.pie(y, labels = mylabels)
  9. plt.legend(title = "Four Fruits:")
  10. plt.show()
  11. #Two lines to make our compiler able to draw:
  12. plt.savefig(sys.stdout.buffer)
  13. sys.stdout.flush()
结果: