2021-05-08

高级可视化神器Plotly快速入门

数据可视化已经逐渐发展和深入到我们生活的各个方面,往往遇到数据分析类的工作,借助可视化的方式来呈现我们的数据和结论,能够帮助我们更好地理解数据本身的含义和背后隐藏的规律。

数据通常是以图形或者图表的形式进行展示,例如Excel表格、柱状图、折线图、饼图、旭日图等。

现在出现了很多可视化的工具能够实现数据图表的可视化展示,比如Tableau、Power BI等;和python相关的第三方可视化库也数不胜数,比如很传统和基础的matplotlib、pyecharts、Seaborn,还比如D3、Highcharts等。它们有着自己或多或少的使用缺陷:

  • 绘制出来的图形是静态的:无法实现动态可视化
  • 部分软件需要付费才能使用;否则只能使用部分基础功能
  • 有些可视化库涉及到很多前端JavaScript、HTML的知识,上手比较困难
  • 配置麻烦:简单的图形也需要大量的代码进行配置

Plotly简介

Plotly是一款用来做数据分析和可视化的在线平台,功能真的是非常强大,它主要有以下特点:

  1. 图形多样化:在线绘制多种图形,比如柱状图、饼图、直方图、饼图、气泡图、桑基图、股票图、旭日图、联合分布图、地图等
  2. 在线可编辑:Plotly中有在线编辑的平台,可以将生成的图形保存到该平台,并进行分享
  3. 开源免费:Plotly的所有资源都是开源免费的,用户可直接使用,还可以直接和R、python、MATLAB等软件或者语言无缝对接
  4. 图形动态化:Plotly生成的图形全部是动态化;Plotly的绘图最好在Jupyter notebook中进行,能够很好地显示动态效果
  5. 颜色绚丽:在使用Plotly绘制图形的时候,我们可以进行图形颜色的设置,Plotly提供了丰富的颜色面板供选择
  6. 代码量少:Plotly绘图,尤其是Plotly的高级封装Plotly_Express,代码量非常少;一行代码就能实现多种功能且精美的图形
  7. 内置丰富数据集:在Plotly中内置7个不同类型的数据集,方便读者直接使用内置数据进行学习、使用
  8. 文档健全:Plotly官方提供了丰富的文档资料和案例可免费学习,能够快速的上手

附录:在官网中展示了Plotly能够绘制的部分图形:https://plotly.com/python/

2021-05-08
2021-05-08
2021-05-08
2021-05-08

安装和使用

可视化库Plotly及子库的安装非常简单,只需要通过两条命令:

pip install plotly
pip install plotly_express  # 安装

使用之前先导入:

# 两种绘图接口
import plotly_express as px  # import plotly.express as px
import plotly.graph_objects as go

上面介绍了两种Plotly中绘图的接口:

  • plotly_express:通常简写为px
  • plotly.graph_objects:通常简写为go

内置数据集

在Plotly中内置了非常多的数据集,当我们导入了之后可以直接使用:

1、内置GDP数据集

gapminder = px.data.gapminder() 
gapminder.head()   # 查看前5行数据
2021-05-08

2、餐厅消费的数据集

tips = px.data.tips()  
tips.head()
2021-05-08

3、数据领域非常著名的鸢尾花数据集

iris = px.data.iris()  
iris.head()
2021-05-08

4、一份风力数据集

wind = px.data.wind()        
wind.head()
2021-05-08

5、选举结果数据集

election = px.data.election() 
election.head()  # 显示前5行数据
2021-05-08

上面只列出了Plotly中的部分数据集,下面的导图记录了全部的内置数据作用及其相应的字段,可供用户免费使用,非常友好:

2021-05-08

Plotly绘图

上面介绍了可视化和Plotly的相关知识,下面将通过各种实际的案例来讲解如何利用Plotly绘制相关的可视化图形。

所有的图像在Jupyter notebook中都是动态可视化,本文采取的是截图方式来展示可视化结果。

基础散点图

1、绘制基础的散点图,如果是直接传入两个轴的数据,需要2个参数:

fig = px.scatter(   # scatter绘制散点图
  x=[0,2,4,6],    #  x轴
  y=[1,3,5,7]  # y轴
)

fig.show()
2021-05-08

2、如果是使用pandas中的数据库DataFrame来绘制图像:

df = px.data.iris()   # 鸢尾花数据集
df.head()
2021-05-08
fig = px.scatter(
  df,  # 数据集
  x="sepal_width",  # x轴
  y="sepal_length"  # y轴
)
fig.show()
2021-05-08

3、还可以传入一个颜色参数color,可以选择字符型或者数据型:

  • 字符型数据
fig = px.scatter(
  df,  # 数据集
  x="sepal_width",  # x轴
  y="sepal_length",  # y轴
  color="species",  # 指定颜色:字符型数据
)
fig.show()
2021-05-08
  • 数值型数据
fig = px.scatter(
  df,  # 数据集
  x="sepal_width",  # x轴
  y="sepal_length",  # y轴
  color="sepal_length"  # 指定颜色
)
fig.show()
2021-05-08

4、传入size参数控制每个点的大小,相当于是在制作气泡图

gap = px.data.gapminder().query("year == 2002")

fig = px.scatter(
  gap   # 绘图数据
  ,x="gdpPercap"  # x轴
  ,y="lifeExp"  # y轴
  ,color="continent"  # 颜色参数
  ,size="pop"   # 点的大小
  ,size_max=60  # 点的最大值
)

fig.show()
2021-05-08
2021-05-08

5、散点图中显示每个点的数据

x_data = [0,2,4,6,8]
y_data = [1,3,5,7,9]

fig = px.scatter(x=x_data,
                 y=y_data,
                 color=x_data,  # 颜色设置
                 text=x_data  # 显示内容
                )
fig.update_traces(textposition="top center")  # 显示位置:顶部居中

fig.show()
2021-05-08

6、绘制折线图:折线图可以理解成散点图的一种极限形式,下面例子中使用go方法实现

import plotly.graph_objects as go


import numpy as np
np.random.seed(1)

# 生成随机数据
N = 200
random_x = np.linspace(0, 1, N)
random_y0 = np.random.randn(N) + 10
random_y1 = np.random.randn(N)
random_y2 = np.random.randn(N) - 10

# 准备画布
fig = go.Figure()

# 添加3组不同的数据
fig.add_trace(go.Scatter(  # 
    x=random_x, 
    y=random_y0,               
    mode='lines', # mode模式              
    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()
2021-05-08

7、绘制3D散点图

import plotly.express as px

df = px.data.iris()

fig = px.scatter_3d(
  df,  # 指定数据
  x='sepal_length',  # 指定xyz
  y='sepal_width', 
  z='petal_width',
  color='species')  # 指定颜色

fig1.show()
2021-05-08

绘制柱状图

1、基础柱状图

自行模拟一份数据集:

df1 = pd.DataFrame({
    "name": ["小明","小红","周明","周红","张三"],
    "age": [20,28,18,25,36],
    "score": ["150","170","160","168","154"]
})

df1
2021-05-08
fig = px.bar(
  df1,  # 绘图数据
  x="name",  # x轴
  y="age"    # y轴
)

fig.show()
2021-05-08

2、加上改变颜色的参数color

fig = px.bar(
  df1,
  x="name",
  y="age",
  color="age"   # 颜色参数
)
fig.show()
2021-05-08

3、设置图中的悬停信息

悬停信息指的是:当我们光标放到图形上去才会显示的信息

第一种是基于px方法实现的悬停信息:

fig = px.bar(
  df1,
  x="name",
  y="age",
  color="age",  # 加上颜色参数
  hover_data = ['score']   # 悬停参数
)
fig.show()
2021-05-08

第二种是基于go方法实现的悬停信息:

import plotly.graph_objects as go

name = ['Product A', 'Product B', 'Product C']
number = [1200, 1500, 1300]

fig = go.Figure(data=[go.Bar(x=name, 
                             y=number,
                             hovertext=['20% 市场份额 ', '50% 市场份额', '30% 市场份额'])])

fig.update_traces(marker_color='rgb(15,110,225)', # marker颜色
                  marker_line_color='rgb(108,48,107)', # 线条颜色
                  marker_line_width=1.5,   # 线宽
                  opacity=0.6)  # 透明度

fig.update_layout(title_text='3种产品市场份额对比')

fig.show()
2021-05-08

4、x轴标签倾斜设置

模拟一份新的数据:

information = pd.DataFrame({
    "days":["2021年3月1日 星期一",
            "2021年3月2日 星期二",
            "2021年3月3日 星期三",
            "2021年3月4日 星期四",
            "2021年3月5日 星期五"],
  
    "number":[400,700,300,500,800]
})

information
2021-05-08

默认情况下x轴标签是水平显示:

fig = px.bar(
  information,
  x="days",
  y="number")

fig.show()   # 默认水平显示
2021-05-08
fig = px.bar(
  information,
  x="days",
  y="number")

fig.update_layout(xaxis_tickangle=-45)   # 倾斜角度设置

fig.show()   # 结果是向左倾斜
2021-05-08

基于go方法实现的x轴标签倾斜:

import plotly.graph_objects as go

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

# 生成画布对象
fig = go.Figure()  

# 添加多个图形轨迹
fig.add_trace(go.Bar(
    x=months,
    y=[20, 14, 25, 16, 18, 22, 19, 15, 12, 16, 14, 17],
    name='产品A',
    marker_color='lightblue'  # 颜色的不同表示方法
))

fig.add_trace(go.Bar(
    x=months,
    y=[19, 14, 22, 14, 16, 19, 15, 14, 10, 12, 12, 16],
    name='产品B',
    marker_color='#af0110'
))

fig.update_layout(barmode='group',  # 柱状图模式
                  xaxis_tickangle=-45   # 倾斜角度
                 )
fig.show()
2021-05-08

5、分组柱状图

第一种情况是基于长表形式的分组柱状图:

df2 = pd.DataFrame({
    "姓名": ["小明","小红","张三","小明","小红","张三","小明","小红","张三"],
    "科目":["语文","语文","语文","数学","数学","数学","英语","英语","英语"],
    "得分": [58,78,84,90,71,90,64,84,69]
})

df2
2021-05-08
fig = px.bar(
  df2,
  x="姓名",
  y="得分",
  color="科目")

fig.show()
2021-05-08

第二种情况是基于宽表形式的分组柱状图:

df3 = pd.DataFrame({
    "姓名": ["小明","小红","张三"],
    "语文":[58,78,84],
    "数学":[90,71,90],
    "英语":[64,84,69]
})

df3
2021-05-08
fig = px.bar(
  df3,
  x="姓名",
  y=["语文","数学","英语"],
  title="学生成绩对比"  # 添加标题
)
fig.show()
2021-05-08

6、多面柱状图

使用的是Plotly中自带的餐厅消费数据集:

2021-05-08
fig = px.bar(
  df4,   # 带绘图数据 
  x="sex",  # x轴
  y="total_bill",   # y轴
  color="smoker",  # 颜色的设置
  barmode="group",  # 柱状图4种模式之一
  facet_row="time",  #  行
  facet_col="day",  # 列
  category_orders={
    "day": ["Thur", "Fri", "Sat", "Sun"],
    "time": ["Lunch", "Dinner"]   # 分类顺序设置
  }
)

fig.show()
2021-05-08

7、改变柱状图基准位置

import plotly.graph_objects as go

years = ['2017','2019','2021']

fig = go.Figure()

fig.add_trace(go.Bar(
    x=years, 
    y=[2000, 3000, 5000],
    base=[-2000,-3000,-5000],  # 基准位置设置
    marker_color='crimson',
    name='商家A'))

fig.add_trace(go.Bar(
    x=years, 
    y=[3000, 4000, 2000],
    base=0,  # 默认的基准设置
    marker_color='lightslategrey',
    name='商家B'
))

fig.show()
2021-05-08

8、改变图例位置和颜色

有时候我们需要改变图例的颜色和位置,进行如下设置:

import plotly.graph_objects as go

subjects = ["语文","数学","英语","物理","化学","生物"]

fig = go.Figure()
fig.add_trace(go.Bar(
    x=subjects,   # x轴、y轴数据             
    y=[90,85,78,90,99,80],                
    name='周均',  # 图例名称           
    marker_color='rgb(15, 83, 109)'  # 该组数据颜色
                
))

fig.add_trace(go.Bar(
    x=subjects,               
    y=[80,89,68,100,78,90],               
    name='小明',               
    marker_color='rgb(180, 118, 255)'
                ))

fig.update_layout(
    title='期末成绩对比情况',  # 整个图的标题
    xaxis_tickfont_size=12,   # x轴字体大小
    yaxis=dict(
        title='成绩',  # y轴的标题
        titlefont_size=16,  # 标题大小
        tickfont_size=6,  # y轴上的数值大小
    ),
    legend=dict(
        x=0,  # 图例的位置
        y=1,
#         bgcolor='rgba(255, 255, 255, 0)',  # 图例的背景色
        bordercolor='rgba(112, 255, 255, 0)'   # 边缘颜色
    ),
    barmode='group',  # 柱状图模式
    bargap=0.5,  # 组间距离
    bargroupgap=0.4  # 组内距离
)

fig.show()
2021-05-08

绘制水平柱状图

1、基于px实现水平柱状图,加上参数orientation='h'

df1 = pd.DataFrame({
    "name": ["小明","小红","周明","周红","张三"],
    "age": [20,28,18,25,36],
    "score": ["150","170","160","168","154"]
})

df1
2021-05-08
fig = px.bar(
    df1,
    y="name",   # xy轴的数据需要交换
    x="age",
    orientation='h',   # 水平柱状图
    text="age"   # 需要显示的数据
)

# 设置文本显示的位置,默认是里面
# fig.update_traces(textposition="outside")  # ['inside', 'outside', 'auto', 'none']

fig.show()
2021-05-08

2、改变柱状图颜色

第一种方法是使用颜色参数color

fig = px.bar(
    df1,
    y="name",   
    x="age",
    color="age",  # 颜色参数
    orientation='h',   # 水平柱状图
    text="age"   
)

fig.update_traces(textposition="outside")  # ['inside', 'outside', 'auto', 'none']

fig.show()
2021-05-08

第二种情况是自定义颜色

fig = px.bar(
    df1,
    y="name",   
    x="age",
#     color="age",
    # 自定义颜色
    color_discrete_sequence=px.colors.diverging.RdBu,
    orientation='h',   # 水平柱状图
    text="age"   
)

fig.update_traces(textposition="outside")  # ['inside', 'outside', 'auto', 'none']

fig.show()
2021-05-08

3、基于go方法实现

fig = go.Figure(go.Bar(
            x=df1["score"].tolist(),  # x轴数据
            y=df1["name"].tolist(),  # y轴数据
            orientation='h'))

fig.show()
2021-05-08

4、分组水平柱状图

import plotly.graph_objects as go

# 生成画布
fig = go.Figure()

# 添加3个图形轨迹
fig.add_trace(go.Bar(
    y=['小明', '小红', '张三'],
    x=[120, 74, 103],
    name='语文',
    orientation='h',
    marker=dict(
        color='rgba(246, 78, 139, 0.6)',
        line=dict(color='rgba(246, 78, 139, 1.0)', width=3)
    )
))

fig.add_trace(go.Bar(
    y=['小明', '小红', '张三'],
    x=[92, 128, 89],
    name='数学',
    orientation='h',
    marker=dict(
        color='rgba(5, 71, 80, 0.6)',
        line=dict(color='rgba(58, 71, 80, 1.0)', width=3)
    )
))

fig.add_trace(go.Bar(
    y=['小明', '小红', '张三'],
    x=[92, 78, 69],
    name='英语',
    orientation='h',
    marker=dict(
        color='rgba(18, 7, 80, 0.6)',
        line=dict(color='rgba(58, 71, 80, 1.0)', width=3)
    )
))

fig.update_layout(barmode='stack')  # 堆叠模式:['stack', 'group', 'overlay', 'relative']

fig.show()
2021-05-08

绘制漏斗图

漏斗图在电商销售领域使用的非常普遍,它能够明显地观察到不同阶段之间的转化效果,下面通过不同的例子来讲解漏斗图的制作。

1、普通漏斗图

自行模拟一份数据:

data1 = pd.DataFrame({
    "number": [1200,900,700,400,180,100],
    "stage": ["浏览网站","搜索","加购","提交订单","点击支付","支付成功"]}
)
data1
2021-05-08
# 绘图
fig = px.funnel(
    data1,   # 绘图数据
    x="number",  # x轴数据
    y="stage"  # y轴数据
)

fig.show()
2021-05-08

通过go方法来实现基础漏斗图:

from plotly import graph_objects as go

fig = go.Figure(go.Funnel(
    x=[1000,800,400,100],
    y=["浏览网站","加购","点击支付","支付成功"]
))

fig.show()
2021-05-08

还可以给漏斗图改变颜色,只需要加上颜色参数color

# 加上颜色参数color

fig = px.funnel(
  data1[::-1],   # 数据翻转
  x="number",
  y="stage",
  color="stage"   # 改成stage
)

fig.show()
2021-05-08

2、分组漏斗组的展示

将不同组别的漏斗图放在一个大的画布中,我们生成2020年3月份和2021年3月份的数据,绘制分组漏斗图:

# 2020年3月数据

stage=["浏览网站","加购","点击支付","支付成功"]

df1 = pd.DataFrame(dict(
    number=[1000,800,400,100],
    stages=stage
))

df1["time"] = "2020年3月"
df1
2021-05-08
# 2021年3月份

stage=["浏览网站","加购","点击支付","支付成功"]
df2 = pd.DataFrame(dict(
    number=[1200,600,300,140],
    stages=stage
))

df2["time"] = "2021年3月"
df2
2021-05-08

上面生成了两个月份的不同数据,现在通过concat函数进行数据的合并:

# 将两组数据合并
df3 = pd.concat([df1, df2], axis=0)
df3
2021-05-08

最后通过funnel()方法来绘图:

# 绘图

fig = px.funnel(df3,x="number",y="stages",color="time")
fig.show()
2021-05-08

3、通过go方法来实现分组漏斗

from plotly import graph_objects as go

stage = ["浏览网站","加购","点击支付","支付成功"]

fig = go.Figure()

fig.add_trace(go.Funnel(
    name = "2020年3月",  # 图形轨迹名称
    x = [1000,800,400,200],  # 数据
    y = stage, # 每个阶段名称
    orientation = "h",  # 方位
    textposition = "inside",  # 文本内容的位置
    textinfo = "value+percent previous"  # 显示文本内容
))


fig.add_trace(go.Funnel(
    name = "2021年2月",   # 名称和数据需要改变
    x = [1200,900,500,240],  
    y = stage, 
    orientation = "h",  
    textposition = "inside",  
    textinfo = "value+percent total"  
))

fig.add_trace(go.Funnel(
    name = "2021年3月",  # 名称和数据需要改变
    x = [1500,1000,450,300],  
    y = stage, 
    orientation = "h",  
    textposition = "inside",  
    textinfo = "label+percent initial"  
))

fig.show()
2021-05-08

绘制饼图

饼图在可视化图表中是一种非常常见的图,它能够很好地展示不同组别的占比情况,下面通过具体的案例来绘制不同需求的饼图。

1、基础饼图的绘制

模拟一份水果店的进货数量的数据,如下表:

fruit = pd.DataFrame({
    "name":["苹果","香蕉","梨","菠萝","葡萄"],
    "number":[1000,800,600,2000,2500]
})

fruit
2021-05-08
fig = px.pie(
  fruit,  # 绘图数据
  names="name",  # 显示的名称
  values="number"  # 显示的数据
)

fig.show()
2021-05-08

基于go方法实现基础饼图:

import plotly.graph_objects as go

name=fruit["name"].tolist()
value=fruit["number"].tolist()  

fig = go.Figure(
    data=[go.Pie(
        labels=name,  # 标签
        values=value  # 显示数据
    )]
)

fig.show()

结果和上面的图形相同

2、给饼图添加标题,并改变位置

fig = px.pie(
  fruit,
  names="name",
  values="number"
)

fig.update_layout(
    title={   # 设置整个标题的名称和位置
        "text":"水果数量占比",  # 标题
        "y":0.96,  # 通过4个参数控制标题位置
        "x":0.5,
        "xanchor":"center",
        "yanchor":"top"
    }
)

fig.show()
2021-05-08

3、改变饼图颜色

上面绘制的饼图是默认的颜色,我们可以对颜色进行设置

第一种是加上颜色参数color:

fig = px.pie(
  fruit,
  names="name",
  values="number",
  color="number"  # 颜色参数
)
fig.show()
2021-05-08

第二种是通过参数color_discrete_sequence

fig = px.pie(
  fruit,
  names="name",
  values="number",
  # 不同颜色:RdBu、Peach
  color_discrete_sequence=px.colors.sequential.Plotly3   # Plotly3可以变成不同颜色
)
fig.show()
2021-05-08
2021-05-08

第三种是通过字典的形式来设置颜色:

fig = px.pie(
  fruit,
  names="name",
  values="number",
  color="name",
  color_discrete_map={   # 下面是通过字典形式来设置每个分组的颜色
    '葡萄':'lightcyan',
    '菠萝':'cyan',
    '苹果':'royablue',
    '香蕉':'darkblue',
    '梨':'red'}
)
fig.show()
2021-05-08

4、饼图文本信息设置

fig = px.pie(
  fruit,
  names="name",
  values="number"
)

fig.update_traces(
  # 文本显示的4种位置:['inside', 'outside', 'auto', 'none']
  textposition='inside',   
  # percent、label、value的组合或者单独出现
  textinfo='percent+label',  
  # 文本信息的3种朝向:horizontal(默认)、radial、tangential
  insidetextorientation='horizontal'
)

fig.show()
2021-05-08
2021-05-08

5、甜甜圈图的绘制

甜甜圈图指的是饼图的中间出现了一个空洞部分:

import plotly.graph_objects as go

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [3000, 1500, 1000, 2500]

fig = go.Figure(data=[go.Pie(
    labels=labels, 
    values=values, 
    hole=.4   # 空洞的比例大小
)])

fig.show()
2021-05-08

6、剥离扇形区域

import plotly.graph_objects as go

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [3000, 1000, 4000, 2500]

fig = go.Figure(data=[go.Pie(
    labels=labels, 
    values=values, 
    pull=[0.3,0.1,0,0]  # 设置脱离参数
)])

fig.show()
2021-05-08

7、旭日图的制作

我们以Plotly中自带的tips消费数据来绘制旭日图:

2021-05-08
fig = px.sunburst(
  tips,
  path=['day','time','sex'],  # 最里层是day,中间是time,最外层是sex
  values='total_bill'
)

fig.show()
2021-05-08

给旭日图设置颜色:

df = px.data.tips()
fig = px.sunburst(
  df, 
  path=['time', 'sex', 'day'],  # 从最里层到最外层
  values='total_bill',   # 数据
  color='day'   # 颜色
)
fig.show()
2021-05-08

绘制面积图

使用的是Plotly中自带的gdp数据集:

2021-05-08
# area 图
px.area(
  gapminder,  # 数据集  
  x="year",  # xy轴的数据
  y="pop",
  color="continent",  # 颜色
  line_group="country"  # 线型分组
)
2021-05-08
image-20210508105829524

绘制直方图

px.histogram(
    tips,  # 绘图数据
    x="sex",  # 指定两个数轴
    y="tip",
    histfunc="avg",  # 直方图函数:均值
    color="smoker",  # 颜色取值
    barmode="group",  # 柱状图模式
    facet_row="time",  # 横纵纵轴的字段设置
    facet_col="day",
    category_orders={"day":["Thur","Fri","Sat","Sun"],  # 分类
                     "time":["Lunch","Dinner"]})
2021-05-08

联合分布图

联合分布图是将多个不同类型的图形放置在一个大的画布中,比如我们使用鸢尾花数据集绘制联合分布图:

px.scatter(
    iris,
    x="sepal_width",
    y="sepal_length",
    color="species",
    marginal_x="histogram",
    marginal_y="rug"
)
2021-05-08

绘制散点矩阵图

散点矩阵图是将多个散点图并排显示,同时显示不同指标之间的关系:

使用Plotly中自带的iris数据集:

2021-05-08
px.scatter_matrix(
  iris,  # 绘图数据
  dimensions=["sepal_width","sepal_length","petal_width","petal_length"],  # 不同的指标
  color="species"  # 颜色
)
2021-05-08

绘制密度图

第一种是绘制密度热力图:

px.density_heatmap(
  iris,
  x="sepal_width",
  y="sepal_length",
  marginal_y="rug",
  marginal_x="histogram"   # 在密度图的基础上,指定另外两种图形
)
2021-05-08

第二种是绘制等值线图:

px.density_contour(
  iris,  # 传入绘图数据
  x="sepal_width",  # 指定xy轴
  y="sepal_length",
  color="species",  # 颜色设置
  marginal_x="rug",  # 需要传入边缘图形
  marginal_y="histogram"   
)
2021-05-08

绘制并行分类图

使用的是餐厅消费数据tips

px.parallel_categories(
    tips,  # 传入数据
    color="size",  # 颜色取值
    color_continuous_scale=px.colors.sequential.Inferno # 颜色变化趋势
)
2021-05-08

绘制地图图形

第一种方法是通过px.choropleth

px.choropleth(
  gapminder,   # 绘图数据
  locations="iso_alpha",  # 位置
  color="lifeExp",  # 颜色
  hover_name="country",  # 悬停信息
  animation_frame="year",  # 播放按钮设置
  color_continuous_scale=px.colors.sequential.Plasma,  # 颜色连续变化
  projection="natural earth"  # 地图选择

2021-05-08

第二种方法是通过line_geo实现:

gapminder = px.data.gapminder()

# gapminder_2002 = gapminder.query("year==2002")

gapminder_2002 = gapminder[gapminder["year"] == 2002]
gapminder_2002

px.line_geo(
  gapminder_2002,
  locations="iso_alpha",
  color="continent",
  projection="orthographic")
2021-05-08

绘制矩阵式树状图

# 选取2002年数据
gapminder_2002 = gapminder[gapminder["year"] == 2002]

px.treemap(
    gapminder_2002, # 数据
    path=[px.Constant('world'), 'continent', 'country'],   # 绘图路径:world---continent---country
    values='pop',  # 数据取值
    color='pop',   # 颜色取值
    hover_data=['iso_alpha'])  # 显示数据:国家简称
2021-05-08

绘制散点极坐标图

使用的是Plotly中自带的风力wind数据集:

2021-05-08
px.scatter_polar(
    wind,  #  数据集
    r="frequency",  # 半径
    theta="direction",   # 角度
    color="strength",  # 颜色
    symbol="strength",  # 符号
    color_discrete_sequence=px.colors.sequential.Plasma_r)  # 颜色
2021-05-08

改变图形的背景主题再绘制一次:

fig = px.bar_polar(
    wind,   # 数据集
    r="frequency",   # 半径
    theta="direction",  # 角度
    color="strength",  # 颜色
    template="plotly_dark",  # 主题
    color_discrete_sequence=px.colors.sequential.Plasma_r)  # 颜色
fig.show()
2021-05-08

颜色面板

Plotly中内置了多种颜色面板可供用户使用,颜色可任意选择,下面进行介绍:

顺序色标系列

渐变的颜色系列,适用于大多数连续数据进行绘图:

px.colors.sequential.swatches()
2021-05-08

定性色标系列

该系列的颜色是离散型的,每个子颜色都不相同或者相近,适用于没有自然顺序的数据进行绘图:

px.colors.qualitative.swatches()
2021-05-08

分散色标系列

适合于具有自然中点的连续数据,色系会出现突变:

px.colors.diverging.swatches()
2021-05-08

周期性色标系列

该色标系列适用于具有自然周期结构的连续数据

px.colors.cyclical.swatches()
2021-05-08

ColorBrewer2系列

px.colors.colorbrewer.swatches()
2021-05-08

CMOcean系列

px.colors.cmocean.swatches()
2021-05-08

卡通主题系列

这是一个卡通系列的颜色面板,颜色是渐变型的

px.colors.carto.swatches()
2021-05-08

总结

本文着重讲解了一个新的高级可视化神器:Plotly。从其特点、安装、内置数据集、各种精美图表制作案例介绍、颜色面板等,详细地介绍了Plotly的使用,希望能够对读者有所帮助,也希望读者能够爱上这个高级可视化神器。

上一篇:深入解析String#intern


下一篇:Intern Day46 - 如何解决跨域问题