前言使用Python创建图形的方法有很多种,但哪种方法最好呢?当我们进行可视化时,重要的是要问一些关于图表目标的问题:你是否试图对数据的外观有一个初步的了解?感觉?也许你想在你的演讲中给人留下深刻印象?在本文中,我将了解一些流行的Python可视化包、它们的优缺点,以及它们各自的突出之处。Matplotlib、Seaborn和Pandas:出于几个原因,我将它们组合在一起,首先是Seaborn和Pandas绘图是建立在Matplotlib之上的事实——当你在pandas中使用Seaborn或df.plot()时,你实际上是利用用Matplotlib编写的代码。因此,每种方法产生的美感是相似的,自定义图像的方法将使用非常相似的语法。当我想到这些可视化工具时,我想到:探索性数据分析。这些包非常适合首次查看您的数据,但在演示时就不太好了。Matplotlib还有一组样式选项,可以模仿其他流行的美学,例如ggplot2和xkcd。以下是使用Matplotlib及其近亲绘制的一些示例:在处理篮球薪资数据时,我希望找到薪资数据中位数最高的球队。为了说明这一点,我用颜色编码了一个直方图,下面是每支球队的薪水,以显示球员应该去哪支球队才能加入高薪球队。importseabornassnsimportmatplotlib.pyplotaspltcolor_order=['xkcd:cerulean','xkcd:ocean','xkcd:black','xkcd:royalpurple','xkcd:royalpurple','xkcd:navyblue','xkcd:powderblue','xkcd:lightmaroon','xkcd:lightishblue','xkcd:navy']sns.barplot(x=top10.Team,y=top10.Salary,palette=color_order).set_title('TeamswithHighestMedianSalary')plt.ticklabel_format(style='sci',axis='y',scilimits=(0,0))接下来是回归实验残差的Q-Q图。这个可视化的主要目的是展示我们可以用很少的代码展示一个比较完整的图片。importmatplotlib.pyplotaspltimportscipy.statsasstats#model2isaregressionmodellog_resid=model2.predict(X_test)-y_teststats.probplot(log_resid,dist="norm",plot=plt)plt.title("NormalQ-Qplot")plt.show()最终,Matplotlib其相关组件非常有效,但就外观而言,它们通常不是最终产品。ggplot(2)ggplot是最流行的R可视化包。这不是Python包评论吗?你可能会问。开发人员在Python中实现了ggplot2,复制了从美学到语法的所有内容。从我所看到的所有材料来看,它看起来和感觉起来很像ggplot2,但有依赖pandasPython包的额外好处,它最近弃用了一些方法,导致Python版本的ggplot变得无关紧要。如果您想在R中使用真正的ggplot(它具有相同的外观、感觉和语法,没有依赖性),我将在这里讨论它的一些额外功能!也就是说,如果你真的必须使用ggplot,那么你必须安装pandas版本0.19.2,但我会警告不要降级你的pandas,这样你就可以使用一个糟糕的绘图包。是什么让ggplot2(我猜是Python的ggplot)成为游戏规则的改变者,因为它们使用“图形语法”来构造图形。基本前提是你可以实例化你的图像,然后分别添加不同的特征,即标题、轴、数据点和趋势线都是单独添加的,具有自己的美学属性。下面是一些ggplot代码的简单示例。首先,我们用ggplot实例化图表,设置美学和数据,然后添加点、主题和轴/标题标签。#AllSalariesggplot(data=df,aes(x=season_start,y=salary,colour=team))+geom_point()+theme(legend.position="none")+labs(title='SalaryOverTime',x='Year',y='Salary($)')散景散景很漂亮。在概念上类似于ggplot,因为它使用图形语法来构造图形,Bokeh具有易于使用的界面,允许非常专业的图形和仪表板。importpandasaspdfrombokeh.plottingimportfigurefrombokeh.ioimportshow#is_mascisaone-hotencodeddataframeofresponsestothequestion:#“Doyouidentifyasmasculine?”#DataframePrepcounts=is_masc.sum()resps=is_masc.columns#Bokehp2=figure(title='DoYouViewYourselfAsMasculine?',x_axis_label='y_Response这两个字',x_range=list(resps))p2.vbar(x=resps,top=counts,width=0.6,fill_color='red',line_color='black')show(p2)#Pandascounts.plot(kind='bar')上面的条形图显示了在最近的一项调查中,538名受访者对“你认为自己是男性”这个问题的回答。第9-14行的Bokeh代码创建了一个优雅的、具有专业外观的响应计数直方图,具有合理的字体大小、y标记和格式。我编写的大部分代码都是用于标记坐标轴和标题,以及为条形图添加颜色和边框。说到制作美观、美观的图形,我非常倾向于Bokeh-很多美学工作已经为我们完成了!上面的蓝色图是上面要点第17行的一行代码。这两个直方图具有相同的值,但用途不同。在探索性设置中,用pandas写一行来查看数据要方便得多,但Bokeh的美学非常棒。Bokeh提供的所有便利都可以在Matplotlib中自定义,包括x轴标签的角度、背景线、y轴扩展、字体大小/斜体/粗体等。下图显示了一些随机趋势,使用了更自定义的图例和不同的线条类型和颜色:最后一点,Bokeh也是制作交互式仪表板的绝佳工具。PlotlyPlotly非常强大,但设置和创建图形需要花费大量时间并且不直观。在度过了上午的大部分时间后,我去吃午饭,几乎什么也没看到。我创建了一个没有轴标签的条形图和一个带有我无法删除的线条的“散点图”。一些显着的缺点是:它需要API密钥和注册,而不仅仅是pip安装它绘制的数据/布局对象是独特的图像,不直观图像布局对我不起作用(40行代码没有!)但是,对于所有设置的缺点,也有优点和解决方法:您可以在Plotly网站和Python环境中编辑图片对交互式图形/仪表板有很多支持Plotly与Mapbox一起定制地图AmazingItwouldn’如果我只是使用一些代码来表达我的不满而不显示一些代码以及我能够完成的事情以及更有能力使用该软件包的人已经完成的事情,这对我来说是不公平的:#plot1-barplot#**note**-thelayoutlinesdonothingandtripnoerrorsdata=[go.Bar(x=team_ave_df.team,y=team_ave_df.turnovers_per_mp)]layout=go.Layout(title=go.layout.Title(text='TurnoversperMinutebyTeam',xref='paper',x=0),xaxis=go.layout.XAxis(title=go.layout.xaxis.Title(text='Team',font=dict(family='CourierNew,monospace',size=18,color='#7f7f7f'))),yaxis=go.layout.YAxis(title=go.layout.yaxis.Title(text='AverageTurnovers/Minute',font=dict(family='CourierNew,monospace',size=18,color='#7f7f7f'))),autosize=True,hovermode='closest')py.iplot(figure_or_data=data,layout=layout,filename='jupyter-plot',sharing='public',fileopt='overwrite')#plot2-attemptatascatterplotdata=[go.Scatter(x=player_year.minutes_played,y=player_year.salary,marker=go.scatter.Marker(color='red',size=3))]layout=go.Layout(title="test",xaxis=dict(title='why'),yaxis=dict(title='plotly'))py.iplot(figure_or_data=data,layout=layout,filename='jupyter-plot2',sharing='public')一般情况下,开箱外观很好,但是多次尝试修复轴标签,逐字复制文档,没有产生任何变化但是,正如我之前承诺的那样,这里有一些图片显示了它的潜力,以及为什么花费超过几个小时可能为了它的价值:PygalPygal是一个鲜为人知的绘图包,与其他流行的包一样,它使用图形框架的语法来构造图像。由于图像对象非常简单,因此它是一个相对简单的包。使用Pygal非常简单:使用图形对象的属性实例化您的图片格式使用figure.Add()符号向图形添加数据Pygal的主要问题是如何渲染图形。我不得不使用他们的render_to_file选项,然后在网络浏览器中打开该文件以查看我构建的内容。这最终是值得的,因为这些数字是互动的,并且具有令人愉悦且易于定制的美感。总的来说,这个包看起来不错,但是有一些文件创建/渲染的怪癖限制了它的吸引力。NetworkxNetworkx是分析和可视化图形的绝佳解决方案,尽管它基于matplotlib。图形和网络不是我的专业领域,但Networkx可以快速轻松地以图形方式表示连接的网络。下面是我构建的一个简单图表的几种不同表示,以及一些从StanfordSNAP下载的代码,用于开始绘制小型Facebook网络的图表。我对每个节点编号(1-10)进行颜色编码的代码如下:options={'node_color':range(len(G)),'node_size':300,'width':1,'with_labels':False,'cmap':plt.cm.coolwarm}nx.draw(G,**options)总结一下,数据可视化的包太多了,但是没有明确的最佳包。希望在阅读本概述后,您可以了解如何将各种美学和代码应用于从EDA到演示的不同情况。
