13

Pareto は、Excel と Tableu で非常に人気のあるダイアグラムです。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

パレート図の描き方 おそらくパンダ、シーボーン、matplotlibなどを使用していますか?

これまでのところ、降順の棒グラフを作成できました。しかし、それらの上に累積合計線プロットを配置することはまだ残っています。

私の試み: df.sort_values(by='country',ascending=False).plot.bar()

必要なプロット:

4

5 に答える 5

27

おそらく、パーセンテージを含む新しい列を作成し、一方の列を棒グラフとしてプロットし、もう一方の列を 2 つの軸の折れ線グラフとしてプロットすることをお勧めします。

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

ここに画像の説明を入力

于 2018-12-02T09:24:25.870 に答える