Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Doc] Add Arrow Vector Example #3236

Merged
merged 10 commits into from
Nov 12, 2023
42 changes: 42 additions & 0 deletions tests/examples_arguments_syntax/arrow_vector.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
"""
Arrow Vector
------------------------------
This example shows a basic vector plot use point mark ``triangle`` as shape,
ChiaLingWeng marked this conversation as resolved.
Show resolved Hide resolved
other shape options can be found in :ref:`Point Mark<user-guide-point-marks>`.
"""
# category: case studies
ChiaLingWeng marked this conversation as resolved.
Show resolved Hide resolved
import altair as alt
import numpy as np
import pandas as pd

vector1 = [0, 0, 3, -1]
vector2 = [0, 0, 2, 3]

v = pd.DataFrame([vector1, vector2], columns=['x1','y1','x2','y2'])

# calculate the vector
v['x_'] = v['x2'] - v["x1"]
v['y_'] = v['y2'] - v["y1"]

# calculate the angle between current vector and the default point mark direction (0,1)
# dot product = (x_,y_) dot (0,1) = y_
v["norm"] = np.sqrt(v['x_']**2 + v['y_']**2)
v["theta"] = np.degrees(np.arccos(v['y_']/v["norm"] ))


lines = alt.Chart(v).mark_line().encode(
x=alt.X("x1", scale=alt.Scale(domain=(-4, 4)), title='x'),
y=alt.Y("y1", scale=alt.Scale(domain=(-4, 4)), title='y'),
x2="x2",
y2="y2"
)

wedge = alt.Chart(v).mark_point(shape="triangle", filled=True).encode(
x="x2",
y="y2",
angle=alt.Angle("theta", scale=alt.Scale(domain=[0, 360])),
size=alt.value(300),
color=alt.value('#000000')
)

lines + wedge
46 changes: 46 additions & 0 deletions tests/examples_methods_syntax/arrow_vector.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"""
Arrow Vector
------------------------------
This example shows a basic vector plot use point mark ``triangle`` as shape,
other shape options can be found in :ref:`Point Mark<user-guide-point-marks>`.
"""
# category: case studies
import altair as alt
import numpy as np
import pandas as pd

vector1 = [0, 0, 3, -1]
vector2 = [0, 0, 2, 3]

v = pd.DataFrame([vector1, vector2], columns=['x1','y1','x2','y2'])

# calculate the vector
v['x_'] = v['x2'] - v["x1"]
v['y_'] = v['y2'] - v["y1"]

# calculate the angle between current vector and the default point mark direction (0,1)
# dot product = (x_,y_) dot (0,1) = y_
v["norm"] = np.sqrt(v['x_']**2 + v['y_']**2)
v["theta"] = np.degrees(np.arccos(v['y_']/v["norm"]))

lines = alt.Chart(v).mark_line().encode(
alt.X("x1")
.title('x')
.scale(domain=(-4, 4)),
alt.Y("y1")
.title('y')
.scale(domain=(-4, 4)),
alt.X2("x2"),
alt.Y2("y2")
)

wedge = alt.Chart(v).mark_point(shape="triangle", filled=True).encode(
alt.X("x2"),
alt.Y("y2"),
alt.Angle("theta")
.scale(domain=[0, 360]),
alt.SizeValue(300),
alt.ColorValue('#000000')
)

lines + wedge