如何解决altair:脚本中热图上的文本
我尝试遵循 "Text over a Heatmap" 的 altair 示例,但遇到了一些问题。
我的数据集由两个索引(N
、Z
)和一个值列 color
组成。
下面附上部分代码。
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'
)
我在我的数据集的几行下方粘贴了它,其中包含两个索引 Z
、N
和一个值列 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
解决方法
这是我使用 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'))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。