前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你用plotly绘制excel中常见的16种图表(下)

手把手教你用plotly绘制excel中常见的16种图表(下)

作者头像
可以叫我才哥
发布2021-08-05 14:52:35
2.3K0
发布2021-08-05 14:52:35
举报
文章被收录于专栏:可以叫我才哥
大家好,我是才哥。

上一期咱们介绍《手把手教你用plotly绘制excel中常见的16种图表(上)》演示了8种常见图表,今天我们继续演示另外8种常见图表的绘制。

本次内容,同样回复0306即可获取全部演示代码和数据文件。

目录:

  • 1. 树状图
  • 2. 旭日图
  • 3. 直方图
  • 4. 箱形图
  • 5. 瀑布图
  • 6. 漏斗图
  • 7. 股价图
  • 8. 地图

1. 树状图

树状图提供数据的分层视图,并便于识别模式,例如哪些商品是商店的畅销商品。树分支表示为矩形,每个子分支显示为更小的矩形。树状图适合比较层次结构内的比例,但是不适合显示最大类别与各数据点之间的层次结构级别,后面的旭日图可更加直观地显示这些内容。

代码语言:javascript
复制
# 自带数据集 tips
import plotly.express as px

df = px.data.tips()
df.sample(5)

tips

基础的树状图

代码语言:javascript
复制
import plotly.express as px

df = px.data.tips()
df["all"] = "all" # in order to have a single root node
fig = px.treemap(df, 
                 path=['all', 'sex', 'day', 'time'], # 层级顺序 
                 values='total_bill', # 面积大小用total_bill字段决定
                )
fig.show()

树状图

树状热力图

代码语言:javascript
复制
# 自带数据集 gapminder
df = px.data.gapminder()
df.sample(5)

gapminder

代码语言:javascript
复制
# 绘制2007年各大洲各国家人口和人均寿命树状热力图
# 色块面积由人口决定,色块颜色由人均寿命决定
import plotly.express as px
import numpy as np

df= px.data.gapminder().query("year == 2007")
df["world"] = "world" # in order to have a single root node
fig = px.treemap(df, path=['world', 'continent', 'country'], values='pop',
                  color='lifeExp', hover_data=['iso_alpha'],
                  color_continuous_scale='RdBu',
                  color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
fig.show()

树状热力图

2. 旭日图

旭日图非常适合显示分层数据,层次结构的每个级别均通过一个环或圆形表示,最内层的圆表示层次结构的顶级。不含任何分层数据(类别的一个级别)的旭日图与圆环图类似,但具有多个级别的类别的旭日图显示外环与内环的关系。旭日图在显示一个环如何被划分为作用片段时最有效,而另一种类型的分层图表树状图适合比较相对大小。

列表字典数据绘制旭日图

代码语言:javascript
复制
# 列表字典数据绘制旭日图
import plotly.express as px

data = dict(
    character=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
    parent=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
    value=[10, 14, 12, 10, 2, 6, 6, 4, 4])

fig =px.sunburst(
    data,
    names='character',
    parents='parent',
    values='value',
)
fig.show()

旭日图

pd.Dataframe类型数据下绘制 旭日图

代码语言:javascript
复制
# pd.Dataframe类型数据下绘制 旭日图
import plotly.express as px

df = px.data.tips()
fig = px.sunburst(df, 
                  path=['day', 'time', 'sex'], 
                  values='total_bill'
                 )
fig.show()

旭日图

旭日热力图

代码语言:javascript
复制
# 绘制2007年各大洲各国家人口和人均寿命旭日热力图
# 色块面积由人口决定,色块颜色由人均寿命决定
import plotly.express as px
import numpy as np

df = px.data.gapminder().query("year == 2007")
fig = px.sunburst(df, path=['continent', 'country'], values='pop',
                  color='lifeExp', hover_data=['iso_alpha'],
                  color_continuous_scale='RdBu',
                  color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
fig.show()

旭日热力图

3. 直方图

直方图是显示频率数据的柱状图。

代码语言:javascript
复制
# 绘制total_bill直方图
import plotly.express as px

df = px.data.tips()
fig = px.histogram(df, x="total_bill")
fig.show()

直方图

自定义分组nbins

代码语言:javascript
复制
# 分组,参数nbins
import plotly.express as px

df = px.data.tips()
fig = px.histogram(df, x="total_bill", 
                   nbins=20, # 分成20组
                  )
fig.show()

自定义分组nbins

离散分类直方图

代码语言:javascript
复制
# 如果对离散或分类特征数据进行直方图绘制,和柱状图差不多
import plotly.express as px

df = px.data.tips()
fig = px.histogram(df, 
                   x="day", # day 是星期,是 分类 数据
                  )
fig.show()

离散分类下同柱状图

4. 箱型图

箱型图又称盒须图,用于显示数据到四分位点的分布,突出显示平均值和离群值。箱形可能具有可垂直延长的名为“须线”的线条。这些线条指示超出四分位点上限和下限的变化程度,处于这些线条或须线之外的任何点都被视为离群值。

代码语言:javascript
复制
# 箱型图,以total_bill字段绘制
import plotly.express as px

df = px.data.tips()
fig = px.box(df, y="total_bill")
fig.show()

单一箱线图

代码语言:javascript
复制
# 以time字段拆分,并用颜色区分
import plotly.express as px

df = px.data.tips()
fig = px.box(df, 
             x="time",  # 以 time字段拆分
             y="total_bill", 
             color = 'time', # time字段区分颜色
            )
fig.show()

箱线图

5. 瀑布图

瀑布图显示加上或减去值时的累计汇总,在理解一系列正值和负值对初始值(例如,净收入)的影响时,这种图表非常有用

列采用彩色编码,可以快速将正数与负数区分开来。初始值和最终值列通常从水平轴开始,而中间值则为浮动列。由于拥有这样的“外观”,瀑布图也称为桥梁图。

plotly.express中暂时没有瀑布图,我们需要用到plotly.graph_objects

代码语言:javascript
复制
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 2018",
        showlegend = True
)

fig.show()

瀑布图

6. 漏斗图

漏斗图显示流程中多个阶段的值。

例如,可以使用漏斗图来显示游戏注册付费流程中每个阶段的潜在玩数。通常情况下,值逐渐减小,从而使条形图呈现出漏斗形状。

基础漏斗图

代码语言:javascript
复制
# 基础漏斗图
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()

基础漏斗图

多漏斗图对比

这里我们演示直接从pd.Dataframe类型数据操作绘制的情况

代码语言:javascript
复制
# 构建测试数据 pd.Dataframe类型
import pandas as pd

stages = ["点击", "下载", "安装", "注册", "付费"]
df_mtl = pd.DataFrame(dict(number=[39, 27.4, 20.6, 11, 3], stage=stages))
df_mtl['office'] = '快手'
df_toronto = pd.DataFrame(dict(number=[52, 36, 18, 14, 5], stage=stages))
df_toronto['office'] = '抖音'
df = pd.concat([df_mtl, df_toronto], axis=0)

df.sample(5)

数据预览

代码语言:javascript
复制
import plotly.express as px

fig = px.funnel(df, x='number', y='stage', color='office')
fig.show()

对比漏斗图

7. 股价图

以特定顺序排列在工作表的列或行中的数据可以绘制为股价图。

顾名思义,股价图可以显示股价的波动。不过这种图表也可以显示其他数据(如日降雨量和每年温度)的波动,必须按正确的顺序组织数据才能创建股价图。

plotly.express中暂时没有股价图,我们需要用到plotly.graph_objects

代码语言:javascript
复制
import plotly.graph_objects as go

import pandas as pd
from datetime import datetime

# 获取案例数据
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
df.head()

数据预览

代码语言:javascript
复制
# 绘制简单的 股价图
import plotly.graph_objects as go

fig = go.Figure(data=[go.Candlestick(x=df['Date'],
                open=df['AAPL.Open'],
                high=df['AAPL.High'],
                low=df['AAPL.Low'],
                close=df['AAPL.Close'])])
fig.show()

默认有滑块控件

取消滑块控件

代码语言:javascript
复制
# 去掉滑块控件
import plotly.graph_objects as go

fig = go.Figure(data=[go.Candlestick(x=df['Date'],
                open=df['AAPL.Open'], high=df['AAPL.High'],
                low=df['AAPL.Low'], close=df['AAPL.Close'])
                     ])
fig.update_layout(xaxis_rangeslider_visible=False)
fig.show()

去掉滑块控件

8. 地图

可使用地图图表比较值并跨地理区域显示类别。

数据中含有地理区域(如国家/地区、省/自治区/直辖市、县或邮政编码)时使用地图图表。

plotly的地图绘制形式有很多种,这里不做更详细的介绍,我们后续再找个时间详细讲解。

这里用此前《Python爬取贝壳找房8万+二手房源,看看普通人在北京买房是有多难!》里出现过的上海二手房经纬度数据来进行地图点的绘制,这份数据大家也可以回复0306获取。

代码语言:javascript
复制
import plotly.express as px

df = pd.read_excel(r'F:\PythonCool\可视化\上海二手房经纬度.xlsx')
df.head()

数据预览

代码语言:javascript
复制
# 绘制地图散点图
import plotly.express as px

fig = px.scatter_mapbox(df, lat="纬度", lon="经度",
                        color='均价',
                        color_discrete_sequence=["均价"], 
                        color_continuous_scale='Reds',
                        range_color = [30000, 150000],
                        zoom=8, 
                        height=800)
fig.update_layout(mapbox_style="open-street-map") # 开启街道网格
fig.show()

地图

以上就是本期的全部内容,如果大家想更加深入了解plotly可视化操作,建议直接前往官网查看案例做演示,真的很全哦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 可以叫我才哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 树状图
  • 2. 旭日图
  • 3. 直方图
  • 4. 箱型图
  • 5. 瀑布图
  • 6. 漏斗图
  • 7. 股价图
  • 8. 地图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档