如何在Python中创建一个帕累托图(分步骤)

429 阅读2分钟

帕累托图是一种显示类别的有序频率和类别的累积频率的图表:

Pareto chart in Python

本教程提供了一个如何在Python中创建帕累托图的分步示例。

第一步:创建数据

假设我们进行一项调查,要求350个不同的人在A、B、C、D和E品牌中找出他们最喜欢的麦片品牌。

我们可以创建以下pandas DataFrame来保存调查的结果:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'count': [97, 140, 58, 6, 17, 32]})
df.index = ['B', 'A', 'C', 'F', 'E', 'D']

#sort DataFrame by count descending
df = df.sort_values(by='count', ascending=False)

#add column to display cumulative percentage
df['cumperc'] = df['count'].cumsum()/df['count'].sum()*100

#view DataFrame
df

	count	cumperc
A	140	40.000000
B	97	67.714286
C	58	84.285714
D	32	93.428571
E	17	98.285714
F	6	100.000000

第二步:创建帕累托图

我们可以使用下面的代码来创建帕累托图表:

import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter

#define aesthetics for plot
color1 = 'steelblue'
color2 = 'red'
line_size = 4

#create basic bar plot
fig, ax = plt.subplots()
ax.bar(df.index, df['count'], color=color1)

#add cumulative percentage line to plot
ax2 = ax.twinx()
ax2.plot(df.index, df['cumperc'], color=color2, marker="D", ms=line_size)
ax2.yaxis.set_major_formatter(PercentFormatter())

#specify axis colors
ax.tick_params(axis='y', colors=color1)
ax2.tick_params(axis='y', colors=color2)

#display Pareto chart
plt.show()

Pareto chart in Python

x轴显示不同品牌的频率从高到低排序。

左边的y轴显示每个品牌的频率,右边的y轴显示各品牌的累积频率。

例如,我们可以看到。

  • 品牌A约占总调查回复的40%。
  • 品牌A和B约占总调查回复的70%。
  • 品牌A、B和C约占总调查回复的85%。

以此类推。

第三步:自定义帕累托图(可选)

你可以改变条形图的颜色和累计百分比线的大小,使帕累托图看起来像你想要的那样。

例如,我们可以把条形图改成粉红色,把线改成紫色并略微粗一些:

import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter

#define aesthetics for plot
color1 = 'pink'
color2 = 'purple'
line_size = 6

#create basic bar plot
fig, ax = plt.subplots()
ax.bar(df.index, df['count'], color=color1)

#add cumulative percentage line to plot
ax2 = ax.twinx()
ax2.plot(df.index, df['cumperc'], color=color2, marker="D", ms=line_size)
ax2.yaxis.set_major_formatter(PercentFormatter())

#specify axis colors
ax.tick_params(axis='y', colors=color1)
ax2.tick_params(axis='y', colors=color2)

#display Pareto chart
plt.show()

其他资源

下面的教程解释了如何在Python中创建其他常见的可视化图表:

如何在Python中制作钟形曲线
如何在Python中创建Ogive图
如何在Python中创建茎叶图