繁体   English   中英

如何强制Altair在特定轴上订购热图(矩形)?

[英]How to force Altair to order heatmap(rect) on a specific axis?

我正在尝试在Altair中创建聚类的热图。 创建热图效果很好,但是我无法根据另一列的值对行进行重新排序。

这是我使用seaborn创建热图的代码片段:

import pandas as pd
import numpy as np
import seaborn as sns
import altair as alt
import random

iris = sns.load_dataset("iris")
species = iris.pop("species")

# Clustermap for rows only
g = sns.clustermap(iris, col_cluster=False, cmap="magma")

# Get the reodered indices
reordered_indices = g.dendrogram_row.reordered_ind

# Create a dictionary to add this information to the longform dataframe later
reordering_dict = pd.Series(reordered_indices, index=iris.index.values).to_dict()

# Converting iris to tidyform
iris.reset_index(level=0, inplace=True)
iris_tidy = pd.melt(iris, id_vars=["index"], var_name="Paramaeter", value_name="value")

# Adding the ordering information
iris_tidy['order'] = iris_tidy['index'].map(reordering_dict)

结果是: 使用seaborn的Clustermap

现在,使用Altair尝试相同操作时:

# Plotting using Altair
alt.Chart(iris_tidy, width=500, height=500).mark_rect().encode(
    alt.X("Paramaeter:N", bin=False, sort=None),
    alt.Y("order:O", bin=False),
    alt.Color("value:Q", scale=alt.Scale(scheme="magma")),
    order=alt.Order("order:Q", sort="ascending"),
).configure_scale(bandPaddingInner=0).configure_view(strokeOpacity=0, stroke="transparent").configure_axisY(
    labels=False, ticks=False
).configure_axisX(
    labelAngle=0, ticks=False
)

给我这个: 使用Altair的热图

我相信我使用的alt.order()错误。 我假设要这样做的一种方法是使用顺序列order本身来定义Y轴-但我将松开与index相关的标签。

如果要控制Y轴类别的排序顺序,则可以使用y编码的sort属性。 例如:

# Plotting using Altair
alt.Chart(iris_tidy, width=500, height=500).mark_rect().encode(
    alt.X("Paramaeter:N", bin=False, sort=None),
    alt.Y("index:O", sort=alt.EncodingSortField(field='order', order='ascending')),
    alt.Color("value:Q", scale=alt.Scale(scheme="magma")),
).configure_scale(bandPaddingInner=0).configure_view(strokeOpacity=0, stroke="transparent")

在此处输入图片说明

这与seaborn输出不匹配,但是我相信这是因为计算的order列未反映seaborn图表中数据的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM