Maison > développement back-end > Tutoriel Python > [Tutoriel Python] Dessiner un graphique en cascade

[Tutoriel Python] Dessiner un graphique en cascade

黄舟
Libérer: 2017-02-07 16:09:21
original
2842 Les gens l'ont consulté

Le graphique en cascade est un type de graphique créé à l'origine par McKinsey Consulting Company. Il est appelé Waterfall Plot car il ressemble à une cascade. Ce type de graphique utilise une combinaison de valeur absolue et de valeur relative et convient principalement pour exprimer la relation quantitative entre plusieurs valeurs spécifiques. Cet article présente brièvement comment dessiner ce graphique à l'aide de Python.

La commande est la suivante

1)导入程序包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
2)导入及清理数据
def money(x, pos):
return "${:,.0f}".format(x)
formatter = FuncFormatter(money)
index = ['sales','returns','credit fees','rebates','late charges','shipping']
data = {'amount': [350000,-30000,-7500,-25000,95000,-7000]}
trans = pd.DataFrame(data=data,index=index)
blank = trans.amount.cumsum().shift(1).fillna(0)
total = trans.sum().amount
trans.loc["net"]= total
blank.loc["net"] = total
step = blank.reset_index(drop=True).repeat(3).shift(-1)
step[1::3] = np.nan
blank.loc["net"] = 0
3)绘制图像
my_plot = trans.plot(kind='bar', stacked=True, bottom=blank,legend=None, figsize=(10, 5), title="2014 Sales Waterfall")
my_plot.plot(step.index, step.values,'k')
my_plot.set_xlabel("Transaction Types")
my_plot.yaxis.set_major_formatter(formatter)
y_height = trans.amount.cumsum().shift(1).fillna(0)
max = trans.max()
neg_offset = max / 25
pos_offset = max / 50
plot_offset = int(max / 15)
loop = 0
for index, row in trans.iterrows():
if row['amount'] == total:
y = y_height[loop]
else:
y = y_height[loop] + row['amount']
if row['amount'] > 0:
y += pos_offset
else:
y -= neg_offset
my_plot.annotate("{:,.0f}".format(row['amount']),(loop,y),ha="center")
loop+=1
my_plot.set_ylim(0,blank.max()+int(plot_offset))
my_plot.set_xticklabels(trans.index,rotation=0)
my_plot.get_figure().savefig("waterfall.png",dpi=200,bbox_inches='tight')
Copier après la connexion

Le résultat est la suivante

[Tutoriel Python] Dessiner un graphique en cascade

Ce qui précède est le contenu de [Tutoriel Python] dessin d'un graphique en cascade, plus de contenu connexe Veuillez faire attention au site Web PHP chinois (www.php.cn) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal