用Python的Plotly画出炫酷的数据可视化(含各类图介绍)

简介: 用Python的Plotly画出炫酷的数据可视化(含各类图介绍)

在谈及数据可视化的时候,我们通常都会使用到matplotlylib,pyecharts这些可视化的手段。但是,今天我主要来介绍Plotly这款可视化的库。大家参考开源项目地址:

https://github.com/plotly/plotly.js640.png

这个库是使用js写的前端,所以画出来的图非常的漂亮,不像matplotlylib画出来的那么生硬。plotly提供了Python的支持库,使用pip直接安装就可以:

pip install plotly


在python里面使用plotly画图非常的简单,我们先来看一个简单的柱状图例子:

import plotly.graph_objects as go
animals=['giraffes', 'orangutans', 'monkeys']
fig = go.Figure(data=[
    go.Bar(name='SF Zoo', x=animals, y=[20, 14, 23]),
    go.Bar(name='LA Zoo', x=animals, y=[12, 18, 29])
])
# Change the bar mode
fig.update_layout(barmode='group')
fig.show()

使用起来非常的方便,和matplotlylib画图步骤很像,下面我们再来看看一组关于个性化显示的例子:利用plotly express自带的数据集,画一个简单的柱状图:

import plotly.express as px
data_canada = px.data.gapminder().query("country == 'Canada'")
fig = px.bar(data_canada, x='year', y='pop')
fig.show()

640.png


这样的图看上去还是比较素,我们可以使用参数来自定义条形图的样式:

import plotly.express as px
data = px.data.gapminder()
data_canada = data[data.country == 'Canada']
fig = px.bar(data_canada, x='year', y='pop',
             hover_data=['lifeExp', 'gdpPercap'], color='lifeExp',
             labels={'pop':'population of Canada'}, height=400)
fig.show()

640.png

调整样式后会明显发现数据展示会友好很多,能够清楚的看到数据的增长程度。
除了柱状图之外还有其他的散点图,折线图,饼状图,条形图,箱型图等等(也包含一些热图,登高图,地图分布等等)。

640.png

下面,我们使用Python画一些Plolty基本图的Demo:

(大家如果有需要用Plotly的建议收藏哦!)
散点图散点图核心的价值在于发现变量之间的关系,千万不要简单地将这个关系理解为线性回归关系。变量间的关系有很多,如线性关系、指数关系、对数关系等等,当然,没有关系也是一种重要的关系。散点图更偏向于研究型图表,能让我们发现变量之间隐藏的关系为我们决策作出重要的引导作用。

import plotly.express as px
fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])
fig.show()

640.png

import plotly.express as px
df = px.data.iris()  # px自带数据集
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
                 size='petal_length', hover_data=['petal_width'])
fig.show()


640.png


折线图

折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。比如我们经常看到的监控数据图,一般都是折线图。

import plotly.graph_objects as go
animals = ['giraffes', 'orangutans', 'monkeys']
fig = go.Figure(data=[
    go.Scatter(name='SF Zoo', x=animals, y=[20, 14, 23]),
    go.Scatter(name='LA Zoo', x=animals, y=[12, 18, 29])
])
fig.show()

640.png


import plotly.graph_objects as go
import numpy as np
np.random.seed(1)
N = 100
random_x = np.linspace(0, 1, N)
random_y0 = np.random.randn(N) + 5
random_y1 = np.random.randn(N)
random_y2 = np.random.randn(N) - 5
# Create traces
fig = go.Figure()
fig.add_trace(go.Scatter(x=random_x, y=random_y0,
                    mode='lines',
                    name='lines'))
fig.add_trace(go.Scatter(x=random_x, y=random_y1,
                    mode='lines+markers',
                    name='lines+markers'))
fig.add_trace(go.Scatter(x=random_x, y=random_y2,
                    mode='markers', name='markers'))
fig.show()

640.png



饼图饼图主要用于总体中各组成部分所占比重的研究,可以很直观地分析项目的组成结构与比重,一目了然地进行描述重量分成。比如我们统计各种开销占总支出多少的时候,这个时候使用饼图可以很明显看出开销的大头。

import plotly.express as px
# This dataframe has 244 lines, but 4 distinct values for `day`
df = px.data.tips()
fig = px.pie(df, values='tip', names='day')
fig.show()

import plotly.express as px# plotly的自带数据集,类型:DataFrame
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries' # Represent only large countries
fig = px.pie(df, values='pop', names='country', title='Population of European continent')
fig.show()

640.png




TreeMap(矩形树图)

矩形树图适合展现具有层级关系的数据,能够直观体现同级之间的比较。一个Tree状结构转化为平面空间矩形的状态,就像一张地图,指引我们发现探索数据背后的故事。

矩形树图采用矩形表示层次结构里的节点,父子节点之间的层次关系用矩形之间的相互嵌套隐喻来表达。从根节点开始,屏幕空间根据相应的子节点数目被分为多个矩形,矩形的面积大小通常对应节点的属性。每个矩形又按照相应节点的子节点递归的进行分割,知道叶子节点为止。

640.png
import plotly.express as px
fig = px.treemap(
    names = ["Eve","Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
    parents = ["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"]
)
fig.show()




水平柱状图和纵向柱状图一样,都是用来列举和比较多个个体之间的差值,通过柱状图的长短可以很明显看出数据之间的差别。

import plotly.graph_objects as go
# 修改水平参数即可
fig = go.Figure(go.Bar(
            x=[20, 14, 23],
            y=['giraffes', 'orangutans', 'monkeys'],
            orientation='h'))
fig.show()

640.png



箱型图

箱形图(Box-plot)又称为盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。

import plotly.express as px
df = px.data.tips()
fig = px.box(df, x="time", y="total_bill")
fig.show()


640.png



等高线有二维、三维等高线图。在数据分析中,高度表示为该点的数量或出现次数,该指标相同则在一条环线(或高度)处。

import plotly.graph_objects as go
fig = go.Figure(data =
    go.Contour(
        z=[[10, 10.625, 12.5, 15.625, 20],
           [5.625, 6.25, 8.125, 11.25, 15.625],
           [2.5, 3.125, 5., 8.125, 12.5],
           [0.625, 1.25, 3.125, 6.25, 10.625],
           [0, 0.625, 2.5, 5.625, 10]]
    ))
fig.show()


640.png


热图是指用热谱图展示用户在网站上的行为。浏览量大、点击量大的地方呈红色,浏览量小、点击量少的地方呈无色、蓝色。常见热图共有点击热图、注意力热图、分析热图、对比热图、分享热图、浮层热图和历史热图等七种。

import plotly.express as px
data=[[1, 25, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, 5, 20]]
fig = px.imshow(data,
                labels=dict(x="Day of Week", y="Time of Day", color="Productivity"),
                x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
                y=['Morning', 'Afternoon', 'Evening']
               )
fig.update_xaxes(side="top")
fig.show()

640.png



三元图三元图,又称三元相图(Ternary plot)有三个坐标轴,它的三个坐标轴“首尾相接”成夹角为60度的等边三角形。“元”即成分,或部分,三元图主要用来展示不同样本的三种成分的比例,在物理化学中比较常见。

import plotly.express as px
df = px.data.election()
fig = px.scatter_ternary(df, a="Joly", b="Coderre", c="Bergeron")
fig.show()

640.png



雷达图雷达图以二维的形式展现了多维数据,使观察者可以一目了然地得知对象在各种指标上的强弱,最典型的就是游戏中衡量一个角色多维度的能力值。

import plotly.express as px
import pandas as pd
df = pd.DataFrame(dict(
    r=[1, 5, 2, 2, 3],
    theta=['processing cost','mechanical properties','chemical stability',
           'thermal stability', 'device integration']))
fig = px.line_polar(df, r='r', theta='theta', line_close=True)
fig.show()


640.png


极坐标图极坐标图主要作用就是可在一张图上绘出整个频率域的频率响应特性。

import plotly.express as px
df = px.data.wind()
fig = px.scatter_polar(df, r="frequency", theta="direction")
fig.show()


640.png


瀑布图瀑布图,因为形似瀑布流水而称之为瀑布图( Waterfall Plot)。此种图表采用绝对值与相对值结合的方式,适用于表达数个特定数值之间的数量变化关系。

import plotly.graph_objects as go
fig = go.Figure(go.Waterfall(
    name = "20", orientation = "v",
    measure = ["relative", "relative", "total", "relative", "relative", "total"],
    x = ["Sales", "Consulting", "Net revenue", "Purchases", "Other expenses", "Profit before tax"],
    textposition = "outside",
    text = ["+60", "+80", "", "-40", "-20", "Total"],
    y = [60, 80, 0, -40, -20, 0],
    connector = {"line":{"color":"rgb(63, 63, 63)"}},
))
fig.update_layout(
        title = "Profit and loss statement 2020",
        showlegend = True
)
fig.show()


640.png

漏斗图

一般表述转化率(如营销客户转化),由上而下代表不同层级,转化率逐级降低并形成漏斗形状。

import plotly.express as px
data = dict(
    number=[39, 27.4, 20.6, 11, 2],
    stage=["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"])
fig = px.funnel(data, x='number', y='stage')
fig.show()

640.png


气泡分布图(含配置底图)

import plotly.express as px
df = px.data.gapminder().query("year==2007")
fig = px.scatter_geo(df, locations="iso_alpha", color="continent",
                     hover_name="country", size="pop",
                     projection="natural earth")
fig.show()

640.png

相关文章
|
19天前
|
数据可视化 Python
使用Python进行数据可视化的初学者指南
在数据的海洋里,我们如何能够不迷失方向?通过数据可视化的力量,我们可以将复杂的数据集转化为易于理解的图形和图表。本文旨在为初学者提供一份简明的入门手册,介绍如何使用Python中的Matplotlib库来揭示数据背后的故事。我们将从基础的图表开始,逐步深入到更高级的可视化技术,确保每个步骤都清晰易懂,让初学者也能轻松上手。让我们开始绘制属于你自己的数据图谱吧!
|
1月前
|
机器学习/深度学习 人工智能 数据可视化
使用Python进行数据可视化:探索与实践
在数字时代的浪潮中,数据可视化成为了沟通复杂信息和洞察数据背后故事的重要工具。本文将引导读者通过Python这一强大的编程语言,利用其丰富的库函数,轻松入门并掌握数据可视化的基础技能。我们将从简单的图表创建开始,逐步深入到交互式图表的制作,最终实现复杂数据的动态呈现。无论你是数据分析新手,还是希望提升报告吸引力的专业人士,这篇文章都将是你的理想指南。
39 9
|
26天前
|
数据可视化 数据处理 Python
Python编程中的数据可视化技术
在Python编程中,数据可视化是一项强大的工具,它能够将复杂的数据集转化为易于理解的图形。本文将介绍如何使用matplotlib和pandas这两个流行的Python库来实现数据可视化,并展示一些实用的代码示例。通过这些示例,读者将学会如何创建各种图表,包括折线图、柱状图和散点图等,以便更好地理解和呈现数据。
|
1月前
|
数据可视化 数据挖掘 定位技术
Python和Geopandas进行地理数据可视化
【10月更文挑战第22天】本文介绍了如何使用Python和Geopandas进行地理数据可视化和分析,涵盖从准备工作、加载数据、数据探索与处理、地理数据可视化、空间分析与查询到交互式地理数据可视化等内容。通过丰富的代码示例和案例演示,帮助读者掌握地理数据分析的基本方法,为实际应用提供支持。
99 19
|
1月前
|
数据可视化 搜索推荐 Shell
Python与Plotly:B站每周必看榜单的可视化解决方案
Python与Plotly:B站每周必看榜单的可视化解决方案
|
1月前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
2月前
|
数据可视化 数据挖掘 Python
使用Python进行数据可视化:探索与实践
【10月更文挑战第21天】本文旨在通过Python编程,介绍如何利用数据可视化技术来揭示数据背后的信息和趋势。我们将从基础的图表创建开始,逐步深入到高级可视化技巧,包括交互式图表和动态展示。文章将引导读者理解不同图表类型适用的场景,并教授如何使用流行的库如Matplotlib和Seaborn来制作美观且具有洞察力的可视化作品。
50 7
|
1月前
|
数据可视化 定位技术 Python
使用Python进行数据可视化
【10月更文挑战第22天】在这篇文章中,我们将深入探讨如何使用Python进行数据可视化。我们将从基础的图表开始,然后逐步进入更复杂的可视化技术。我们将通过实例代码来展示如何实现这些可视化,以便读者能够更好地理解和应用这些技术。
40 5
|
18天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
16天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。