前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
以下文章来源于可以叫我才哥 ,作者才哥
大家好,上次我们试着用vba在excel中绘制树状热力图,但是我在绘制全部4000+股票的时候等待1小时最终效果图还远没完成,那么咋办呢?
终于在最近学习plotly中,让我在高级图表里发现了treemap,居然可以很好地满足我的需求,大家看以下就是最终效果图,是不是很赞!

看这个图吧,我就又要哭了,我重仓了白酒啊!!希望快点涨涨涨吧!!!
目录:
- 1. 准备工作
- 2. 开始绘图
- 2.1. 简单的例子
- 2.2. px.treemap常用参数介绍
- 2.3. color_continuous_scale参数介绍
- 2.4. 大A股市树状热力图来了
- 2.5. plotly图片存本地
Python爬虫、数据分析、网站开发等案例教程视频免费在线观看
https://space.bilibili.com/523606542
Python学习交流群:1039649593
1. 准备工作
我这边是在jupyterlab中演示的plotly图表,如果只安装plotly是无法正常显示图表的(会显示为空白),我们需要进行以下准备(以下命令均在cmd下操作即可):
# 安装plotly库及plotly-orca库 pip install plotly pip install plotly plotly-orca # Basic JupyterLab renderer support jupyter labextension install jupyterlab-plotly # OPTIONAL: Jupyter widgets extension for FigureWidget support jupyter labextension install @jupyter-widgets/jupyterlab-manager plotlywidget
参考:
https://github.com/plotly/plotly.py
关于本文用到的数据呢,大家可以参考《python爬取股票最新数据并用excel绘制树状图》的爬虫代码自行爬取,或者公众号回复0302获取哈!
2. 开始绘图
Treemap绘制方式有两种,一种是在plotly.express下,一种是在go.Treemap下,我们这里用到的是前者。至于其中的区别,大概就是前者是高级版本,封装了很多后者的复杂操作,可以直接用pandas.Dataframe类型,是现在主推的。更多差异大家可自行在实践过程中感悟,毕竟才哥也说不太明白!
2.1. 简单的例子
plotly自带很多测试数据,我们用其中一个才试试简单的。
import plotly.express as px df = px.data.tips() df.head()

以上数据大致就是星期几什么餐不同性别的人支付的金额和小费数等,我们用1行代码绘制简单的treemap如下:
fig = px.treemap(df, path=['day', 'time', 'sex'], values='total_bill') fig.show()

可以看到在该树状图中,层级依次是在path中顺序的day、time和sex,而每个色块面积大小就是values给定的total_bill。鼠标悬停的时候,会出现更详细的信息,毕竟plotly是可交互式的,这里不展开哈。
那么,px.treemap究竟还可以做什么呢?我们继续往下看。
2.2. px.treemap常用参数介绍
让我们直接在jupyterlab用?来获取函数参数吧!
# px.treemap? # Signature: px.treemap( data_frame=None, # 就是你要用到的数据, names=None, # 暂时不用 values=None, # 就是你色块大小 parents=None, # 暂时也不用,和names组合出现吧 ids=None, # 暂时不用,后续暂时不用的字段我就不写啦 path=None, # 层级,依次排开 color=None, # 颜色,比如根据 涨跌幅字段来设置颜色 color_continuous_scale=None, # 自带的颜色尺卡,后面会介绍 range_color=None, # 颜色范围区间,超过就是两端值 color_continuous_midpoint=None, # 颜色尺卡最中间 的值,比如涨跌幅中间设置为 0 最合适 color_discrete_sequence=None, color_discrete_map=None, hover_name=None, hover_data=None, # 就是悬停时 显示字段及其格式 custom_data=None, # 额外的想显示的数据 labels=None, title=None, # 标题咯 template=None, width=None, # 图高 height=None, # 图长 branchvalues=None, maxdepth=None, )
对于更多参数的了解,大家可以自己 ? 后看哈,蛮详细的,就是纯英文的我自己看着要结合翻译软件也蛮累。
2.3. color_continuous_scale参数介绍
上面我们提到过该参数为 我们 treemap图色块颜色使用的色卡,具体有哪些可选以及这些可选项都是啥样呢?
我们在?里找到了方向:
color_continuous_scale: list of str Strings should define valid CSS-colors This list is used to build a continuous color scale when the column denoted by `color` contains numeric data. Various useful color scales are available in the `plotly.express.colors` submodules, specifically `plotly.express.colors.sequential`, `plotly.express.colors.diverging` and `plotly.express.colors.cyclical`.
我们在jupyterlab里调用里面提到的方法,很开心的发现了它们:
import plotly # 大家不要急,一个个来,我这里预览只截取了diverging的部分 plotly.express.colors.cyclical.swatches() plotly.express.colors.sequential.swatches() plotly.express.colors.diverging.swatches()

由于在我们国家,绿色代表跌,红色代表涨,寻觅了半天我选取了Geyser,当然大家亦可自行选择。

2.4. 大A股市树状热力图来了
基于以上的了解,发现差不多可以绘制图了,那么来吧!
import plotly.express as px fig = px.treemap(df, path=['板块', '企业名称',], # 指定层次结构,每一个层次都应该是category型的变量 values='市值(亿)', # 需要聚合的列名 color='涨幅', range_color = [-0.05, 0.05], # 色彩范围最大最小值 hover_data= {'涨幅':':.2%', '市值(亿)':':.2f'}, # 鼠标悬浮显示数据的格式 height = 1080, width = 1920, color_continuous_scale='Geyser', color_continuous_midpoint=0 , # 颜色变化中间值设置为增长率=0 ) fig.update_traces(textinfo='label+value',textfont = dict(size = 24)) # 显示企业名称和市值,字体24 fig.show()

2.5. plotly图片存本地
这里是指图片哦,不是html文件哈!
大家还记得我们在准备工作中 安装orca ,没事,不记得的话,重新装一下就行了。
pip install plotly plotly-orca
对于我们绘制好的plotly图表对象,以下方式可以进行本地保存。
import plotly.io as pio pio.write_image(fig, '树状云图png')
当然,要是觉得麻烦,其实你还可以直接点击图表最右上角的摄像头进行下载哈!
