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()
