在 Alt HConcat 中,是否可以为每个单独定义 strokeWidth (即不使用 configure_* ,它只能应用于顶级)?

In Alt HConcat , is it possible to define strokeWidth individually for each (i.e. not use configure_* , which can only be applied to Top level)?

我需要一个包含多个 small-multiples/mini 图表的左侧分面图表(使用 mark_rect)。在右侧,我想使用 mark_text 按标题标记它们。 使用 (left | right) 串联工作正常,但是我需要从 mark_text

中删除视图中的框

描述我的示例代码如下:

import altair as alt
import pandas as pd

df = pd.DataFrame(
[['BookA',0,'Hello',3],
['BookA',0,'World',1],
['BookA',1,'Hello',1],
['BookA',1,'World',0],
['BookA',2,'Hello',4],
['BookA',2,'World',2],
['BookB',0,'Hello',0],
['BookB',0,'World',0],
['BookB',1,'Hello',2],
['BookB',1,'World',3],
['BookC',0,'Hello',1],
['BookC',0,'World',0],
['BookC',1,'Hello',1],
['BookC',1,'World',2],
['BookC',2,'Hello',3],
['BookC',2,'World',4],
['BookC',3,'Hello',0],
['BookC',3,'World',0],
], columns = ['title','line','var','val']
)

base = alt.Chart(df)

#    Left chart containing heatmap
left = base.mark_rect().encode(
    x=alt.X('line:O',axis=alt.Axis(tickSize=0,labels=False,title="",domain=False)),
    y=alt.Y('var:O',axis=alt.Axis(tickSize=0,title="",labelFontSize = 12,labelPadding = 6,domain=False)),
    color= alt.Color('val:O',scale=alt.Scale(scheme="blues"),legend=None),
    facet=alt.Facet('title:N', columns=1,header=alt.Header(labelExpr="''",labelOrient="right",title=""))
    ).resolve_scale(
    x='independent' #Make each plot have scale of x-axis only as per desired length
    ).properties(height = 50)
    
#    Right chart containing Book title
right = base.mark_text(strokeOpacity = 1, 
                                                dx= 300, #Added to shift by right
                                                fontSize = 14,fontWeight = 'normal', baseline='top').encode(
    text = alt.Text('title'),
    facet=alt.Facet('title:N', columns=1,header=alt.Header(labelExpr="''",labelOrient="right",title=""))
    ).properties(height = 51)

(left | right).configure_view(stroke='black',strokeWidth=2)

理想情况下,我想删除出现在中间的黑色边框框。如果我在 configure_view 中设置 strokeWidth = 0,它会影响下图中的 left 可视化,这是我不希望的。

您可以手动编辑图表对象的属性,而不是使用 configure_view 方法。这意味着您可以将它添加到图表字典的 view 属性 而不是使用 config.view (不确定这是否会产生副作用):

left.view = {}
left.view['stroke'] = 'black'
left.view['strokeWidth'] = 3
(left | right).configure_view(stroke=None)

另请注意,如果您使用 alt.hconcat,则有一个 padding 参数可以实现您现在使用 dx 所做的事情,请注意您的实际情况是否有优势案例,但它的目的是分离连接的地块,因此通常可能有用。