本文概述并比较Python数据可视化包和工具,包括Pandas,Seaborn,ggplot,Bokeh,pygal,和Plotly。
介绍
在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()
评论
查看更多