有没有办法将 SVG 路径编码为点形状?
Is there a way to encode SVG paths as a point shape?
我想为我在 Altair 绘图上绘制的每个点设置一个编码的 SVG 路径。假设我有一个点列表:
points = [p1, p2, p3, ..., pn]
每个点定义为:
p1 = {
'x': x1,
'y': y1,
'svg_path': 'M x1 y1 C x1c y1c, x2c y2c, x2 y2'
}
我希望将这些路径中的每一条绘制在牛郎星图表上,如下所示:
alt.Chart(points).mark_point().encode(
x='x:Q',
y='y:Q',
shape='shape:N'
)
这给出了每个点的分类形状。是否可以在编码中使用字符串作为形状,这样每个点都可以有不同的 svg 路径?
您可以通过将形状设置为包含 SVG 路径的列并设置 scale=None
来执行此操作,这会导致直接使用原始值。这是一个简短的例子:
import pandas as pd
import altair as alt
df = pd.DataFrame({
'x': [0],
'y': [0],
'svg_path': ['M1.7 -1.7h-0.8c0.3 -0.2 0.6 -0.5 0.6 -0.9c0 -0.6 -0.4 -1 -1 -1c-0.6 0 -1 0.4 -1 1c0 0.4 0.2 0.7 0.6 0.9h-0.8c-0.4 0 -0.7 0.3 -0.7 0.6v1.9c0 0.3 0.3 0.6 0.6 0.6h0.2c0 0 0 0.1 0 0.1v1.9c0 0.3 0.2 0.6 0.3 0.6h1.3c0.2 0 0.3 -0.3 0.3 -0.6v-1.8c0 0 0 -0.1 0 -0.1h0.2c0.3 0 0.6 -0.3 0.6 -0.6v-2c0.2 -0.3 -0.1 -0.6 -0.4 -0.6z'],
})
alt.Chart(df).mark_point().encode(
alt.X('x'),
alt.Y('y'),
alt.Shape('svg_path', scale=None)
)
我想为我在 Altair 绘图上绘制的每个点设置一个编码的 SVG 路径。假设我有一个点列表:
points = [p1, p2, p3, ..., pn]
每个点定义为:
p1 = {
'x': x1,
'y': y1,
'svg_path': 'M x1 y1 C x1c y1c, x2c y2c, x2 y2'
}
我希望将这些路径中的每一条绘制在牛郎星图表上,如下所示:
alt.Chart(points).mark_point().encode(
x='x:Q',
y='y:Q',
shape='shape:N'
)
这给出了每个点的分类形状。是否可以在编码中使用字符串作为形状,这样每个点都可以有不同的 svg 路径?
您可以通过将形状设置为包含 SVG 路径的列并设置 scale=None
来执行此操作,这会导致直接使用原始值。这是一个简短的例子:
import pandas as pd
import altair as alt
df = pd.DataFrame({
'x': [0],
'y': [0],
'svg_path': ['M1.7 -1.7h-0.8c0.3 -0.2 0.6 -0.5 0.6 -0.9c0 -0.6 -0.4 -1 -1 -1c-0.6 0 -1 0.4 -1 1c0 0.4 0.2 0.7 0.6 0.9h-0.8c-0.4 0 -0.7 0.3 -0.7 0.6v1.9c0 0.3 0.3 0.6 0.6 0.6h0.2c0 0 0 0.1 0 0.1v1.9c0 0.3 0.2 0.6 0.3 0.6h1.3c0.2 0 0.3 -0.3 0.3 -0.6v-1.8c0 0 0 -0.1 0 -0.1h0.2c0.3 0 0.6 -0.3 0.6 -0.6v-2c0.2 -0.3 -0.1 -0.6 -0.4 -0.6z'],
})
alt.Chart(df).mark_point().encode(
alt.X('x'),
alt.Y('y'),
alt.Shape('svg_path', scale=None)
)