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]: