在 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
所做的事情,请注意您的实际情况是否有优势案例,但它的目的是分离连接的地块,因此通常可能有用。
我需要一个包含多个 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
所做的事情,请注意您的实际情况是否有优势案例,但它的目的是分离连接的地块,因此通常可能有用。