介绍
在Python国际中,有许多数据可视化的选项.因为各式各样,要知道什么时分运用哪个是十分困难的.本文包括一些较为盛行的样例,并阐明假如运用其创立简略的条形图.我会运用以下包/东西创立绘图比如:
Pandas
Seaborn
ggplot
Bokeh
pygal
Plotly
在比如用,我将运用pandas操作数据,并发动其可视化.在大多数状况下运用这些东西不需求pandas,可是我觉得pandas+可视化东西如此遍及,这是最好的起点。
Matplotlib怎么样?
Matplotlib 是python可视化库的祖父.它十分强壮,可是过分杂乱.你能够运用Matplotlib 做任何你需求做到的作业,可是并不简略弄理解.我不计划通过纯Matplotlib 样例解说,因为许多东西(特别Pandas和Seaborn)是Matplotlib的thin wrappers.
对Matplotlib最大的诉苦是需求许多作业的到期望的图表.在处理这些比如时,我发现更简略取得美丽的图形,不需求许多大代码.关于matplotlib冗余性的一个小比如,看一下这个ggplot后比如。
办法
我信任,只需人们开端阅览这一点,他们会指出更好的办法来运用这些东西。我的方针不是树立在每个比如完全相同的图形.我想在查找解决计划大致相同的时刻以大致相同的办法可视化数据.
按这个进程,最大的应战是格局化x和y轴,使得在给定一些大标签时数据看起来合理.或许花一些时刻弄清楚每个东西期望数据怎么格局化.一旦弄理解这些部分,剩余的部分比较简略的.
别的一个需求考虑的电视,条形图可能是制造图标类型最简略的一种.这些东西让你能够制造更多类型的图标.我的示例更注重于易格局化性而不是立异可视化比如,因为标签,一些图表占用了很大空间,所以我削减了,仅仅为了保证文章的长度办理.终究我调整了图画,因而任何含糊是缩放问题,而且不是实践输出质量.
终究,我挨近运用其他东西替换Excel的心态.我以为我的比如更能阐明陈述,讲演,邮件或许静态网页中的展现.假如你评价实时数据可视化或许通过其他机制同享的东西,那么部分东西供给了许多我没有说到的功用.
数据集
在上篇文章中介绍了咱们即将处理的数据.数据会集包括125行项目,但我挑选重视前10以保证简略点.你能够在这找到完好的数据.
Pandas
我运用pandas DataFrame作为一切各种图标的起点.走运的是,pandas为咱们供给了内置的matplotlib层绘图才能.将运用它作为基准.首要,导入模块,并将数据读入DataFrame.咱们期望对数据进行排序,并限制为前10项.
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列创立图标一起展现标题并区属图例.这是将图片存为png的额定代码.
fig = budget_plot.get_figure()
fig.savefig(2014-mn-capital-budget.png)
这是图片姿态(阶段是为了文章长度办理).
看起来根本不错.抱负状况下,我想多做一些y轴的格局化,但需求matplotlib 的处理.这是个完美有用的可视化,可是不能通过pandas做更多朴实的定制.
Seaborn
Seaborn是一个根据matplotlib的可视化库.旨在让默许的数据可视化愈加顺眼.一起让杂乱的图表更简略的创立.它和pandas集成.我的比如不允许Seaborn 显着差异.我喜爱Seaborn 的一个原因是各式各样的内置款式,让你快速更改调色板以看起来愈加美丽.因而,关于简略的图表Seaborn没有为咱们做许多. 规范导入并读入数据:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
budget = pd.read_csv(mn-budget-detail-2014.csv)
budget = budget.sort(‘amount’,ascending=False)[:>10]
运用x_order对x轴项目排序.这部分代码设置排序,图表风格和条形图色彩:
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不同的是它是R中ggplot2的接口.鉴于这个方针,部分API不是python,但十分强壮.我没有用过R中的ggplot,所以有一个学习曲线.然后我能够开到ggplot的吸引力.此库正在活跃的开展,我期望它持续开展并成熟起来,因为我以为这可能是一个十分强壮的功用.为了弄清楚一些作业我也学习过几回.在看代码和做了一些google之后,我能理解大部分.来吧,导入模块,读取数据:
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,而且面向现代网页阅读器生成可视化.它的意图是让交互式网页可视化,所以我的比如十分简略.导入模块,读取数据:
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图片:
正如你所看到的,图片十分洁净.我没有找到更简略的办法,更简略的格局化y轴.Bokeh有去许多功用可是我没有在这个比如中深化.
Pygal
Pygal用于创立svg图表.假如安装了正确依靠,相同能够保存为png文件.关于易制造交互式图标svg文件是适当有用的.我相同发现创立共同外观和视觉吸引力的图标十分简略.和之前相同,导入模块,并读取数据:
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文件,看看在你阅读器中图片的互动性.
Plot.ly
Plot.ly以剖析和可视化的在线东西来区别的.有强壮的API而且包括python的.阅读网站,你能够发现有十分丰厚,交互式的图片.得益于优异的文档,创立条形图适当简略.你需求遵从文档,获取你API 密钥设置.一旦你这样做,一切作业看上去适当完美.一个需求留意的是,你所做的一切都在网上发布,因而保证你对这点感到OK.有一个选项能够让图表私有,所以你需求设置.Plot.ly和pandas无缝整合.设置导入模块,读取数据:
import plotly.plotly as py
import pandas as pd
from plotly.graph_objs import *
budget=pd.read_csv(“mn-budget-detail-2014.csv”)
budget.sort(‘amount’,ascending=False,inplace=True)
budget = budget[:>10]
设置数据和图表类型.
data = Data([
Bar(
x=budget[detail],
y=budget[amount]
)
])
我还决议增加一些额定布局信息.
layout = Layout(
title=’2014 MN Capital Budget’,
font=Font(
family=’Raleway, sans-serif’
),
showlegend=False,
xaxis=XAxis(
tickangle=->45
),
bargap=>0.05
)
终究,制造数据.这将翻开一个阅读器,带有你完结的绘图.你能够运用 py.image.save_as保存本例副本.这是个很cool的功用.你得到丰厚的根据网络陈述的交互,和保存本地副本用于嵌入文件的才能.
fig = Figure(data=data, layout=layout)
plot_url = py.plot(data,filename=’MN Capital Budget – 2014′)
py.image.save_as(fig, ‘mn-14-budget.png’)
查看全交互式版别.你能够看到许多很棒的比如.箱图很吸引人并具有高度交互性.因为文档和pythonAPI,运转十分简略,我喜爱终究产品.
总结
在python生态环境中制造数据有两面性.好的方面是有许多挑选.坏的方面是有许多挑选.测验弄清楚那个合适你,取决于你需求完结什么.在某种程度上,你需求弄清楚用的东西能不能作业.我没有看到显着赢家和输家.下面是我一些主意:
pandas十分便利,但你有必要乐意学习matplotlib定制。
Seaborn能够支撑一些更杂乱的可视化的办法,但仍需求matplotlib常识来调整。色彩计划是不错。
ggplot有许多的许诺,但通过阵痛仍在持续。
Bokeh 是一个强壮的东西,假如你想树立自己的可视化服务器,但可能在简略场景有些大材小用。
pygal因为能够发生互动的SVG图形和PNG文件是绝无仅有的。它并不像根据matplotlib计划灵敏。
Plotly发生互动性最强的图形。您能够离线保存,并创立十分丰厚的根据网络的可视化作用。
现在的状况是,我会持续观看ggplot图画的前进和运用pygal,在需求交互性的时分运用plotly。随意在谈论中供给反应。我信任,人们将有许多关于这一主题的问题和定见。假如我错过了什么或许有其他的挑选了,让我知道。