2018-04-03 10:47:59 1450浏览
在Python培训中,将数据可视化有多种选择,正是因为这种多样性,何时选用何种方案才变得极具挑战性。本文包含了一些较为流行的工具以及如何使用它们来创建简单的条形图,将使用下面几种工具来完成绘图。
在将使用pandas处理数据并将数据可视化。大多数案例中,使用工具时无需结合pandas,认为pandas与可视化工具结合是非常普遍的现象,所以以这种方式开启本文是很棒的。
什么是Matplotlib
Matplotlib是众多Python可视化包的鼻祖。其功能非常强大,同时也非常复杂。你可以使用Matplotlib去做任何你想做的事情,但是想要搞明白却并非易事。不打算展示原生的Matplotlib例子,因为很多工具(特别是Pandas和Seaborn)是基于Matplotlib的轻量级封装。
Matplotlib令我最不满的地方是它花费太多工作来获得目视合理的图表,但是在本文的某些示例中,我发现无需太多代码就可以轻松获得漂亮的可视化图表。
方法论
简要说一下本文的方法论。我坚信只要读者开始阅读本文,他们将会指出使用这些工具的更好方法。我的目标并非在每个例子中创造出完全相同的图表,而是花费大致相同的时间探索方法,从而在每个例子中以大体相同的方法将数据可视化。
在这个过程中,我所面临的最大挑战是格式化x轴和y轴以及基于某些大的标签让数据看起来合理,弄明白每种工具是如何格式化数据的也花费了我不少精力,我搞懂这些之后,剩余的部分就相对简单了。
另外还需要注意的一点是,条形图可能是制作起来相对更简单的图表,使用这些工具可以制作出多种类型的图表,但是我的示例更加侧重的是简易的格式化,而不是创新式的可视化。另外,由于标签众多,导致一些图表占据了很多空间,所以我就擅自移除了它们,以保证文章长度可控。最后,我又调整了图片尺寸,所以图片的任何模糊现象都是缩放导致的问题,并不代表真实图像的质量。
最后一点,一种尝试使用Excel另外一款替代品的心态来实现示例。我认为我的示例在报告、展示、邮件或者静态网页中都更具说服力。如果你正在评估用于实时可视化数据的工具,亦或是通过其他途径去分享,那么其中的部分工具会提供很多我还未涉猎到的功能。
数据集
从每一类中抽取了更深一层的样例,并选用了更详细的元素。
Pandas
我打算先使用pandasDataFrame来绘图。幸运地是,pandas确实提供了内建的绘图功能,此功能是基于matplotlib,接下来我将以它作为开始。
首先,导入模块并将数据读入budgetDataFrame,将数据排序并取前10条。
importpandasaspd budget=pd.read_csv("mn-budget-detail-2014.csv") budget=budget.sort('amount',ascending=False)[:10]
pd.options.display.mpl_style='default' budget_plot=budget.plot(kind="bar",x=budget["detail"], title="MNCapitalBudget-2014", legend=False)
fig=budget_plot.get_figure() fig.savefig("2014-mn-capital-budget.png")
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()
importpandasaspd fromggplotimport* budget=pd.read_csv("mn-budget-detail-2014.csv") budget=budget.sort('amount',ascending=False)[:10]
p=ggplot(budget,aes(x="detail",y="amount"))+ geom_bar(stat="bar",labels=budget["detail"].tolist())+ ggtitle("MNCapitalBudget-2014")+ xlab("SpendingDetail")+ ylab("Amount")+scale_y_continuous(labels='millions')+ theme(axis_text_x=element_text(angle=90))
importpandasaspd frombokeh.chartsimportBar budget=pd.read_csv("mn-budget-detail-2018.csv") budget=budget.sort('amount',ascending=False)[:10] bokeh不同的一方面是我需要明确列出我绘图需要的值。 details=budget["detail"].values.tolist() amount=list(budget["amount"].astype(float).values)
bar=Bar(amount,details,filename="bar.html") bar.title("MNCapitalBudget-2018").xlabel("Detail").ylabel("Amount") bar.show()
importpandasaspd importpygal frompygal.styleimportLightStyle 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='MNCapitalBudget-2018')
forindex,rowinbudget.iterrows(): bar_chart.add(row["detail"],row["amount"])
bar_chart.render_to_file('budget.svg') bar_chart.render_to_png('budget.png')
bar_chart.render_to_file('budget.svg') bar_chart.render_to_png('budget.png')
importplotly.plotlyaspy importpandasaspd fromplotly.graph_objsimport* 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='2014MNCapitalBudget', font=Font( family='Raleway,sans-serif' ), showlegend=False, xaxis=XAxis( tickangle=-45 ), bargap=0.05 )
fig=Figure(data=data,layout=layout) plot_url=py.plot(data,filename='MNCapitalBudget-2018') py.image.save_as(fig,'mn-18-budget.png')
【关注微信公众号获取更多学习资料】