pyecharts第二步—HeatMap

日更?高产似那啥,今儿我们又开始新的一篇了嗷!!!赶快准备好小板凳,带上瓜子花生,准备发车了。

看今日的标题HeatMap大家可能就直到今儿要画什么图了。没错就是那个热力图!其实热力图不管是在生活中,还是在平常的数据分析处理中我们都经常可以看到

例如我们上一次画的那个Calendar图中,其实也加入了HeatMap:

r语言 heatmap变成正方形_echarts


又或者是有关温度的热力图,所以对于热力图来说,我们其实已经很常见了,那我们怎么自己去画出来自己想要的热力图,就是今儿的正菜咯

HeatMap前置工作

既然上面已经给大家看了一下大概的HeatMap效果,那我们就要来看看如何去创建HeatMap了。
既然HeatMap是pyecharts里面东西,那我们肯定是要导入相对应的包了

from pyecharts.charts import HeatMap
from pyecharts import options as opts
import random

别人为什么有个奇奇怪怪的random,因为因为懒得找数据了

r语言 heatmap变成正方形_python_02


原神,启动!好了好了,好像又混进来了什么奇奇怪怪的东西。

既然有了random的加入,我们就开始创建我们的数据了

value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]

这个是pyecharts中文文档中给出的样例代码,依旧是list省略形式的for循环语句,如果大家比较熟悉的话自行使用,当然不太熟的话小编也会给出便于理解的代码形式。

r语言 heatmap变成正方形_echarts_03

value1 = []
for i in range(24):
    for j in range(7):
        value1.append([i, j, random.randint(0, 50)])

大致的数据就是差不多处理完了,但是还剩下一个横纵坐标轴的设置了

hours = [
    "12a",
    "1a",
    "2a",
    "3a",
    "4a",
    "5a",
    "6a",
    "7a",
    "8a",
    "9a",
    "10a",
    "11a",
    "12p",
    "1p",
    "2p",
    "3p",
    "4p",
    "5p",
    "6p",
    "7p",
    "8p",
    "9p",
    "10p",
    "11p",
]
days = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]

这个比较冗杂,也可以使用for循环去进行添加,或者根据具体实际来进行设置,这就是绘制热力图的所有前置工作了,我们就可以端上我们的正菜了。

HeatMap的方法属性介绍

我们就先不直接给出代码了,我们先根据pyecharts中文文档中的代码先讲解,然后我们再来给出实际代码

初始化HeatMap

根据pyecharts中文文档给出的代码是这样的

class HeatMap(
    # 初始化配置项,参考 `global_options.InitOpts`
    init_opts: opts.InitOpts = opts.InitOpts()
)

在这里我们就碰到了我们的老朋友init_opts属性了,那我们就再回顾一下init_opts吧

class InitOpts(
    # 图表画布宽度,css 长度单位。
    width: str = "900px",

    # 图表画布高度,css 长度单位。
    height: str = "500px",

    # 图表 ID,图表唯一标识,用于在多图表时区分。
    chart_id: Optional[str] = None,

    # 渲染风格,可选 "canvas", "svg"
    # # 参考 `全局变量` 章节
    renderer: str = RenderType.CANVAS,

    # 网页标题
    page_title: str = "Awesome-pyecharts",

    # 图表主题
    theme: str = "white",

    # 图表背景颜色
    bg_color: Optional[str] = None,

    # 远程 js host,如不设置默认为 https://assets.pyecharts.org/assets/"
    # 参考 `全局变量` 章节
    js_host: str = "",

    # 画图动画初始化配置,参考 `global_options.AnimationOpts`
    animation_opts: Union[AnimationOpts, dict] = AnimationOpts(),
)

这都是截取上次Calendar的文案,小编太懒了

r语言 heatmap变成正方形_数据_04

在这里我么依旧需要注意的是什么呢?init_opts中的三个属性

  • width:这是来设置图表的宽度的,可以使用px, rpx, %至于这三个的具体是啥,可以参考上一次的blog嗷~也可以去看看html的一堆东西
  • height:这是来设置图表的高度的,可以使用px, rpx, %至于这三个的具体是啥,也可以参考上一次的blog嗷~也可以去看看html的一堆东西
  • bg_color:这个是用于设置背景的颜色的,可以使用十六进制来赋值,例如#ffffff,也可以使用rgb来进行设置,例如rgb![请添加图片描述]() (0,0,0)

这就是init_opts中常见的三个属性,剩余的会与html渲染有关,但是我们最后是想着下载图片,所以其他的我们就暂时步过多的讲解。

下面就给出小编的代码(仅供参考!!!!!!)

heatmap = HeatMap(init_opts=opts.InitOpts(width='1000px', height='400px', bg_color='(0,0,0)'))

至此!初始化就讲解完毕咯!!!

HeatMap的add_xaxis以及add_yaxis

不知道为什么,在pyecharts的中文文档中,HeatMap这里面没有add_xaxis,但是在其给的样例代码中却包含了add_xaxis这个方法,所以小编在这里还是讲解一下

其实可能是因为HeatMap中的add_xaxis和add_yaxis过于的相似了,所以考虑了一下我们仅讲一个,也就是和pyecharts中文文档对应只讲解一下add_yaxis函数

def add_yaxis(
    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
    series_name: str,

    # Y 坐标轴数据
    yaxis_data: types.Sequence[types.Union[opts.HeatMapItem, dict]],

    # 系列数据项
    value: types.Sequence[types.Union[opts.HeatMapItem, dict]],

    # 是否选中图例
    is_selected: bool = True,

    # 使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。
    xaxis_index: Optional[Numeric] = None,

    # 使用的 y 轴的 index,在单个图表实例中存在多个 y 轴的时候有用。
    yaxis_index: Optional[Numeric] = None,

    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 标记点配置项,参考 `series_options.MarkPointOpts`
    markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,

    # 标记线配置项,参考 `series_options.MarkLineOpts`
    markline_opts: Union[opts.MarkLineOpts, dict, None] = None,

    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)

我们常用的有series_name,yaxis_data,value

  • series_name:这是这一组数据所对应的名字,例如这个数据是时间,温度等等,但是热力图似乎对于这个没有太多的需求,所以我们后面都是使用空字符串去设置(注意!!!
  • yaxis_data:这个就是设置y轴的数据,可以对比与坐标轴的纵坐标等等,而对于add_xaxis是通过设置xaxis_data来设置x轴的数据。
  • value:这个就是我们的数据内容了,数据使用的是list属性,而list中的元素也是list类型,元素的基本都是[i,j,value]

后面当然还有mark类型的的元素,例如markpointmarkline,这两个我们在之后折线图的时候再来细讲(因为小编也只在折线图里面用过

r语言 heatmap变成正方形_r语言 heatmap变成正方形_05

r语言 heatmap变成正方形_配置项_06


这是设置HeatMap的方法和属性,我们还有全局设置,我们在下面看看属性

  • title_opts:这是设置标题的属性,当然也有副标题可以设置
  • visualmap_opts:这个是范围图表,在之前的Calendar有部分的讲解,大家感兴趣的可以移步到Calendar那一个推文

r语言 heatmap变成正方形_配置项_07


那我们就给出以下最后的代码然后大概讲解以下吧~

python代码给出及讲解

from pyecharts.charts import HeatMap
from pyecharts import options as opts
import random

value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]

# value1 = []
# for i in range(24):
#     for j in range(7):
#         value1.append([i, j, random.randint(0, 50)])
hours = [
    "12a",
    "1a",
    "2a",
    "3a",
    "4a",
    "5a",
    "6a",
    "7a",
    "8a",
    "9a",
    "10a",
    "11a",
    "12p",
    "1p",
    "2p",
    "3p",
    "4p",
    "5p",
    "6p",
    "7p",
    "8p",
    "9p",
    "10p",
    "11p",
]
days = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]
heatmap = HeatMap(init_opts=opts.InitOpts(width='1000px', height='400px', bg_color='rgb(255,255,255)'))
heatmap.add_xaxis(xaxis_data=hours)
heatmap.add_yaxis(series_name='',
                  yaxis_data=days,
                  value=value,
                  label_opts=opts.LabelOpts(is_show=True,
                                            position='inside'))
heatmap.set_global_opts(
    title_opts=opts.TitleOpts(title='第一个HeatMap'),
    visualmap_opts=opts.VisualMapOpts(),
    tooltip_opts=opts.TooltipOpts(trigger="axis"),
    toolbox_opts=opts.ToolboxOpts(is_show=True),
)
heatmap.render()

现在就开始来讲以下这里的代码咯~
在开始创建heatmap对象之前都是数据的创建,就不再多进行赘述
下面就是讲heatmap后面的设置

  • heatmap创建的时候设置init_opts
  • add_xaxis设置横坐标
  • add_yaxis设置纵坐标,在这里还有设置value数值,还有series_name,当然series_name如上文所说,不能不设置,这是必设置的,但是可以设置空字符串,还有一个label_opts,这个就是上述样例图中每个表格中的数字,is_show就是设置是否展示。
  • set_global_opts设置全局,例如title_opts设置标题,visualmap_opts设置视觉映射,当然还有我们之前的老朋友就是tooltip_optstoolbos_opts这两个是我们下载图表的重要东西,无论是否需要下载都可以进行设置,比较html的交互会更好

所以今儿的博客就到这里结束咯,如果有什么疑问,欢迎评论嗷。