Python的可视化库超全盘点,有你中意的一款吗?
off999 2024-09-26 16:06 30 浏览 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。
相关推荐
- 阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?
-
TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...
- 高流量大并发Linux TCP性能调优_linux 高并发网络编程
-
其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...
- 性能测试100集(12)性能指标资源使用率
-
在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...
- Linux 服务器常见的性能调优_linux高性能服务端编程
-
一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...
- Nginx性能优化实战:手把手教你提升10倍性能!
-
关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...
- 高并发场景下,Spring Cloud Gateway如何抗住百万QPS?
-
关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...
- Kubernetes 高并发处理实战(可落地案例 + 源码)
-
目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...
- 高并发场景下,Nginx如何扛住千万级请求?
-
Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...
- Spring Boot+Vue全栈开发实战,中文版高清PDF资源
-
SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...
- Docker-基础操作_docker基础实战教程二
-
一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...
- 你有空吗?跟我一起搭个服务器好不好?
-
来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...
- 部署你自己的 SaaS_saas如何部署
-
部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...
- Docker Compose_dockercompose安装
-
DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...
- 京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统
-
前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...
- Kubernetes (k8s) 入门学习指南_k8s kubeproxy
-
Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
