百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python的可视化库超全盘点,有你中意的一款吗?

off999 2024-09-26 16:06 41 浏览 0 评论

前言

使用Python创建图形的方法有很多,但是哪种方法最好呢?当我们进行可视化时,问一些关于图形目标的问题是很重要的:您是否试图对数据的外观有一个初步的感觉?也许你是想在演示中给人留下深刻印象?在这篇文章中,我将介绍一些流行的Python可视化包,它们的优缺点,以及它们各自的优点。


Matplotlib, Seaborn, and Pandas:

我将出于几个原因将它们组合在一起,首先是Seaborn和Pandas绘图是建立在Matplotlib之上的——当你在panda中使用Seaborn或df.plot()时,你实际上是在利用Matplotlib编写的代码。因此,每一种方法产生的美感都是相似的,定制图片的方法将使用非常相似的语法。

当我想到这些可视化工具时,我想到:探索性数据分析。这些包对于第一次查看您的数据是非常棒的,但是当涉及到表示时就不太好了。Matplotlib还有一组样式选择,它们模仿其他流行的美学,比如ggplot2和xkcd。下面是一些使用Matplotlib和它的近亲制作的图的例子:

在处理篮球薪资数据时,我希望找到拥有最高薪资中位数数据的球队。为了说明这一点,我用颜色编码了一个柱状图,下面是每支球队的工资,以显示球员应该去哪支球队,这样才能加入薪酬高的球队。


import seaborn as sns
import matplotlib.pyplot as plt

color_order = ['xkcd:cerulean', 'xkcd:ocean',     'xkcd:black','xkcd:royal purple',      'xkcd:royal purple', 'xkcd:navy blue',      'xkcd:powder blue', 'xkcd:light maroon',   'xkcd:lightish blue','xkcd:navy']
sns.barplot(x=top10.Team,  y=top10.Salary, palette=color_order).set_title('   Teams with Highest Median Salary')
plt.ticklabel_format(style='sci', axis='y',        scilimits=(0,0))



接下来是回归实验残差的Q-Q图。这种可视化的主要目的是显示我们可以用很少的代码显示比较完整的图片。


import matplotlib.pyplot as plt
import scipy.stats as stats
#model2 is a regression model

log_resid = model2.predict(X_test)-y_test
stats.probplot(log_resid, dist="norm", plot=plt)
plt.title("Normal Q-Q plot")

plt.show()



最终,Matplotlib和它的相关组件非常高效,但就演示而言,它们通常不是最终产品。

ggplot(2)

ggplot是最流行的R可视化软件包。这不是一个Python包评审吗?你可能会问。开发人员用Python实现了ggplot2,复制了从美学到语法的所有内容。从我所见过的所有材料来看,它的外观和感觉都很像ggplot2,但是还有一个额外的好处,它依赖于pandas Python包,该包最近弃用了一些方法,导致ggplot的Python版本变得无关。如果您想在R中使用真正的ggplot(它具有所有相同的外观、感觉和语法,没有依赖项),我将在这里讨论它的一些额外功能!也就是说,如果您确实必须在Python中使用ggplot,那么您必须安装pandas版本0.19.2,但是我要提醒您不要降低您的pandas的级别,这样您就可以使用一个较差的绘图包。

使ggplot2(我猜还有Python的ggplot)改变游戏规则的是,它们使用“图形语法”来构造图形。基本的前提是,您可以实例化您的图片,然后分别添加不同的功能,即标题、轴、数据点和趋势线都是单独添加的,具有各自的美学属性。下面是一些ggplot代码的简单示例。首先,我们用ggplot实例化图形,设置美学和数据,然后添加点、主题和轴/标题标签。


#All Salaries
ggplot(data=df, aes(x=season_start, y=salary, colour=team)) +  geom_point() +  theme(legend.position="none") +  labs(title = 'Salary Over Time', x='Year', y='Salary ($)')


Bokeh

Bokeh很漂亮。概念上类似于ggplot,它使用图形语法来构造图形,Bokeh有一个易于使用的界面,可以制作非常专业的图形和仪表板。

import pandas as pd
from bokeh.plotting import figure
from bokeh.io import show

# is_masc is a one-hot encoded dataframe of responses to the question:
# "Do you identify as masculine?"

#Dataframe Prep
counts = is_masc.sum()
resps = is_masc.columns

#Bokeh
p2 = figure(title='Do You View Yourself As Masculine?',       
            x_axis_label='Response',          y_axis_label='Count',   
            x_range=list(resps))p2.vbar(x=resps, top=counts, width=0.6, fill_color='red', line_color='black')

show(p2)
#Pandas
counts.plot(kind='bar')

上面的柱状图显示了538位在最近的一次调查中对“你认为自己是男性吗”这个问题的回答。第9-14行中的Bokeh代码创建了一个优雅的、专业的响应计数直方图,具有合理的字体大小、y标记和格式。我编写的大部分代码用于标记坐标轴和标题,以及给条形图添加颜色和边框。当制作漂亮的,像样的图形时,我非常倾向于Bokeh -很多美学工作已经为我们做了!



上面的蓝色图是上面要点的第17行上的一行代码。这两个直方图具有相同的值,但用途不同。在一个探索性的设置中,与pandas一起写一行来查看数据要方便得多,但是Bokeh的美学是相当出色的。Bokeh提供的所有便利都可以在Matplotlib中进行定制,包括x轴标签的角度、背景线、y轴扩展、字体大小/斜体/粗体等。下图显示了一些随机的趋势,使用了更多的自定义图例和不同的线条类型和颜色:



最后提一下,Bokeh也是一个制作交互式仪表板的好工具。


Plotly

Plotly是非常强大的,但设置和创建的数字需要很多时间,都不是直观的。在花了大半个上午埋头苦干之后,我去吃午饭,几乎什么也没看到。我创建了一个没有轴标签的条形图和一个“散点图”,其中的线条我无法删除。一些值得注意的缺点有:

  • 它需要一个API密钥和注册,而不仅仅是一个pip安装它
  • 绘制的数据/布局对象是独特的图片,并不直观
  • 图片布局对我不起作用(40行代码什么都没有!)

然而,对于所有设置的缺点,也有优点和变通方法:

  • 您可以在Plotly网站和Python环境中编辑图片
  • 有很多对交互式图形/仪表板的支持
  • Plotly与Mapbox合作,可以定制地图
  • 有惊人的整体潜力

如果我只是用一些代码来表达我的不满,而不展示一些代码和我能够完成的工作,以及那些更有能力使用这个包的人所完成的工作,这对我来说是不公平的:

#plot 1 - barplot
# **note** - the layout lines do nothing and trip no errors

data = [go.Bar(x=team_ave_df.team,  y=team_ave_df.turnovers_per_mp)]

layout = go.Layout(    title=go.layout.Title(       
                  text='Turnovers per Minute by Team', xref='paper',  x=0),    
                  xaxis=go.layout.XAxis(title = go.layout.xaxis.Title(            
                  text='Team',    font=dict( family='Courier New, monospace',                   
                  size=18, color='#7f7f7f'  )  )    ),    
                  yaxis=go.layout.YAxis(  title = go.layout.yaxis.Title(            
                  text='Average Turnovers/Minute',   font=dict(                    
                  family='Courier New, monospace',   size=18,                    
                  color='#7f7f7f'  )  )  ),    autosize=True,    hovermode='closest')

py.iplot(figure_or_data=data, layout=layout, filename='jupyter-plot', sharing='public', fileopt='overwrite')


#plot 2 - attempt at a scatterplot

data = [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')

总的来说,开箱即用的外观看起来不错,但是多次尝试修复axis标签,逐字复制文档,都没有产生任何变化。然而,正如我之前承诺过的,这里有一些图片展示了它的潜力,以及为什么花几个小时以上可能是值得的:



Pygal

Pygal是一个不太为人所知的绘图包,它与其他流行的包一样,使用图形框架的语法来构造图像。由于图片对象非常简单,所以它是一个相对简单的包。使用Pygal非常简单:

  • 实例化你的图片
  • 使用图形对象的属性格式化
  • 使用figure. Add()符号将数据添加到图形中

我在Pygal中遇到的主要问题是如何渲染图形。我必须使用他们的render_to_file选项,然后在web浏览器中打开该文件,看看我构建了什么。它最终是值得的,因为这些数字是互动的,有一个愉快的和容易定制的审美。总的来说,这个包看起来不错,但是有一些文件创建/渲染的怪癖限制了它的吸引力。


Networkx

Networkx是分析和可视化图形的一个很好的解决方案,尽管它是基于matplotlib的。图形和网络不是我的专业领域,但Networkx允许快速、简单地用图形表示连接的网络。下面是我构建的一个简单图的几个不同的表示,以及从斯坦福SNAP下载的一些开始绘制小型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到presentation。

相关推荐

系统脱敏法的操作程序如何

系统脱敏疗法(systematicdesensitization)又称交互抑制法,是由美国学者沃尔普创立和发展的。这种方法主要是诱导求治者缓慢地暴露出导致神经症焦虑、恐惧的情境,并通过心理的放松状态...

闪迪u盘低级格式化工具(闪迪u盘格式化分配单元大小)

闪迪U盘格式化后速度变慢的可能原因及解决方法如下:文件系统问题:格式化时选择的文件系统类型可能会影响U盘的性能。常见的文件系统类型包括FAT32、NTFS和exFAT等。如果文件系统类型不合适,可能会...

psd文件下载(psd格式下载网站)

  1、在photoshop中,不能通过置入的方法来加载PSD文件,因为,通过置入的方法加载PSD文件,它是以合并图层的方法把PSD文件加入,这样,就失去了PSD文件的所有图层信息。  2、在文档中想...

宏碁官网下载win7系统(宏碁官方系统)

宏基笔记本win8系统换成win7步骤:1、更改bios设置,关闭“SecureBoot”功能,启用传统的“LegacyBoot”。2、制作u启动U盘启动盘,下载win7系统安装包3、设置U盘启动...

如何重装系统win7旗舰版32位

首先下载制作一个带系统的启动u盘,然后按以下步骤安装:1、首先关闭电脑上面的杀毒软件,2、进入bios选择u盘启动。3、插入启动u盘重新启动电脑4、进入pe系统镜像环节,选择要安装的系统(32位),然...

应用程序发生异常0xe0000008

先查看一下对应的软件是不是出现了损坏,也可以重装此软件。我们还可以尝试通过修改注册表来解决。按Win+R(或者在开始菜单搜索框输入“运行”)打开运行,然后输入“regedit”回车,打开注册表恢复原来...

笔记本连接wifi显示无法连接网络

笔记本电脑连接wifi时提示无法连接到这个网络1、打开电脑“控制面板”,点击“网络连接”,选择本地连接,右键点击本地连接图标后选“属性”,在“常规”选项卡中双击“Internet协议(TCP/IP)...

windowsc盘清理大师(c盘清理大师怎么样)

 C盘清理大师是一款流氓软件,可不是windows10里自带。在你的电脑上出现这个软件一般情况下可以证明你使用的系统是盗版的,系统采用的是网上流传的系统镜像制作的。在网上流传这些系统镜像文件...

realtek没声音如何设置(realtek怎么调出来)

你给无线连接配IP地址呗第一步:下载驱动精灵软件。第二步:安装驱动精灵软件。1、在打开的驱动软件安装窗口,确定程序安装路径后,点击:一键安装;2、正在安装。第三步:更新驱动程序。1、安装非常迅速,已经...

腾达路由器手机端登录入口(腾达路由器手机端登录入口在哪)

腾达路由器使用192.168.0.1或tendawifi.com作为登录地址。登录管理员页面的步骤:1、手机连接到腾达路由器的wifi信号;2、在手机上打开浏览器,在地址栏输入192.168.0.1后...

百度网盘app下载安装手机版(百度网盘app安卓版)
百度网盘app下载安装手机版(百度网盘app安卓版)

百度网盘没有关闭离线下载功能,可以通过以下方法进行离线下载:1、打开手机,找到手机中的百度网盘:2、打开百度网盘,找到右下角的“我的”,找到屏幕中的“离线下载”:3、点击打开离线下载,选择“新建链接任务”,然后点击“确定”:4、在新建链接页...

2025-12-21 03:51 off999

自己配台式电脑怎么配(自己配台式电脑怎么配显卡)
  • 自己配台式电脑怎么配(自己配台式电脑怎么配显卡)
  • 自己配台式电脑怎么配(自己配台式电脑怎么配显卡)
  • 自己配台式电脑怎么配(自己配台式电脑怎么配显卡)
  • 自己配台式电脑怎么配(自己配台式电脑怎么配显卡)
安卓虚拟机破解版(挽念虚拟机15.0破解版)

正盗版都是广联达公司内部出来的,破解の用来打市场,正版的用来获取利润,个人破不了1、确保你的虚拟机网路设置正确。2、如果采用的是独立无线网卡那么要确保独立网卡能被虚拟机识别,虚拟机安装了独立无线网卡...

win7系统改中文(win7系统换中文)

要将Windows7系统从英文切换为中文,可以按照以下步骤进行:1.打开控制面板:点击Windows开始菜单,选择“控制面板”。2.打开区域和语言设置:在控制面板中,找到“时钟、语言和区域”或“...

win10启动盘怎么制作(windows10如何制作启动盘)

要制作Win10PE启动盘,首先需要下载Win10PE镜像文件。然后,使用专业的制作工具(如Rufus或WinToUSB)将镜像文件写入U盘或DVD。接下来,将U盘或DVD插入需要启动的计算机,并在B...

取消回复欢迎 发表评论: