Skip to main content
 首页 » 编程设计

python之如何在 python 中制作帕累托图

2025年05月04日8虾米姐

Pareto 是 Excel 和 Tableau 中非常流行的图表。在 Excel 中我们可以很容易地绘制帕累托图,但我发现在 Python 中没有简单的方法来绘制该图。

我有一个像这样的 Pandas 数据框:

import numpy as np 
import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 
 
df = pd.DataFrame({'country': [177.0, 7.0, 4.0, 2.0, 2.0, 1.0, 1.0, 1.0]}) 
df.index = ['USA', 'Canada', 'Russia', 'UK', 'Belgium', 'Mexico', 'Germany', 'Denmark'] 
print(df) 
 
         country 
USA        177.0 
Canada       7.0 
Russia       4.0 
UK           2.0 
Belgium      2.0 
Mexico       1.0 
Germany      1.0 
Denmark      1.0 

如何使用 pandas、seaborn、matplotlib 等绘制 Pareto 图?

到目前为止,我已经能够制作一个降序条形图,但我仍然需要在它们上面放置一个累积总和线图。

我的尝试:

df.sort_values(by='country', ascending=False).plot.bar() 

所需情节:

请您参考如下方法:

您可能想要创建一个包含百分比的新列,并将一列绘制为条形图,另一列绘制为双轴中的折线图。

import pandas as pd 
import matplotlib.pyplot as plt 
from matplotlib.ticker import PercentFormatter 
 
df = pd.DataFrame({'country': [177.0, 7.0, 4.0, 2.0, 2.0, 1.0, 1.0, 1.0]}) 
df.index = ['USA', 'Canada', 'Russia', 'UK', 'Belgium', 'Mexico', 'Germany', 'Denmark'] 
df = df.sort_values(by='country',ascending=False) 
df["cumpercentage"] = df["country"].cumsum()/df["country"].sum()*100 
 
 
fig, ax = plt.subplots() 
ax.bar(df.index, df["country"], color="C0") 
ax2 = ax.twinx() 
ax2.plot(df.index, df["cumpercentage"], color="C1", marker="D", ms=7) 
ax2.yaxis.set_major_formatter(PercentFormatter()) 
 
ax.tick_params(axis="y", colors="C0") 
ax2.tick_params(axis="y", colors="C1") 
plt.show()