上一期咱们介绍《手把手教你用plotly绘制excel中常见的16种图表(上)》演示了8种常见图表,今天我们继续演示另外8种常见图表的绘制。
本次内容,同样回复0306即可获取全部演示代码和数据文件。
目录:
树状图提供数据的分层视图,并便于识别模式,例如哪些商品是商店的畅销商品。树分支表示为矩形,每个子分支显示为更小的矩形。树状图适合比较层次结构内的比例,但是不适合显示最大类别与各数据点之间的层次结构级别,后面的旭日图可更加直观地显示这些内容。
# 自带数据集 tips
import plotly.express as px
df = px.data.tips()
df.sample(5)
tips
基础的树状图
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()
树状图
树状热力图
# 自带数据集 gapminder
df = px.data.gapminder()
df.sample(5)
gapminder
# 绘制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()
树状热力图
旭日图非常适合显示分层数据,层次结构的每个级别均通过一个环或圆形表示,最内层的圆表示层次结构的顶级。不含任何分层数据(类别的一个级别)的旭日图与圆环图类似,但具有多个级别的类别的旭日图显示外环与内环的关系。旭日图在显示一个环如何被划分为作用片段时最有效,而另一种类型的分层图表树状图适合比较相对大小。
列表字典数据绘制旭日图
# 列表字典数据绘制旭日图
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类型数据下绘制 旭日图
# pd.Dataframe类型数据下绘制 旭日图
import plotly.express as px
df = px.data.tips()
fig = px.sunburst(df,
path=['day', 'time', 'sex'],
values='total_bill'
)
fig.show()
旭日图
旭日热力图
# 绘制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()
旭日热力图
直方图是显示频率数据的柱状图。
# 绘制total_bill直方图
import plotly.express as px
df = px.data.tips()
fig = px.histogram(df, x="total_bill")
fig.show()
直方图
自定义分组nbins
# 分组,参数nbins
import plotly.express as px
df = px.data.tips()
fig = px.histogram(df, x="total_bill",
nbins=20, # 分成20组
)
fig.show()
自定义分组nbins
离散分类直方图
# 如果对离散或分类特征数据进行直方图绘制,和柱状图差不多
import plotly.express as px
df = px.data.tips()
fig = px.histogram(df,
x="day", # day 是星期,是 分类 数据
)
fig.show()
离散分类下同柱状图
箱型图又称盒须图,用于显示数据到四分位点的分布,突出显示平均值和离群值。箱形可能具有可垂直延长的名为“须线”的线条。这些线条指示超出四分位点上限和下限的变化程度,处于这些线条或须线之外的任何点都被视为离群值。
# 箱型图,以total_bill字段绘制
import plotly.express as px
df = px.data.tips()
fig = px.box(df, y="total_bill")
fig.show()
单一箱线图
# 以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()
箱线图
瀑布图显示加上或减去值时的累计汇总,在理解一系列正值和负值对初始值(例如,净收入)的影响时,这种图表非常有用。
列采用彩色编码,可以快速将正数与负数区分开来。初始值和最终值列通常从水平轴开始,而中间值则为浮动列。由于拥有这样的“外观”,瀑布图也称为桥梁图。
在plotly.express
中暂时没有瀑布图,我们需要用到plotly.graph_objects
。
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()
瀑布图
漏斗图显示流程中多个阶段的值。
例如,可以使用漏斗图来显示游戏注册付费流程中每个阶段的潜在玩数。通常情况下,值逐渐减小,从而使条形图呈现出漏斗形状。
基础漏斗图
# 基础漏斗图
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类型数据操作绘制的情况
# 构建测试数据 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)
数据预览
import plotly.express as px
fig = px.funnel(df, x='number', y='stage', color='office')
fig.show()
对比漏斗图
以特定顺序排列在工作表的列或行中的数据可以绘制为股价图。
顾名思义,股价图可以显示股价的波动。不过这种图表也可以显示其他数据(如日降雨量和每年温度)的波动,必须按正确的顺序组织数据才能创建股价图。
在plotly.express
中暂时没有股价图,我们需要用到plotly.graph_objects
。
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()
数据预览
# 绘制简单的 股价图
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()
默认有滑块控件
取消滑块控件
# 去掉滑块控件
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()
去掉滑块控件
可使用地图图表比较值并跨地理区域显示类别。
数据中含有地理区域(如国家/地区、省/自治区/直辖市、县或邮政编码)时使用地图图表。
plotly的地图绘制形式有很多种,这里不做更详细的介绍,我们后续再找个时间详细讲解。
这里用此前《Python爬取贝壳找房8万+二手房源,看看普通人在北京买房是有多难!》里出现过的上海二手房经纬度
数据来进行地图点的绘制,这份数据大家也可以回复0306
获取。
import plotly.express as px
df = pd.read_excel(r'F:\PythonCool\可视化\上海二手房经纬度.xlsx')
df.head()
数据预览
# 绘制地图散点图
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可视化操作,建议直接前往官网查看案例做演示,真的很全哦。