Diese sind entweder ein String oder Tuple von Strings, die die Namen der Werte-Dimensionen erhalten.
Sie werden in der Reihenfolge der Spalten in `data` gesetzt. Werden weitere Spalten in `data` mit übergeben, kann man sie über `vdims` dann auch benennen und über diese Namen später zugreifen.
```{code-cell}
```{code-cell} ipython3
x = np.linspace(-np.pi, np.pi, 100)
b = hv.Curve((x, np.sin(x)))
b
...
...
@@ -133,22 +134,21 @@ b
Die Spaltennamen sieht man dann auch in der Darstellung innerhalb des holoviews-Objektes:
```{code-cell}
```{code-cell} ipython3
b.data
```
oder in den Objekt-Attributen .kdims und .vdims:
```{code-cell}
```{code-cell} ipython3
b.kdims, b.vdims
```
```{code-cell}
```{code-cell} ipython3
b = hv.Curve((x, np.sin(x)), kdims='h', vdims='k')
b.data, b.kdims, b.vdims
```
### Optionen
Neben direkten Optionen, die für die Funktionsweise der Darstellung entscheidend sind, gibt es noch *stilistische* Optionen; diese ändern nur das Aussehen
...
...
@@ -179,7 +179,7 @@ hv.help(hv.holoviewsobject)
Die vollständige Liste für `Curve` gibt es dann mit
```{code-cell}
```{code-cell} ipython3
hv.help(hv.Curve)
```
...
...
@@ -188,7 +188,7 @@ schreiben wir die Optionen als ein dictionary-Objekt vorab auf. Dafür muss
dann der Typ der Grafik jeweils als key angegeben werden. Als value stehen
@@ -304,14 +305,14 @@ cos = hv.Curve((x, np.cos(x)),label="cosine").options(
Weiteres Beispiel mit den direkten Operatoren `+` und `*`;
hier reichen wir das holoviews-Objekt direkt weiter an die nächste Funktion:
```{code-cell}
```{code-cell} ipython3
sina = hv.Area(sin)
cosa = hv.Area(cos)
```
`alpha` $\in [0,1]$ Transparenz.
```{code-cell}
```{code-cell} ipython3
options = {'Area': dict(alpha=0.4)}
overlay = (cosa * sina).options(options)
...
...
@@ -337,7 +338,7 @@ die z.B. die Achsen über alle Plots hinweg koppeln.
*Beispiel*: Wir erzeugen uns einen größeren Satz von Kurven, den wir auf verschiedene Weise darstellen wollen. Wir nutzen hier den Sinus mit verschiedenen Frequenzen.
```{code-cell}
```{code-cell} ipython3
frequencies = np.linspace(0,3,10)
def sine_curve(freq):
...
...
@@ -347,13 +348,12 @@ def sine_curve(freq):
curve_dict = {f:sine_curve(f) for f in frequencies}
```
```{code-cell}
```{code-cell} ipython3
%%output size=60
hv.NdLayout(curve_dict, kdims=['frequency'])
```
```{code-cell}
```{code-cell} ipython3
hv.NdOverlay(curve_dict, kdims=['frequency'])
```
...
...
@@ -374,7 +374,7 @@ zeigt einen plot zur gleichen Zeit und gibt die Möglichkeit alle plots durch ei
Nehmen wir das Beispiel von eben und stecken es in
eine HoloMap.
```{code-cell}
```{code-cell} ipython3
frequencies = np.linspace(0,3,10)
def sine_curve(freq):
...
...
@@ -385,6 +385,7 @@ curve_dict = {f:sine_curve(f) for f in frequencies}
hv.HoloMap(curve_dict, kdims=['frequency'])
```
(dynamicmap)=
## Interaktion - DynamicMap
...
...
@@ -397,7 +398,7 @@ DynamicMap(func, **kwargs)
Erzeugen wir ein neues Beispiel:
```{code-cell}
```{code-cell} ipython3
xvals = np.linspace(0,5,100)
def sine_curve(freq):
...
...
@@ -409,7 +410,7 @@ dmap
Da erstmal nur eine Funktion übergeben wurde, ist ohne eine weitere Information, wie diese aufgerufen werden soll, nicht klar, was berechnet werden soll. Das geben wir der Map mit `redim`:
```{code-cell}
```{code-cell} ipython3
dmap.redim.range(frequency=(0,3))
```
...
...
@@ -428,7 +429,7 @@ Auswahl an Optionen (kwargs):
-`color=hv.dim('name')` : setzt die Farbe. Mit `hv.dim` kann die Farbgebung über den Spaltennamen `name` gesetzt werden. Es können beliebige Ausdrücke ausgewertet werden.
@@ -496,19 +496,19 @@ Die zweite Darstellung entspricht der üblichen Darstellung des Arrays als Matri
`np.ogrid` generiert Koordinaten, die der ersten Konvention entsprechen. Zum Darstellen mit `hv.Image` muss man daher hier die $y$-Achse spiegeln und transponieren.
```{code-cell}
```{code-cell} ipython3
hv.Image(np.flip(z, axis=1).T).options(options)
```
Eine weitere und oft bessere Option ist es, die Achsen explizit mit zu übergeben (als 1d-Arrays), wodurch der `np.flip`-Aufruf weggelassen werden kann. Transponiert werden muss allerdings immer noch:
Eigentlich sollten die Werte mit der Zeit größer werden, man sieht davon aber nichts. Wir sollten eine colorbar anschalten. Wir verwenden dafür wieder die .options Methode.
Hier sieht man, dass die Farbskala stets mit angepasst wird, weil es jedesmal ein neues Bild ist. Möchten wir ein konstantes Mapping der Farbe, geben wir ebenfalls durch `redim` der Map eine entsprechende Range: