我又用Python爬取了4000+股票数据,并用plotly绘制了树状热力图(treemap)


大家好,上次我们试着用 vba在excel中绘制树状热力图,但是我在绘制全部4000+股票的时候等待1小时最终效果图还远没完成,那么咋办呢?

终于在最近学习plotly中,让我在高级图表里发现了treemap,居然可以很好地满足我的需求,大家看以下就是最终效果图,是不是很赞!

3月2日大A头部公司股价又绿晕了啊

看这个图吧,我就又要哭了,我重仓了白酒啊!!希望快点涨涨涨吧!!!

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()

px.data.tips()

以上数据大致就是星期几什么餐不同性别的人支付的金额和小非数等,我们用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()

diverging

由于在我们国家,绿色代表跌,红色代表涨,寻觅了半天我选取了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')

当然,要是觉得麻烦,其实你还可以直接点击图表最右上角的摄像头进行下载哈!

点击下载图片

那么,以上就是本次全部内容,大家想了解更多可以直接官方网站研究,教程案例还是蛮详细,多折腾捣鼓效果更佳!

参考:https://plotly.com/python/treemaps/#

写在最后,如果喜欢的话关注一下才哥吧,爱你! 顺手点个在看也是不错的呢~

在这里插入图片描述

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
树形图是一种用来展示层级结构数据的图表,它通过使用矩形方块来表示不同层级的数据,并且这些方块之间存在着父子关系。树形图在可视化数据时具有很大的优势,特别是对于展示层级结构和比例关系时非常有用。 在Python中,可以使用Pyecharts库来创建树形图。Pyecharts是基于JavaScript开发的商业级数据图表库,提供了丰富的图表类型和可定制的图表样式。 为了创建树形图,你首先需要导入Pyecharts库,并创建一个Tree对象。然后,你可以通过调用add方法来添加数据节点,每个节点都可以有一个父节点和多个子节点。最后,你可以调用render方法生成图表。 以下是一个用Python创建树形图的示例代码: ```python from pyecharts import options as opts from pyecharts.charts import Tree data = [ {"name": "A", "value": 10, "children": [ {"name": "B", "value": 5, "children": [ {"name": "C", "value": 2}, {"name": "D", "value": 3} ]}, {"name": "E", "value": 5} ]} ] tree = ( Tree() .add("", data) .set_global_opts(title_opts=opts.TitleOpts(title="Tree Chart")) ) tree.render("tree_chart.html") ``` 以上代码创建了一个树形图,其中根节点为A,它有两个子节点B和E,B节点又有两个子节点C和D。每个节点都有一个名称和一个数值。 你可以根据自己的数据结构和需求修改示例代码,并根据需要进行图表样式的定制化。最后,你可以通过调用render方法将图表保存为HTML文件或显示在Jupyter Notebook中。 这就是使用Python创建树形图的一种方法。希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python 数据可视化:treemap 树形图 饼图升级版超详解,体现占比的同时显示出数量(放入自写库,一行代码...](https://blog.csdn.net/weixin_43329700/article/details/104339588)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Pyecharts一文速学-绘制树形图实例+Python代码](https://blog.csdn.net/master_hunter/article/details/127496849)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值