Altair-Beispiel¶
In Altair wird direkt die pattern-Funktionalität der SVG benutzt. Hier wird über die ID ein Pattern aus den SVG-defs ausgewählt.
1. Importe¶
Wir benötigen die Funktion display_html von IPython, um die SVGs inline in HTML integrieren zu können, damit sie später als Pattern in Altair verwendet werden können.
[1]:
from IPython.display import display_html
2. Einlesen und Dekodieren der SVG-Muster¶
Anschließend rufen wir die Funktion für unsere SVG auf und integrieren die Pattern in das HTML.
[2]:
def read_svg(svg_path):
with open(svg_path, "rb") as svg_file:
svg = svg_file.read().decode("utf-8")
return svg
display_html(
read_svg("../../../_static/pattern/cusypattern.svg"),
raw=True
)
3. pandas DataFrame für die Bereitstellung der Daten¶
[3]:
import altair as alt
import pandas as pd
data = pd.DataFrame({
"category": ["Purple", "Teal", "Orange", "Blue", "Red", "Cyan", "Magenta", "Green"],
"value": [90, 80, 50, 55, 50, 60, 40, 80],
"pattern": [
"pattern_0",
"pattern_1",
"pattern_2",
"pattern_3",
"pattern_4",
"pattern_5",
"pattern_6",
"pattern_7"
]
})
4. x- und y-Achsen definieren¶
Die x-Achse soll aus den Kategorien bestehen, die y-Achse aus den zugehörigen Werten.
Für altair.Fill wird die ID des jeweiligen SVG-Muster verwendet, um die Füllung festzulegen.
[4]:
chart = alt.Chart(data, title="cusy Pattern Example", width=600, height=400).mark_bar(stroke=None).encode(
x=alt.X("category:N",
sort=["Purple", "Teal", "Orange", "Blue", "Red", "Cyan", "Magenta", "Green"],
axis=alt.Axis(title=None, labelAngle=0)),
y=alt.Y("value:Q", axis=alt.Axis(title=None)),
fill=alt.Fill("pattern:N",
scale=alt.Scale(
range=[
"url(#dotspattern)",
"url(#caretpattern)",
"url(#trianglepattern)",
"url(#spiralpattern)",
"url(#crosspattern)",
"url(#diamondpattern)",
"url(#squarepattern)",
"url(#tristarpattern)",
]
),
legend=None)
)
5. svg-Backend auswählen¶
[5]:
alt.renderers.set_embed_options(renderer='svg')
chart
[5]: