如何将盒子形状的图层添加到牵牛星图中?
How do I add a layer in a shape of a box to an altair plot?
我正在尝试使用带坐标的 pandas 数据框添加一个用作 strikezone 的框,并将其传递给 altair。
box = pd.DataFrame()
box.loc[:,"x"] = [-0.5, 0.5, 0.5, -0.5]
box.loc[:,'y'] = [1.25, 1.25, 0.5, 0.5]
我试过以下方法:
g = alt.Chart(box.loc[0:1,:]).mark_line().encode(
x = 'x',
y = 'y')
d = alt.Chart(box.loc[1:2,:]).mark_line().encode(
x = 'x',
y = 'y')
e = alt.Chart(box.loc[2:3,:]).mark_line().encode(
x = 'x',
y = 'y')
f = alt.Chart(box.loc[3:4,:]).mark_line().encode(
x = 'x',
y = 'y')
g + d + e + f
我还想知道如何调整 x 轴和 y 轴,使框周围有一点边距?
我建议用一个折线图绘制所有四个边。然后,您可以使用 domain
比例参数来调整轴限制(请参阅 Altair 文档的 Adjusting Axis Limits 部分了解更多信息)。
这是一个例子:
import altair as alt
import pandas as pd
box = pd.DataFrame({
'x': [-0.5, 0.5, 0.5, -0.5, -0.5],
'y': [1.25, 1.25, 0.5, 0.5, 1.25]
}).reset_index()
alt.Chart(box).mark_line().encode(
alt.X('x', scale=alt.Scale(domain=(-1, 1))),
alt.Y('y', scale=alt.Scale(domain=(0, 1.5))),
order='index'
)
或者,您可以使用 rect
标记来避免必须以正确的顺序手动构建矩形的坐标:
box = pd.DataFrame({'x1': [-0.5], 'x2': [0.5], 'y1': [0.5], 'y2': [1.25]})
alt.Chart(box).mark_rect(fill='none', stroke='black').encode(
alt.X('x1', scale=alt.Scale(domain=(-1, 1))),
alt.Y('y1', scale=alt.Scale(domain=(0, 1.5))),
x2='x2',
y2='y2'
)
我正在尝试使用带坐标的 pandas 数据框添加一个用作 strikezone 的框,并将其传递给 altair。
box = pd.DataFrame()
box.loc[:,"x"] = [-0.5, 0.5, 0.5, -0.5]
box.loc[:,'y'] = [1.25, 1.25, 0.5, 0.5]
我试过以下方法:
g = alt.Chart(box.loc[0:1,:]).mark_line().encode(
x = 'x',
y = 'y')
d = alt.Chart(box.loc[1:2,:]).mark_line().encode(
x = 'x',
y = 'y')
e = alt.Chart(box.loc[2:3,:]).mark_line().encode(
x = 'x',
y = 'y')
f = alt.Chart(box.loc[3:4,:]).mark_line().encode(
x = 'x',
y = 'y')
g + d + e + f
我还想知道如何调整 x 轴和 y 轴,使框周围有一点边距?
我建议用一个折线图绘制所有四个边。然后,您可以使用 domain
比例参数来调整轴限制(请参阅 Altair 文档的 Adjusting Axis Limits 部分了解更多信息)。
这是一个例子:
import altair as alt
import pandas as pd
box = pd.DataFrame({
'x': [-0.5, 0.5, 0.5, -0.5, -0.5],
'y': [1.25, 1.25, 0.5, 0.5, 1.25]
}).reset_index()
alt.Chart(box).mark_line().encode(
alt.X('x', scale=alt.Scale(domain=(-1, 1))),
alt.Y('y', scale=alt.Scale(domain=(0, 1.5))),
order='index'
)
或者,您可以使用 rect
标记来避免必须以正确的顺序手动构建矩形的坐标:
box = pd.DataFrame({'x1': [-0.5], 'x2': [0.5], 'y1': [0.5], 'y2': [1.25]})
alt.Chart(box).mark_rect(fill='none', stroke='black').encode(
alt.X('x1', scale=alt.Scale(domain=(-1, 1))),
alt.Y('y1', scale=alt.Scale(domain=(0, 1.5))),
x2='x2',
y2='y2'
)