¸üÐÂʱ¼ä:2017Äê12ÔÂ18ÈÕ15ʱ37·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:
ÔÚ Python ÖУ¬½«Êý¾Ý¿ÉÊÓ»¯ÓжàÖÖÑ¡Ôñ£¬ÕýÊÇÒòΪÕâÖÖ¶àÑùÐÔ£¬ºÎʱѡÓúÎÖÖ·½°¸²Å±äµÃ¼«¾ßÌôÕ½ÐÔ¡£±¾Îİüº¬ÁËһЩ½ÏΪÁ÷ÐеŤ¾ßÒÔ¼°ÈçºÎʹÓÃËüÃÇÀ´´´½¨¼òµ¥µÄÌõÐÎͼ£¬ÎÒ½«Ê¹ÓÃÏÂÃæ¼¸ÖÖ¹¤¾ßÀ´Íê³É»æÍ¼Ê¾Àý£º
· Pandas
· Seaborn
· ggplot
· Bokeh
· pygal
ʲôÊÇ Matplotlib?
Matplotlib ÊÇÖÚ¶à Python ¿ÉÊÓ»¯°üµÄ±Ç׿¡£Æä¹¦Äܷdz£Ç¿´ó£¬Í¬Ê±Ò²·Ç³£¸´ÔÓ¡£Äã¿ÉÒÔʹÓà Matplotlib È¥×öÈκÎÄãÏë×öµÄÊÂÇ飬µ«ÊÇÏëÒª¸ãÃ÷°×È´²¢·ÇÒ×Ê¡£ÎÒ²»´òËãչʾÔÉúµÄ Matplotlib Àý×Ó£¬ÒòΪºÜ¶à¹¤¾ß(ÌØ±ðÊÇ Pandas ºÍ Seaborn)ÊÇ»ùÓÚ Matplotlib µÄÇáÁ¿¼¶·â×°¡£
Pandas
Ê×ÏÈ£¬µ¼ÈëÄ£¿é²¢½«Êý¾Ý¶ÁÈë budget DataFrame£¬½«Êý¾ÝÅÅÐò²¢È¡Ç°10Ìõ¡£
import pandas as pd
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:10]
ÎÒÃǽ«ÔÚËùÓÐʾÀýÖÐʹÓÃÏàͬµÄ budget Êý¾Ý£¬ÏÂÃæÊÇÆäÖÐ5Ìõ£º

ÏÖÔÚ£¬µ÷Õûչʾ·ç¸ñΪ¸üÃÀ¹ÛµÄĬÈÏÉèÖ㬲¢´´½¨Í¼±í£º
pd.options.display.mpl_style = 'default'
budget_plot = budget.plot(kind="bar",x=budget["detail"],
title="MN Capital Budget - 2014",
legend=False)
ÉÏÊö´úÂëʹÓà detail ÁеÄÊý¾ÝÍê³ÉÁË´´½¨Í¼±íµÄÖ÷Òª¹¤×÷£¬Í¬Ê±Õ¹Ê¾ÁË title²¢ÒƳýÁË legend ¡£
ÏÂÃæÊǽ«Í¼±í´æÎª png ¸ñʽµÄ´úÂ룺
fig = budget_plot.get_figure()
fig.savefig("2014-mn-capital-budget.png")
»ù´¡Í¼±í¿´ÆðÀ´²»´í£¬ÀíÏëÇé¿öÏ£¬ÎÒÏë¶Ô y ÖáÔÙ×öһЩ¸ñʽ»¯£¬µ«ÊÇÕâÑù×öÐèҪʹÓà matplotlib µÄһЩ¹¦ÄÜ¡£ËäÈ»ÏÖÔÚµÄͼ±íÒÑÊÇÍêÃÀ¿ÉÓõĿÉÊÓ»¯Í¼±íÁË£¬µ«Êǽö½öͨ¹ý pandas ÊDz»¿ÉÄÜÍê³É¸ü¶à¶¨ÖƵġ£
Seaborn
Seaborn ÊÇÒ»¸ö»ùÓÚ matplotlib µÄ¿ÉÊÓ»¯¿â¡£ËüÖ¼ÔÚʹĬÈϵÄÊý¾Ý¿ÉÊÓ»¯¸ü¼ÓÔÃÄ¿¡£Ëü»¹Ö¼ÔÚ¼ò»¯¸´ÔÓͼ±íµÄ´´½¨£¬¿ÉÒÔÓë pandas ºÜºÃµØ¼¯³É¡£
±ê×¼µ¼°ü¼°¶ÁÈ¡Êý¾Ý£º
sns.set_style("darkgrid")
bar_plot = sns.barplot(x=budget["detail"],y=budget["amount"],
palette="muted",
x_order=budget["detail"].tolist())
plt.xticks(rotation=90)
plt.show()
ÕýÈçÄãËù¿´µ½µÄ£¬ÎÒ±ØÐÞʹÓà matplotlib Ðýת x ÖáµÄ±êÌâÒÔ±ã¿ÉÒÔÕý³£µØÔĶÁ¡£´ÓÍâ¹ÛÉÏ¿´£¬Í¼±í¿´ÆðÀ´²»´í¡£ÀíÏëÇé¿öÏ£¬ÎÒÏë¸ñʽ»¯ y ÖáÉϵĿ̶ȣ¬µ«ÎÒ²»ÖªµÀÔÚ²»Ê¹Óà matplotlib ÖÐµÄ plt.yticks µÄÇé¿öÏ£¬ÈçºÎʵÏÖ¸ñʽ»¯¡£
ggplot
ggplot Óë Seaborn ÀàËÆ£¬Ò²ÊÇ»ùÓÚ matplotlib ²¢Ö¼ÔÚÒÔ¼òµ¥µÄ·½Ê½Ìá¸ß matplotlib ¿ÉÊÓ»¯µÄÊÓ¾õ¸ÐȾÁ¦¡£Ëü²»Í¬ÓÚ seaborn ÊÇÒòΪËüÊÇ ggplot2 Ϊ R ÓïÑÔ×¼±¸µÄÒ»¸ö¶Ë¿Ú¡£»ùÓÚÕâ¸öÄ¿±ê£¬Ò»Ð© API µÄ½Ó¿ÚËäÈ»²»ÊÇºÜ pythonic µ«Êǹ¦ÄܺÜÇ¿´ó¡£
¼ÌÐøµ¼°ü²¢¶ÁÈ¡Êý¾Ý£º
import pandas as pd
from ggplot import *
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:10]
ÏÖÔÚÈÃÎÒÃÇͨ¹ýÁ¬½Ó¼¸Ìõ ggplot ÃüÁîÀ´¹¹Ôìͼ±í£º
p = ggplot(budget, aes(x="detail",y="amount")) +
geom_bar(stat="bar", labels=budget["detail"].tolist()) +
ggtitle("MN Capital Budget - 2014") +
xlab("Spending Detail") +
ylab("Amount") + scale_y_continuous(labels='millions') +
theme(axis_text_x=element_text(angle=90))
print p
ÕâËÆºõ¿´ÆðÀ´ÓÐÐ©Ææ¹Ö – ÓÈÆäÊÇʹÓà print p À´ÏÔʾͼ±í¡£µ«ÊÇ£¬ÎÒ·¢ÏÖÕâÑùÏà¶Ô¼òµ¥Ã÷ÁË¡£
ҪŪÇå³þÈçºÎ½«Îı¾Ðýת 90 ¶ÈÒÔ¼°ÈçºÎ½« x ÖáÉϵıêÇ©ÅÅÐò£¬È·ÊµÒª×öЩÉîÈëµÄÍÚ¾ò¡£
ÎÒ·¢ÏÖ×î¿áµÄ¹¦ÄÜÊÇ scale_y_continous£¬ Ëü¿ÉÒÔʹ±êÇ©¸üÃÀ¹Û¡£
Èç¹ûÄãÏ뽫ͼ±í±£´æÎªÍ¼Æ¬£¬Ê¹Óà ggsave¿ÉÒÔºÜÇáËɵذ쵽£º
ggsave(p, "mn-budget-capital-ggplot.png")
ÏÂͼÊÇ×îÖÕµÄͼƬ£¬ÎÒÖªµÀ»ÒÉ«¿ÉÄÜÓеã¶à£¬µ«ÊǺÁ²»·Ñʱ¾Í¿ÉÒÔ¸øËüÌíЩɫ²Ê¡£
Bokeh
Bokeh ²»Í¬ÓÚ֮ǰµÄ3¸ö¿â£¬Ëü²»ÒÀÀµÓÚ matplotlib ²¢ÇÒʵÏÖµÄÊÇÃæÏòÏÖ´úä¯ÀÀÆ÷µÄ¿ÉÊÓ»¯¡£ËüµÄÄ¿±êÊÇʵÏÖ½»»¥Ê½µÄ web ¿ÉÊÓ»¯£¬ËùÒÔÎÒµÄÀý×ӷdz£¼òµ¥¡£
µ¼°ü²¢¶ÁÈëÊý¾Ý£º
import pandas as pd
from bokeh.charts import Bar
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:10]
bokeh ²»Í¬µÄÒ»·½ÃæÊÇÎÒÐèÒªÃ÷È·ÁгöÎÒ»æÍ¼ÐèÒªµÄÖµ¡£
details = budget["detail"].values.tolist()
amount = list(budget["amount"].astype(float).values)
ÏÖÔÚÎÒÃÇ¿ÉÒÔ»æÍ¼ÁË¡£ÏÂÃæµÄ´úÂ뽫»áʵÏÖÔÚä¯ÀÀÆ÷ÖÐչʾ°üº¬Í¼±íµÄ HTML Ò³Ãæ£¬Èç¹ûÏëÓÃ×÷ÆäËûչʾ£¬¿ÉÒÔ±£´æÆä png ¸ñʽµÄ¸±±¾¡£
bar = Bar(amount, details, filename="bar.html")
bar.title("MN Capital Budget - 2014").xlabel("Detail").ylabel("Amount")
bar.show()
ÏÂÃæÊÇ png ¸ñʽµÄͼƬ£º
ÕýÈçÄãËù¿´µ½µÄ£¬Í¼±íÊǷdz£¸É¾»µÄ¡£ÎÒûÓÐÕÒµ½Ò»ÖÖ¸ü¼òµ¥µÄ·½Ê½À´¸ñʽ»¯ y Öá¡£Bokeh Óкܶ๦ÄÜ£¬µ«ÔÚ±¾ÀýÖÐÎÒ²¢Î´ÉîÈë̽Ë÷¡£
Pygal
Pygal ÓÃÓÚ´´½¨ svg ¸ñʽµÄͼ±í£¬Èç¹û°²×°ÁËÕýÈ·µÄÒÀÀµ£¬Ò²¿ÉÒÔ±£´æÎª png ¸ñʽ¡£svg ÎļþÔÚ´´½¨½»»¥Ê½Í¼±íʱ·Ç³£ÓÐÓã¬Í¬Ê±ÎÒÒ²·¢ÏÖ£¬Ê¹Óô˹¤¾ß¿ÉÒԷdz£ÈÝÒ׵ش´½¨¶ÀÌØ¶øÓÖ¼«¾ßÊÓ¾õ¸ÐȾÁ¦µÄͼ±í¡£
µ¼°ü¼°¶ÁÈ¡Êý¾Ý£º
import pandas as pd
import pygal
from pygal.style import LightStyle
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:10]
ÎÒÃÇÐèÒª´´½¨Í¼±íÀàÐͲ¢×öһЩ»ù´¡ÉèÖãº
bar_chart = pygal.Bar(style=LightStyle, width=800, height=600,
legend_at_bottom=True, human_readable=True,
title='MN Capital Budget - 2014')
ÓÐȤµÄÒ»µãÊÇ human_readable £¬Ëü¿ÉÒԺܺõظñʽ»¯Êý¾Ý£¬ËùÒÔ´ó¶àÊýÇé¿öÏ£¬Õâ¸ö¹¦ÄÜ“ºÜ¹ÜÓÔ¡£
ÏÖÔÚÎÒÃÇÐèÒªÏòͼ±íÖÐÌí¼ÓÊý¾Ý£¬ÕâÊÇÓë pandas ¼¯³ÉµØ²»ÊǺܽô´ÕµÄµØ·½£¬µ«ÊǾͱ¾´ÎµÄСÊý¾Ý¼¯À´Ëµ£¬¿ÉÒÔÖ±½ÓÌí¼ÓÊý¾Ý¡£Êý¾ÝÁ¿ºÜ´óʱ£¬ÐÔÄÜ¿ÉÄÜ»áÊÇÒ»¸öÎÊÌâ¡£
for index, row in budget.iterrows():
bar_chart.add(row["detail"], row["amount"])
½ÓÏÂÀ´£¬½«ÎļþäÖȾΪ svg ºÍ png ¸ñʽ£º
bar_chart.render_to_file('budget.svg')
bar_chart.render_to_png('budget.png')
ÎÒ¾õµÃ svg µÄչʾЧ¹ûȷʵºÜºÃ£¬ÎÒºÜϲ»¶¿´ÆðÀ´¶ÀÌØÇÒÉÍÐÄÔÃÄ¿µÄ·ç¸ñ¡£Í¬Ê±ÎÒÒ²·¢ÏÖ£¬ÎÒÃÇ¿ÉÒÔÏà¶ÔÈÝÒ×µØÅªÇå³þʹÓô˹¤¾ßʱ£¬ÄÄЩ¿ÉÒÔʵÏÖ£¬ÄÄЩ²»ÄÜʵÏÖ¡£ÎÒ¹ÄÀø´ó¼ÒÏÂÔØ svg Îļþ£¬²¢ÔÚä¯ÀÀÆ÷ÖиÐÊÜͼ±íµÄ»¥¶¯Ð§¹û¡£
· Pandas ¶ÔÓÚ¼òµ¥µÄͼ±í»æÖÆÊ±·Ç³£·½±ãµÄ£¬µ«ÊÇÄãÐèҪѧϰ matplotlib À´ÊµÏÖ¶¨ÖÆ¡£
· Seaborn ¿ÉÒÔÖ§³ÖһЩ¸ü¸´ÔӵĿÉÊÓ»¯·½·¨£¬µ«ÈÔÐèÒª matplotlib µÄ֪ʶÀ´µ÷Õû¡£ÑÕÉ«·½°¸ÊÇÒ»¸ö²»´íµÄ¹¦ÄÜ¡£
· ggplot ºÜÓÐǰ¾°£¬µ«ËüÈÔÔÚŬÁ¦³É³¤ÖС£
· Èç¹ûÄãÏ뽨Á¢×Ô¼ºµÄ¿ÉÊÓ»¯·þÎñÆ÷£¬bokeh ½«ÊÇÒ»¸öÇ¿´óµÄ¹¤¾ß¡£µ«ÊǶÔÓÚһЩ¼òµ¥µÄ½Å±¾£¬Ê¹Óà bokeh ¾ÍÏñɱ¼¦ÓÃÅ£µ¶Ò»Ñù¡£
· pygal ÔÚ´´½¨»¥¶¯Ê¹ SVG ͼ±íºÍ PNG Îļþ·½ÃæÊǶÀÒ»ÎÞ¶þµÄ¡£Ëü²»Èç»ùÓÚmatplotlib µÄ½â¾ö·½°¸Áé»î¡£
±±¾©Ð£Çø