牵牛星:脚本中热图上的文本

2024-06-17 05:58:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图仿效牛郎星的例子"Text over a Heatmap",但遇到了一些问题

我的数据集由两个索引(NZ)和一个值列color组成

  1. 我想在左下方设置原点
  2. 如何在脚本中显示带有文本的热图
  3. 是否可以在每个像素中放置标签(NZ

下面附上代码的一部分

def chart_altair(self):
    import altair as alt
    data = self.df.dropna().reset_index(name='color')

    # Configure common options
    base = alt.Chart(data).encode(
        alt.X('N:O'),
        alt.Y('Z:O'),
    )

    # Configure heatmap
    heatmap = base.mark_rect().encode(
        color=alt.Color(
            'color:Q',
            scale=alt.Scale(scheme='viridis'),
            legend=alt.Legend()
        )
    )

    text = base.mark_text(baseline='middle').encode(
        text='color:Q'
    )

我将数据集的几行粘贴到下面,数据集由两个索引ZN和一个值列color(实际上代表一个原子质量表)组成。“热图”应该类似于原子核图,中子数增加到右x轴,质子数增加到y轴向上。然而,质子数在相反方向上增加(在负y轴上)

  Z   N  color
  0   1   8.07
  1   0   7.29
  1   1  13.14
  1   2  14.95
  2   1  14.93
  1   3  24.62
  2   2   2.42
  3   3  14.09
  4   2  18.38
  2   5  26.07
  3   4  14.91
  4   3  15.77
  5   2  27.68

Tags: 数据textselfdatabaseconfigurealtencode
1条回答
网友
1楼 · 发布于 2024-06-17 05:58:35

下面是一个示例,其中我使用transform_calculate连接两个标签。您也可以通过在pandas中创建标签列来实现这一点

import altair as alt
import numpy as np
import pandas as pd

# Compute x^2 + y^2 across a 2D grid
x, y = np.meshgrid(range(-5, 5), range(-5, 5))
z = x ** 2 + y ** 2

# Convert this grid to columnar data expected by Altair
source = pd.DataFrame({'x': x.ravel(),
                     'y': y.ravel(),
                     'z': z.ravel()})

heatmap = alt.Chart(source).mark_rect().encode(
    x='x:O',
    y='y:O',
    color='z:Q'
)

heatmap + heatmap.mark_text().transform_calculate(label = '"" + datum.x + datum.y').encode(
    text='label:N',
    color=alt.value('black'))

enter image description here

相关问题 更多 >