本文目录一览:
强烈推荐一款Python可视化神器!强烈必备!
Plotly Express 是一个新的高级 Python 可视化库:它是 Plotly.py 的高级封装,它为复杂的图表提供了一个简单的语法。
受 Seaborn 和 ggplot2 的启发,它专门设计为具有简洁,一致且易于学习的 API :只需一次导入,您就可以在一个函数调用中创建丰富的交互式绘图,包括分面绘图(faceting)、地图、动画和趋势线。 它带有数据集、颜色面板和主题,就像 Plotly.py 一样。
Plotly Express 完全免费:凭借其宽松的开源 MIT 许可证,您可以随意使用它(是的,甚至在商业产品中!)。
最重要的是,Plotly Express 与 Plotly 生态系统的其他部分完全兼容:在您的 Dash 应用程序中使用它,使用 Orca 将您的数据导出为几乎任何文件格式,或使用JupyterLab 图表编辑器在 GUI 中编辑它们!
用 pip install plotly_express 命令可以安装 Plotly Express。
一旦导入Plotly Express(通常是 px ),大多数绘图只需要一个函数调用,接受一个整洁的Pandas dataframe,并简单描述你想要制作的图。 如果你想要一个基本的散点图,它只是 px.scatter(data,x =“column_name”,y =“column_name”)。
以下是内置的 Gapminder 数据集的示例,显示2007年按国家/地区的人均预期寿命和人均GDP 之间的趋势:
如果你想通过大陆区分它们,你可以使用 color 参数为你的点着色,由 px 负责设置默认颜色,设置图例等:
这里的每一点都是一个国家,所以也许我们想要按国家人口来衡量这些点...... 没问题:这里也有一个参数来设置,它被称为 size:
如果你好奇哪个国家对应哪个点? 可以添加一个 hover_name ,您可以轻松识别任何一点:只需将鼠标放在您感兴趣的点上即可! 事实上,即使没有 hover_name ,整个图表也是互动的:
也可以通过 facet_col =”continent“ 来轻松划分各大洲,就像着色点一样容易,并且让我们使用 x轴 对数(log_x)以便在我们在图表中看的更清晰:
也许你不仅仅对 2007年 感兴趣,而且你想看看这张图表是如何随着时间的推移而演变的。 可以通过设置 animation_frame=“year” (以及 animation_group =“country” 来标识哪些圆与控制条中的年份匹配)来设置动画。
在这个最终版本中,让我们在这里调整一些显示,因为像“gdpPercap” 这样的文本有点难看,即使它是我们的数据框列的名称。 我们可以提供更漂亮的“标签” (labels),可以在整个图表、图例、标题轴和悬停(hovers)中应用。 我们还可以手动设置边界,以便动画在整个过程中看起来更棒:
因为这是地理数据,我们也可以将其表示为动画地图,因此这清楚地表明 Plotly Express 不仅仅可以绘制散点图(不过这个数据集缺少前苏联的数据)。
事实上,Plotly Express 支持三维散点图、三维线形图、极坐标和地图上三元坐标以及二维坐标。 条形图(Bar)有二维笛卡尔和极坐标风格。
进行可视化时,您可以使用单变量设置中的直方图(histograms)和箱形图(box)或小提琴图(violin plots),或双变量分布的密度等高线图(density contours)。 大多数二维笛卡尔图接受连续或分类数据,并自动处理日期/时间数据。 可以查看我们的图库 (ref-3) 来了解每个图表的例子。
数据 探索 的主要部分是理解数据集中值的分布,以及这些分布如何相互关联。 Plotly Express 有许多功能来处理这些任务。
使用直方图(histograms),箱形图(box)或小提琴图(violin plots)可视化单变量分布:
直方图:
箱形图:
小提琴图:
还可以创建联合分布图(marginal rugs),使用直方图,箱形图(box)或小提琴来显示双变量分布,也可以添加趋势线。 Plotly Express 甚至可以帮助你在悬停框中添加线条公式和R²值! 它使用 statsmodels 进行普通最小二乘(OLS)回归或局部加权散点图平滑(LOWESS)。
在上面的一些图中你会注意到一些不错的色标。 在 Plotly Express 中, px.colors 模块包含许多有用的色标和序列:定性的、序列型的、离散的、循环的以及所有您喜欢的开源包:ColorBrewer、cmocean 和 Carto 。 我们还提供了一些功能来制作可浏览的样本供您欣赏(ref-3):
定性的颜色序列:
众多内置顺序色标中的一部分:
我们特别为我们的交互式多维图表感到自豪,例如散点图矩阵(SPLOMS)、平行坐标和我们称之为并行类别的并行集。 通过这些,您可以在单个图中可视化整个数据集以进行数据 探索 。 在你的Jupyter 笔记本中查看这些单行及其启用的交互:
散点图矩阵(SPLOM)允许您可视化多个链接的散点图:数据集中的每个变量与其他变量的关系。 数据集中的每一行都显示为每个图中的一个点。 你可以进行缩放、平移或选择操作,你会发现所有图都链接在一起!
平行坐标允许您同时显示3个以上的连续变量。 dataframe 中的每一行都是一行。 您可以拖动尺寸以重新排序它们并选择值范围之间的交叉点。
并行类别是并行坐标的分类模拟:使用它们可视化数据集中多组类别之间的关系。
Plotly Express 之于 Plotly.py 类似 Seaborn 之于 matplotlib:Plotly Express 是一个高级封装库,允许您快速创建图表,然后使用底层 API 和生态系统的强大功能进行修改。 对于Plotly 生态系统,这意味着一旦您使用 Plotly Express 创建了一个图形,您就可以使用Themes,使用 FigureWidgets 进行命令性编辑,使用 Orca 将其导出为几乎任何文件格式,或者在我们的 GUI JupyterLab 图表编辑器中编辑它 。
主题(Themes)允许您控制图形范围的设置,如边距、字体、背景颜色、刻度定位等。 您可以使用模板参数应用任何命名的主题或主题对象:
有三个内置的 Plotly 主题可以使用, 分别是 plotly, plotlywhite 和 plotlydark。
px 输出继承自 Plotly.py 的 Figure 类 ExpressFigure 的对象,这意味着你可以使用任何 Figure 的访问器和方法来改变 px生成的绘图。 例如,您可以将 .update() 调用链接到 px 调用以更改图例设置并添加注释。 .update() 现在返回修改后的数字,所以你仍然可以在一个很长的 Python 语句中执行此操作:
在这里,在使用 Plotly Express 生成原始图形之后,我们使用 Plotly.py 的 API 来更改一些图例设置并添加注释。
Dash 是 Plotly 的开源框架,用于构建具有 Plotly.py 图表的分析应用程序和仪表板。Plotly Express 产生的对象与 Dash 100%兼容,只需将它们直接传递到 dash_core_components.Graph,如下所示: dcc.Graph(figure = px.scatter(...))。 这是一个非常简单的 50行 Dash 应用程序的示例,它使用 px 生成其中的图表:
这个 50 行的 Dash 应用程序使用 Plotly Express 生成用于浏览数据集的 UI 。
可视化数据有很多原因:有时您想要提供一些想法或结果,并且您希望对图表的每个方面施加很多控制,有时您希望快速查看两个变量之间的关系。 这是交互与 探索 的范畴。
Plotly.py 已经发展成为一个非常强大的可视化交互工具:它可以让你控制图形的几乎每个方面,从图例的位置到刻度的长度。 不幸的是,这种控制的代价是冗长的:有时可能需要多行 Python 代码才能用 Plotly.py 生成图表。
我们使用 Plotly Express 的主要目标是使 Plotly.py 更容易用于 探索 和快速迭代。
我们想要构建一个库,它做出了不同的权衡:在可视化过程的早期牺牲一些控制措施来换取一个不那么详细的 API,允许你在一行 Python 代码中制作各种各样的图表。 然而,正如我们上面所示,该控件并没有消失:你仍然可以使用底层的 Plotly.py 的 API 来调整和优化用 Plotly Express 制作的图表。
支持这种简洁 API 的主要设计决策之一是所有 Plotly Express 的函数都接受“整洁”的 dataframe 作为输入。 每个 Plotly Express 函数都体现了dataframe 中行与单个或分组标记的清晰映射,并具有图形启发的语法签名,可让您直接映射这些标记的变量,如 x 或 y 位置、颜色、大小、 facet-column 甚至是 动画帧到数据框(dataframe)中的列。 当您键入 px.scatter(data,x ='col1',y='col2') 时,Plotly Express 会为数据框中的每一行创建一个小符号标记 - 这就是 px.scatter 的作用 - 并将 “col1” 映射到 x 位置(类似于 y 位置)。 这种方法的强大之处在于它以相同的方式处理所有可视化变量:您可以将数据框列映射到颜色,然后通过更改参数来改变您的想法并将其映射到大小或进行行分面(facet-row)。
接受整个整洁的 dataframe 的列名作为输入(而不是原始的 numpy 向量)也允许 px 为你节省大量的时间,因为它知道列的名称,它可以生成所有的 Plotly.py 配置用于标记图例、轴、悬停框、构面甚至动画帧。 但是,如上所述,如果你的 dataframe 的列被笨拙地命名,你可以告诉 px 用每个函数的 labels 参数替换更好的。
仅接受整洁输入所带来的最终优势是它更直接地支持快速迭代:您整理一次数据集,从那里可以使用 px 创建数十种不同类型的图表,包括在 SPLOM 中可视化多个维度 、使用平行坐标、在地图上绘制,在二维、三维极坐标或三维坐标中使用等,所有这些都不需要重塑您的数据!
在 API 级别,我们在 px 中投入了大量的工作,以确保所有参数都被命名,以便在键入时最大限度地发现:所有 scatter -类似的函数都以 scatter 开头(例如 scatter_polar, scatter_ternary)所以你可以通过自动补全来发现它们。 我们选择拆分这些不同的散点图函数,因此每个散点图函数都会接受一组定制的关键字参数,特别是它们的坐标系。 也就是说,共享坐标系的函数集(例如 scatter, line & bar,或 scatter_polar, line_polar 和 bar_polar )也有相同的参数,以最大限度地方便学习。 我们还花了很多精力来提出简短而富有表现力的名称,这些名称很好地映射到底层的 Plotly.py 属性,以便于在工作流程中稍后调整到交互的图表中。
最后,Plotly Express 作为一个新的 Python 可视化库,在 Plotly 生态系统下,将会迅速发展。所以不要犹豫,立即开始使用 Plotly Express 吧!
哪个数据可视化工具比较好?
看了一下其他的回答,都是利用现有的可视化软件,这里以Python为例,介绍2个比较好用的可视化包—seaborn和pyecharts,简单易学、容易上手,绘制的图形漂亮、大方、整洁,感兴趣的朋友可以尝试一下,实验环境win10+python3.6+pycharm5.0,主要内容如下:
1.seaborn:这是一个基于matplotlib的可视化包,是对matplotlib更高级的API封装,绘制的图形种类繁多,包括常见的折线图、柱状图、饼状图、箱型图、热力图等,所需的代码量更少,使用起来更方便,下面我简单介绍一下这个包的安装和使用:
程序运行截图如下:
2.pyecharts:这个是echarts提供给python的一个接口,在前端的数据可视化中,可能会用到这个echarts包,借助pyecharts,我们不仅可以绘制出漂亮的柱状图、折线图等,还可以绘制3D图形、地图、雷达图、极坐标系图等,简单好用,非常值得学习,下面我简单介绍一下这个包的安装和使用:
程序运行截图如下:
补充推荐一个Python 新数据可视化模块——Plotly Express 。
Plotly Express
Plotly Express是一个新的高级Python数据可视化库,它是Plotly.py的高级封装,它为复杂的图表提供了一个简单的语法。只需一次导入,大多数绘图只要一个函数调用,接受一个整洁的Pandas dataframe,就可以创建丰富的交互式绘图。
Plotly Express 安装
惯例,使用 pip进行安装。
Plotly Express支持构建图表类型 gapminder数据集说明
我们使用gapminder数据集进行体验 Plotly Express 。
gapminder数据集显示2007年按国家/地区的人均预期寿命和人均GDP 之间的趋势:包含1952~2007年世界各国家人口、GDP发展与/地区的人均预期寿命和人均GDP 之间的趋势。
散点图scatter
常用参数说明:
使用散点图描述中国人口与GDP增长趋势图
地理散点图scatter_geo
常用参数说明
使用地理散点图描述全球人口与GDP
折线图(line)
常用参数说明
使用折线图描述1952~2007中国与美国人口增长趋势图
条形图(bar)
常用参数说明
使用条形图描述1952~2007中国与美国人口增长趋势图
等值区域图(choropleth)
常用参数说明
使用等值区域图描述各个国家人口数量
目前国内数据可视化工具或产品很多,到底那个工具或者产品是最好的?看了很多数据可视化产品,总结下来分为几大类。
下面我将一一分别进行工具介绍:
一.数据可视化库类
一个纯javascript的数据可视化库,百度的产品,常应用于软件产品开发或者 系统的图表模块,图表种类多,动态可视化效果,开源免费。
评价: 非常好的一个可视化库,图表种类多,可选的主题。Echarts中主要还是以图表为主,没有提供文本和表格方面的展现库,如果有相关需求还需要引入表格和文本方面的其他可视化库。
与echarts相似,同样是可视化库,不过是国外的产品,商用需要付费,文档详尽。
评价: 同样是非常好的一个可视化库,图表种类多。但是同样需要进行二次开发,,没有提供文本和表格方面的展现库。而且因为商用付费,所以能选择echarts肯定不会选择highcharts。
Antv是蚂蚁金服出品的一套数据可视化语法,是国内第一个才用the grammar of Graphics这套理论的可视化库。在提供可视化库同时也提供简单的数据归类分析能力。
评价: 是一个优秀的可视化库,需要进行二次开发。因为采用的是the grammar of Graphics 语法,和echarts相比各有千秋。
二.报表、BI类
由echarts衍生出来的子产品,同样继承了echarts的特点,图表种类多,没有提供文本和表格方面的展现库。Echarts接受json格式的数据,百度图说把数据格式进行了封装,可以通过表格的形式组织数据。
评价:可以把表格数据转换成图表展现形式的工具,支持excel数据导入 ,适合做静态的BI报告。因为数据偏静态,没看到与数据库结合的部分,很难和第三方系统结合展现动态变化的数据,如日报表、月报表、周报表等。
FineReport报表软件是一款纯Java编写的、集数据展示(报表)和数据录入(表单)功能于一身的企业级web报表工具,它“专业、简捷、灵活”的特点和无码理念,仅需简单的拖拽操作便可以设计复杂的中国式报表,搭建数据决策分析系统。
评价: FineReport可以直连数据库,方便快捷的定制各种复杂表样,用来做出固定格式的周报、月报等。它的格式类似于excel界面,特色功能报表制作,报表权限分配,报表管理还有填报,支持多种数据库。
Tableau 是桌面系统中最简单的商业智能工具软件,Tableau 没有强迫用户编写自定义代码,新的控制台也可完全自定义配置。在控制台上,不仅能够监测信息,而且还提供完整的分析能力。Tableau控制台灵活,具有高度的动态性。
评价: 全球知名的BI工具,价格6000元/年/人左右,但是国外产品不花钱不会为你做任何定制化改动,售后很有问题。
FineBI与FineReport都是帆软的产品。首先FineReport作为一款报表工具,主要用于解决提升IT部门的常规/复杂报表开发效率问题;而FineBI是商业智能BI工具,在IT信息部门分类准备好数据业务包的前提下,给与数据,让业务人员或领导自行分析,满足即席数据分析需求,是分析型产品。
FineBI的使用感同Tableau类似,都主张可视化的 探索 性分析,有点像加强版的数据透视表。上手简单,可视化库丰富。可以充当数据报表的门户,也可以充当各业务分析的平台。
评价:FineBI做到了自助式分析,图表类型丰富,数据分析功能较强大,钻取,筛选,分组等功能都有。但是对于普通没有IT基础的人来说,要想真正熟练地掌握finebi,还是有一定的难度的,需要花上几天,但是这个难度相比Excel的VBA学习还是低不少的。
Power BI 是一套商业分析工具,用于在组织中提供见解。可连接数百个数据源、简化数据准备并提供即席分析。生成美观的报表并进行发布,供组织在 Web 和移动设备上使用。每个人都可创建个性化仪表板,获取针对其业务的全方位独特见解。在企业内实现扩展,内置管理和安全性。
评价: 类似于excel的桌面bi工具,功能比excel更加强大。支持多种数据源。价格便宜。但是只能作为单独的bi工具使用,没办法和现有的系统结合到一起。
三.可视化大屏类
提供丰富的模板与图形,支持多数据源,拖拉式布局,支持服务化服务方式和本地部署。整体来说是一款很好的大屏的产品。
评价: 产品不错,就是价格服务版每年5100元/年,本地部署竟然要110万,每年续费也要37万。
前文有介绍过,finereport是一个企业级的报表工具,同时也提供大屏的服务。通过布局、色彩、绑定数据等环节完成大屏的制作。拥有很多自助开发的可视化插件库。
评价: 很优秀的软件,性价比高。学习方面,掌握FineReport的dashboard制作,应该也比较简单的。
五 .专业类(地图、科学计算、机器学习)
很多工具都能实现数据地图,比如echarts,finereport,tableau等。
ggplot2是R语言最流行的第三方扩展包,是RStudio首席科学家Hadley Wickham读博期间的作品,是R相比其他语言一个独领风骚的特点。包名中“gg”是grammar of graphics的简称,是一套优雅的绘图语法。主要用于机器学习绘图。
评价: 机器学习、数学、科学计算领域专业的绘图语言。专业与技术要求都很高,不是专业搞机器学习或者科学计算的工程师,一般不会用到。
Python是一门编成语言,其周边的绘图库也比较丰富比如pandas和matplotlib ,pandas能够绘制线图、柱图、饼图、密度图、散点图等; matplotlib主要是绘制数学函数相关的图如三角函数图、概率模型图等。
评价: 机器学习、数学、科学计算领域专业的绘图语言。专业与技术要求都很高,不是专业搞机器学习或者科学计算的工程师,一般不会用到。
R-ggplot2
ggplot2是R语言最为强大的作图软件包,强于其自成一派的数据可视化理念。当熟悉了ggplot2的基本套路后,数据可视化工作将变得非常轻松而有条理。
技术相关
1. 将数据,数据相关绘图,数据无关绘图分离
这点可以说是ggplot2最为吸引人的一点。众所周知,数据可视化就是将我们从数据中 探索 的信息与图形要素对应起来的过程。
ggplot2将数据,数据到图形要素的映射,以及和数据无关的图形要素绘制分离,有点类似java的MVC框架思想。这让ggplot2的使用者能清楚分明的感受到一张数据分析图真正的组成部分,有针对性的进行开发,调整。
2. 图层式的开发逻辑
在ggplot2中,图形的绘制是一个个图层添加上去的。举个例子来说,我们首先决定 探索 一下身高与体重之间的关系;然后画了一个简单的散点图;然后决定最好区分性别,图中点的色彩对应于不同的性别;然后决定最好区分地区,拆成东中西三幅小图;最后决定加入回归直线,直观地看出趋势。这是一个层层推进的结构过程,在每一个推进中,都有额外的信息被加入进来。在使用ggplot2的过程中,上述的每一步都是一个图层,并能够叠加到上一步并可视化展示出来。
3. 各种图形要素的自由组合
由于ggplot2的图层式开发逻辑,我们可以自由组合各种图形要素,充分自由发挥想象力
基本开发步骤
1. 初始化 – ggplot()
这一步需要设定的是图的x轴,y轴和”美学特征”。基本形式如下:
p
python plotly 怎么使用
Plot.ly是一个用于做分析和可视化的在线工具,Plotly与pandas可以无缝地集成,可以做出很多非常丰富,互动的图表,并且文档非常健全,创建条形图相对简单,另外申请了API密钥后,可以一键将统计图形同步到云端。
下面是一个用Ploty画直方图的例子,我参考的是这篇文章
代码如下
import plotly.plotly as py
import pandas as pd
from plotly.graph_objs import *
from plotly.offline import plot
budget=pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:10]
data = Data([
Bar(
x=budget["detail"],
y=budget["amount"]
)
])
layout = Layout(
title='2014 MN Capital Budget',
font=Font(
family='Raleway, sans-serif'
),
showlegend=False,
xaxis=XAxis(
tickangle=-45
),
bargap=0.05
)
fig = Figure(data=data, layout=layout)
Plotly绘图指令速查 - python
线上运行以及绘图效果,欢迎移步 和鲸社区
#terminal里
pip install plotly
import plotly.offline as py
import plotly.graph_objs as go
trace = {'x':[1,2], 'y':[1,2]}
data = [trace]
layout = {}
fig = go.Figure(
data = data, layout = layout)
py.offline.plot(fig)
trace1 = go.Scatter(
x = [1,2], y = [1,2])
trace2 = go.Scatter(
x = [1,2], y = [2,2])
py.iplot([trace1,trace2])
trace1 = go.Scatter(
x = [1,2,3], y = [1,2,3],
text = ['A','B','C'],
textposition = 'top center',
mode = 'markers+text')
data = [trace]
py.iplot(data)
trace = go.Bar(
x = [1,2],
y = [1,2],)
data = [trace]
py.iplot(data)
trace = go.Scatter(
x = [1,2,3],
y = [1,2,3],
marker = dict(
color = ['red','blue','green'],
size = [30,80,200]),
mode = 'markers'
)
py.iplot([trace])
trace = go.Heatmap(
z = [[1,2,3,4],
[5,6,7,8]])
data = [trace]
py.iplot(data)
trace = go.Scatter(
x = [1,2,6],
y = [1,2,0.5],
fill = "tonexty")
data = [trace]
py.iplot(data)
trace1 = go.Scatter(
name = "Calvin",
x = [1,2],
y = [2,1])
trace2 = go.Scatter(
name = "Hobbes",
x = [2,1],
y = [2,1])
layout = go.Layout(
showlegend = True,
# 设置图例相对于左下角的位置
legend = dict(
x = 0.2,
y = 0.5))
data = [trace1, trace2]
fig = go.Figure(data = data, layout = layout)
py.iplot(fig)
trace = go.Scatter(
x = [-1,1,2,3,4],
y = [-1,1,2,3,6])
axis_template = dict(
showgrid = True, #网格
zeroline = True, #是否显示基线,即沿着(0,0)画出x轴和y轴
nticks = 20,
showline = True,
title = 'X axis',
mirror = 'all')
layout = go.Layout(
xaxis = axis_template,
yaxis = axis_template)
data = [trace]
fig = go.Figure(
data = data,
layout = layout)
py.iplot(fig)
trace = go.Histogram(
x = [1,2,3,3,3,4,5])
data = [trace]
py.iplot(data)
trace=go.Box(
x=[1,2,3,3,3,4,5])
data=[trace]
py.iplot(data)
trace=go.Histogram2d(
x=[1,2,3,3,3,4,5],
y=[1,2,3,3,3,4,5])
data=[trace]
py.iplot(data)
trace = dict(
type = 'scattergeo',
lon = [100,400],lat = [0,0],
marker = dict(
color = ['red','blue'],
size = [30,50]),
mode = 'markers')
py.iplot([trace])
import plotly.colors
trace = dict(
type = 'choropleth',
locations = ['AZ','CA','VT'],
locationmode = 'USA-states',
colorscale = 'Viridis',
z = [10,20,40])
layout = dict(geo = dict(scope = 'usa'))
map = go.Figure(data = [trace], layout = layout)
py.iplot(map)
trace=go.Surface(
colorscale='Viridis',
z=[[3,5,8,13],
[21,13,8,5]])
data = [trace]
py.iplot(data)
trace = go.Scatter3d(
x = [9,8,5,1],
y = [1,2,4,8],
z = [11,8,15,3],
mode = 'lines')
data = [trace]
py.iplot(data)
trace = go.Scatter3d(
x = [9,8,5,1],
y = [1,2,4,8],
z = [11,8,15,3],
mode = 'markers')
data = [trace]
py.iplot(data)
Figure {}
data []
trace {}
x,y,z []
color,text,size []
colorscale ABC or []
marker {}
color ABC
symbol ABC
line {}
color ABC
width 123
layout {}
title ABC
xaxis,yaxis {}
scene {}
xaxis,yaxis,zaxis {}
geo {}
legend {}
annotations {}
{} 字典
[] 列表
ABC 字符
123 数字
plotly使用指南
plot.ly