1 Formatowanie tabel w
pakiecie gt
Zaczniemy od załadowania pakietu gt oraz
dplyr. Możliwe, że pakiet gt trzeba
zainstalować jednorazowo w znany sposób.
Podstawy dotyczące formatowania tabel w pakiecie gt
znajdziemy na stronie:
W powyższym tutorialu autorzy korzystają z operatora
|> mającego takie same działanie jak znany z
dplyr operator %>%.
1.1 Zadanie - podstawy
gt()
Do zadania wykorzystamy pierwsze 10 wierszy wbudowanej w R ramki
danych iris, tj.
Sepal.Length
Sepal.Width
Petal.Length
Petal.Width
Species
5.1
3.5
1.4
0.2
setosa
4.9
3.0
1.4
0.2
setosa
4.7
3.2
1.3
0.2
setosa
4.6
3.1
1.5
0.2
setosa
5.0
3.6
1.4
0.2
setosa
5.4
3.9
1.7
0.4
setosa
4.6
3.4
1.4
0.3
setosa
5.0
3.4
1.5
0.2
setosa
4.4
2.9
1.4
0.2
setosa
4.9
3.1
1.5
0.1
setosa
Następnie, wykorzystując tutorial, należy (nie koniecznie po
kolei):
zmienić tytuł i podtytuł tabeli na własny,
dodać źródło,
dodać odnośnik do wybranego elementu tabeli,
pogrupować kolumny działki kielicha i płatka,
przenieść kolumnę z gatunkiem na początek,
nadać kolumną własne, polskie nazwy.
Efekt końcowy powinien przypominać tabelkę wyglądającą jak niżej:
Przykładowy efekt
Ramka iris
dane wbudowane w R
Gatunek
Działka kielicha
Płatek
Długość
Szerokość
Długość
Szerokość
setosa
5.1
3.5
1.4
0.2
setosa
4.9
3.0
1.4
0.2
setosa
4.7
1 3.2
1.3
0.2
setosa
4.6
3.1
1.5
0.2
setosa
5.0
3.6
1.4
0.2
setosa
5.4
3.9
1.7
0.4
setosa
4.6
3.4
1.4
0.3
setosa
5.0
3.4
1.5
0.2
setosa
4.4
2.9
1.4
0.2
setosa
4.9
3.1
1.5
0.1
Źródło: R
1 Mój ulubiony wiersz
1.2 Zadanie - format
liczb i kolory
Zaczniemy od pobrania pliku RK4.csv ze strony przedmiotu
oraz wczytaniu danych. Plik ten zawiera wyniki eksperymentów
numerycznych - metody Rungego - Kutty rzędu 4 zastosowanej do wybranego
równania różniczkowego zwyczajnego. Jest to pewne rozwinięcie schematu
Eulera omawianego w Laboratorium 1. Kolejne kolumny oznaczają:
no. - kolejny numer, N - liczba kroków,
h - długość kroku, error - błąd mierzony jako
różnica między wynikiem z metody a rozwiązaniem dokładnym,
q - iloraz błędów, p \(=\log_2 (q)\) numeryczny rząd zbieżności
metody (dobrze żeby był w przybliżeniu równy 4).
Zadanie:
wczytać dane
nadać odpowiedni format liczbowy kolumnom: no. i
N - liczby całkowite - czyli pewnie zostawić, jak jest,
h i error - format naukowy z 2 cyframi po
przecinku, q i p - liczbowy z 2 cyframi po
przecinku.
NA - zastąpić znakiem -- (dwa
minusy)
wyrównanie do prawej kolumn (o ile byłoby inne)
nadać wybrane kolory tabeli (inwencja własna)
można dodać tytuł i podtytuł tabeli, jak w przykładzie
niżej
Przydatne strony (sugeruje przejście od razu do przykładów)
format
liczbowy - formatowanie liczb. Format naukowy (scientific) oraz inne
w sekcji See also na dole strony
Przykładowy efekt
Schemat Rungego-Kutty
bez formatowania
no.
N
h
error
q
p
1
10
2.000000e-01
6.063362e-05
NA
NA
2
20
1.000000e-01
7.653130e-06
7.9227218
2.9859961
3
40
5.000000e-02
6.691689e-07
11.4367682
3.5156075
4
80
2.500000e-02
5.115456e-08
13.0813146
3.7094356
5
160
1.250000e-02
3.564025e-09
14.3530311
3.8432835
6
320
6.250000e-03
2.355794e-10
15.1287639
3.9192222
7
640
3.125000e-03
1.514799e-11
15.5518539
3.9590147
8
1280
1.562500e-03
9.616752e-13
15.7516740
3.9774333
9
2560
7.812500e-04
6.183942e-14
15.5511670
3.9589509
10
5120
3.906250e-04
8.049117e-15
7.6827586
2.9416244
11
10240
1.953125e-04
4.385381e-15
1.8354430
0.8761283
12
20480
9.765625e-05
1.598721e-14
0.2743056
-1.8661443
13
40960
4.882813e-05
9.547918e-15
1.6744186
0.7436602
14
81920
2.441406e-05
9.825474e-15
0.9717514
-0.0413408
15
163840
1.220703e-05
4.796163e-14
0.2048611
-2.2872820
Schemat Rungego-Kutty
efekt końcowy
no.
N
h
error
q
p
1
10
2.00 × 10−1
6.06 × 10−5
–
–
2
20
1.00 × 10−1
7.65 × 10−6
7.92
2.99
3
40
5.00 × 10−2
6.69 × 10−7
11.44
3.52
4
80
2.50 × 10−2
5.12 × 10−8
13.08
3.71
5
160
1.25 × 10−2
3.56 × 10−9
14.35
3.84
6
320
6.25 × 10−3
2.36 × 10−10
15.13
3.92
7
640
3.13 × 10−3
1.51 × 10−11
15.55
3.96
8
1280
1.56 × 10−3
9.62 × 10−13
15.75
3.98
9
2560
7.81 × 10−4
6.18 × 10−14
15.55
3.96
10
5120
3.91 × 10−4
8.05 × 10−15
7.68
2.94
11
10240
1.95 × 10−4
4.39 × 10−15
1.84
0.88
12
20480
9.77 × 10−5
1.60 × 10−14
0.27
−1.87
13
40960
4.88 × 10−5
9.55 × 10−15
1.67
0.74
14
81920
2.44 × 10−5
9.83 × 10−15
0.97
−0.04
15
163840
1.22 × 10−5
4.80 × 10−14
0.20
−2.29
1.3 Więcej
gt
Więcej przykładów zastosowania pakietu gt i formatowania
tabel można zaleźć w np.:
https://posit.co/blog/rstudio-community-table-gallery/
https://forum.posit.co/c/irl/table-gallery/64
2 Biblioteka
plotly
2.1 Opis biblioteki
plotly
Biblioteka plotly umożliwia tworzenie interaktywnych
wykresów. Dostępna jest w językach/środowiskach programowania:
JavaScript - podstawowa, na niej oparte są pozostałe
wersje
Python - najbardziej rozwinięta
R/RStudio
Julia
Matlab
F#
Wymaga jednorazowego zainstalowania w standardowy sposób. Wymaga też
każdorazowego ładowania biblioteki library(plotly)
(wystarczy 1 raz w skrypcie/R Markdown), często używana jest w
połączeniu z pakietem dplyr.
Porównanie kodów w różnych
językach
Poniższe przykłady mają za zadanie porównanie składni w wymienionych
wyżej językach. Każdy z kodów ma za zadanie narysować te same trzy
punkty jako wykres punktowy.
- JavaScript
#wygenerowany przez ChatGPT
<div id="plot"></div>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<script>
var trace = {
x: [0, 2, 4],
y: [0, 1, -3],
mode: 'markers',
type: 'scatter'
};
Plotly.newPlot('plot', [trace]);
</script>
- Python
#wygenerowany przez ChatGPT
import plotly.express as px
x = [0, 2, 4]
y = [0, 1, -3]
fig = px.scatter(x=x, y=y)
fig.show()
- R
- Julia
2.2 Poruszanie się po
wykresie
Zaczniemy od wykonania przykładowego rysunku (kopiuj/wklej poniższy
kod). Przy rysowaniu drugiej funkcji korzystamy z operatora
%>% z pakietu dplyr.
Wybrane elementy, na które warto zwrócić uwagę (wypróbować)
wykres z zamierzenia jest łamaną, najechanie na wykresie na dany
węzeł pokazuje dokładne wartości w danym punkcie
kliknięcie na nazwę w legendzie pozwala na włączenie/wyłączenie
serii danych na wykresie
po najechaniu kursorem na wykres pojawia się panel z
opcjami
można powiększyć wybrany fragment wykresu, w tym “rysując”
prostokąt na fragmencie wykresu do powiększenia
szybko zresetować wykres możemy poprzez podwójne kliknięcie na
wykresie
wybranie “Pan” - ikonka ze strzałkami w pojawiającym się panelu
pozwala na przesuwanie wykresu
wypróbować “Compare data on hover” - taka podwójna
strzałka
library(plotly)
library(dplyr)
x = seq(-pi, 2*pi, length.out = 30)
wart_sin = sin(x)
wart_cos = cos(x)
# wykres
plot_ly(x=~x, y=~wart_sin, type="scatter", mode="lines", name="sinus") %>%
add_lines(x = ~x, y = wart_cos, name = "cosinus")
2.2.1 Zadanie - pierwszy
wykres plotly
Zmodyfikować powyższy wykres w następujący sposób:
zwiększyć liczbę punktów podziału siatki do 100. Czy w
powiększeniu dalej widać łamaną?
dodać do powyższego wykresu dwie wybrane funkcje (np. \(\sin(2x)\), \(\mathrm{arctg}(x)\), ale można też
inne).
zadbać o odpowiednie opisy na legendzie
Uwaga: tutaj korzystamy z przykładu i ogólnego
doświadczenia z R, szczegóły omówimy w dalszej części laboratorium.
Przykładowy wykres - trochę dodatkowych
zmian
2.3 plotly i
ggplot czyli niczego nowego nie musisz się uczyć. Ale czy
aby na pewno?
Polecenie ggplotly(rysunek_ggplot2) pozwala zamienić
rysunek wykonany w ggplot2 na jego interaktywną wersję
pakietu plotly. W efekcie można tworzyć interaktywne
wykresy opierając się na samym ggplot2, który powinien być
wszystkim dobrze znany.
Przykład - utworzymy wykres punktowy ggplot2:
library(ggplot2)
rys_gg=ggplot(iris)+
geom_point(aes(x=Sepal.Length, y=Sepal.Width, color=Species))
rys_gg

i przekształcimy na interaktywny wykres plotly:
2.3.1 Zadanie -
ggplotly na własnym rysunku
Spróbować przerobić własny wykres ggplot2 na rysunek
plotly poprzez funkcję ggplotly. Można
wykorzystać np. paproć Barnsleya, inny rysunek z przeszłości lub
stworzyć nowy (nie musi być szczególnie skomplikowany).
2.3.2 Zadanie - boxplot
ggplota do plotly’a
Powyższe rozwiązanie wydaje się idealne, ale nie zawsze działa.
Spróbować utworzyć wykres ggplot typu boxplot
dla Sepal.Length (ramka iris wbudowana), a
następnie przekształcić ją przez ggplotly.
2.3.3 Utrata formatowania
przy konwersji ggplo2 na plotly
Rozważmy przykładowy rysunek, jaki był do wykonania w jednym z
ćwiczeń na 1 stopniu. Zadanie polegało na dodaniu wybranych szczegółów
do rysunku, w tym odpowiedniego sformatowania klucza legendy. Wykres
powinien wyglądać jak na rysunku niżej

Niestety, po transformacji do plotly niektóre szczegóły
ulegają zatarciu, np. pozycjonowanie legendy czy pomocnicze linie
siatki:
Wniosek: jakieś elementy plotly wypada
znać.
3 plotly -
wprowadzenie
3.1 Podstawowy wykres
liniowy i punktowy
Zaczniemy od przygotowania danych do wykresów - można je umieścić w
ramce danych, ale nie jest to niezbędne.
Chcemy narysować wykres punktowy/liniowy wybranych danych. Zaczynamy
od plot_ly, gdzie podajemy naszą ramkę jako parametr
data=df (samo data jest pierwszym argumentem,
można czasem pominąć nazwę). Tutaj możemy też zdefiniować pierwsza
linię, jaka pojawi się na wykresie. Podajemy typ wykresu
type="scatter oraz mode="markers+lines" aby
narysować wykres liniowy z zaznaczonymi punktami.
Następnie (poprzez operator %>% z pakietu
dplyr lub |> ze standardowego R) dodajemy
wykres punktowy \(\cos (x)\) za pomocą
add_markers. Wykres liniowy \(\cos (2x)\) możemy dodać albo poprzez
add_lines albo poprzez ogólne add_trace z
podaniem typu wykresu. Mamy tutaj sporą dowolność i elastyczność w
doborze elementów wykresu.
#Przygotowanie danych
x = seq(-pi, 4*pi, length.out = 50)
y1 = sin(x)
y2 = cos(x)
y3 = cos(2*x)
y4 = atan(x)
df=data.frame(x=x, wart_sin=y1, wart_cos=y2, wart_cos2x = y3, wart_arctg=y4)
plot_ly(data=df, x=~x,
y=~wart_sin,
type="scatter",
mode="markers+lines") %>%
add_markers(x=~x,
y=~wart_cos,) %>%
add_trace(x=~x,
y=~wart_cos2x,
type="scatter",
mode="lines")
3.2 Nazwy, kolory -
dodawanie kolejnych elementów
Dodamy teraz nazwy, własne kolory oraz inne elementy do
poszczególnych serii danych. Ze względu na dziedziczenie przez wszystkie
trace parametrów podanych w plot_ly, wykres
\(\sin (x)\) narysujemy osobno, poza
głównym poleceniem plot_ly.
Serie danych możemy dodawać poprzez ogólne polecenie
add_trace() i wewnątrz niego określić typ wykresu lub
poprzez wyspecjalizowane polecenia, np. add_markers do
dodania wykresu punktowego.
#dane jak wcześniej
plot_ly(data=df) %>%
add_trace(x=~x,
y=~wart_sin,
type="scatter", #typ wykresu
mode="markers+lines", #punkty zaznaczone "markerami" i połączone liniami
name="sin(x)",
line=list(color="red"),
marker=list(color="blue", size=10, line=list(color="purple", width=3))) %>%
add_markers(x=~x, #sam wykres punktowy
y=~wart_cos,
name="cos(x)",
opacity=0.5,
marker=list(color="darkorange", symbol="triangle-up", size=15,line=list(color="black", width=2))
) %>%
add_trace(x=~x,
y=~wart_cos2x,
type="scatter", #typ wykresu
mode="lines", #tym razem tylko linie
name="cos(2x)",
line=list(color="cornflowerblue", width=6, dash="dash"))
3.3 Pozostałe elementy
wykresu
Poprzez dodanie layout() do wykresu możemy zmodyfikować
jego elementy, typu kolory, nagłówki, ich wygląd, ogólne zachowanie (np.
skumulowany wykres słupkowy).
Narysujemy prosty wykres ramka-wąsy box i dodamy do
niego oraz zmodyfikujemy wygląd elementów tekstowych
plot_ly(data=iris) %>%
add_trace(x=~Sepal.Length, type="box", color=~Species) %>%
layout(
title=list(text="Tytuł wykresu",
font=list(
family = "Courier New",
size = 40,
color = "green")
), #tytuł wykresu
legend=list(bgcolor="red", #tło legendy
title=list(
text="Jestem legendą",
font=list(size=15)
)
), #legenda
yaxis = list(showticklabels = FALSE, #etykiety te same co w legendzie są zbędne
title=list(text='Gatunek',
font=list(size=18, family='Courier', color='crimson')
)
), #dostosowanie osi Y
xaxis = list(
title=list(text='Długość płatka',
font=list(size=18,
family='Comic Sans MS',
color='crimson')
)
), # oś X
margin = list(t = 100) # bo tytuł się nie mieścił, zwiększamy margines
)
A teraz skupimy się na kolorach, ten sam wykres, ale modyfikujemy
inne elementy:
plot_ly(data=iris) %>%
add_trace(x=~Sepal.Length, type="box", color=~Species) %>%
layout(
paper_bgcolor="#ffff32", #kolor tła "papieru", czyli całego obszaru
plot_bgcolor="lightblue", #kolor tła wykresu
legend=list(bgcolor="red"), #kolor tła legendy
yaxis = list(
gridcolor = '#19955a'), #kolor linii siatki poziomych
xaxis = list(
gridcolor = '#000000') #kolor linii siatki pionowych
)
3.4 Więcej opcji, więcej
przykładów
Opcji formatowania wykresu jest całkiem dużo, podobnie jak w
ggplot2, nie będziemy ich tutaj szczegółowo omawiać.
Po dalsze przykłady odsyłam do dobrze przygotowanej dokumentacji i galerii.
4 plotly -
zadania
4.1 Zadanie - pobranie
danych energii
Zaczniemy od pobrania i wczytania pliku danych
tabela_energia_2020_2025.xlsx ze strony przedmiotu. Plik
zawiera zestawienie miesięczne produkcji energii elektrycznej w Polsce z
podziałem na źródła energii. Dane podane są w [GWh]. Źródło danych: Agencja Rynku Energii.
Zapoznać się ze strukturą danych w pliku (polecenia
summary oraz str). Prawdopodobnie kolumna
“Miesiac” zostanie wczytana jako char, aby
przetransformować ją na zmienną typu Date można użyć
następującego polecenia
Pozostałe dane powinny być wczytane jako zmienne liczbowe (sprawdzić,
czy tak jest rzeczywiście).
4.2 Zadanie - wykres
ramka-wąsy (box)
Narysować wspólny wykres ramka-wąsy dla wszystkich źródeł energii.
Podpisać osie, nadać wykresowi stosowny tytuł.
Przykładowy wykres - nie musi być
idealnym odwzorowaniem
4.3 Zadanie - wykres
liniowy (scatter, lines)
Narysować wykres liniowy zmian produkcji energii w czasie dla każdego
źródła energii. Zadbać o dodatkowe elementy (podpisy itp.). Legendę
umieścić pod wykresem. W przypadku osi X ustawić format daty na
“miesiąc-rok”.
Przykładowy wykres - nie musi być
idealnym odwzorowaniem
4.4 Zadanie - wykres
słupkowy skumulowany (bar,
barmode="stack")
Narysować wykres słupkowy skumulowany miesięcznych danych produkcji
energii. Dodać szczegóły jak wcześniej.
Przykładowy wykres - nie musi być
idealnym odwzorowaniem
1 Formatowanie tabel w
pakiecie gt
Zaczniemy od załadowania pakietu gt oraz
dplyr. Możliwe, że pakiet gt trzeba
zainstalować jednorazowo w znany sposób.
Podstawy dotyczące formatowania tabel w pakiecie gt
znajdziemy na stronie:
W powyższym tutorialu autorzy korzystają z operatora
|> mającego takie same działanie jak znany z
dplyr operator %>%.
1.1 Zadanie - podstawy
gt()
Do zadania wykorzystamy pierwsze 10 wierszy wbudowanej w R ramki
danych iris, tj.
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | setosa |
| 4.9 | 3.0 | 1.4 | 0.2 | setosa |
| 4.7 | 3.2 | 1.3 | 0.2 | setosa |
| 4.6 | 3.1 | 1.5 | 0.2 | setosa |
| 5.0 | 3.6 | 1.4 | 0.2 | setosa |
| 5.4 | 3.9 | 1.7 | 0.4 | setosa |
| 4.6 | 3.4 | 1.4 | 0.3 | setosa |
| 5.0 | 3.4 | 1.5 | 0.2 | setosa |
| 4.4 | 2.9 | 1.4 | 0.2 | setosa |
| 4.9 | 3.1 | 1.5 | 0.1 | setosa |
Następnie, wykorzystując tutorial, należy (nie koniecznie po kolei):
zmienić tytuł i podtytuł tabeli na własny,
dodać źródło,
dodać odnośnik do wybranego elementu tabeli,
pogrupować kolumny działki kielicha i płatka,
przenieść kolumnę z gatunkiem na początek,
nadać kolumną własne, polskie nazwy.
Efekt końcowy powinien przypominać tabelkę wyglądającą jak niżej:
Przykładowy efekt
| Ramka iris | ||||
| dane wbudowane w R | ||||
| Gatunek |
Działka kielicha
|
Płatek
|
||
|---|---|---|---|---|
| Długość | Szerokość | Długość | Szerokość | |
| setosa | 5.1 | 3.5 | 1.4 | 0.2 |
| setosa | 4.9 | 3.0 | 1.4 | 0.2 |
| setosa | 4.7 | 1 3.2 | 1.3 | 0.2 |
| setosa | 4.6 | 3.1 | 1.5 | 0.2 |
| setosa | 5.0 | 3.6 | 1.4 | 0.2 |
| setosa | 5.4 | 3.9 | 1.7 | 0.4 |
| setosa | 4.6 | 3.4 | 1.4 | 0.3 |
| setosa | 5.0 | 3.4 | 1.5 | 0.2 |
| setosa | 4.4 | 2.9 | 1.4 | 0.2 |
| setosa | 4.9 | 3.1 | 1.5 | 0.1 |
| Źródło: R | ||||
| 1 Mój ulubiony wiersz | ||||
1.2 Zadanie - format liczb i kolory
Zaczniemy od pobrania pliku RK4.csv ze strony przedmiotu
oraz wczytaniu danych. Plik ten zawiera wyniki eksperymentów
numerycznych - metody Rungego - Kutty rzędu 4 zastosowanej do wybranego
równania różniczkowego zwyczajnego. Jest to pewne rozwinięcie schematu
Eulera omawianego w Laboratorium 1. Kolejne kolumny oznaczają:
no. - kolejny numer, N - liczba kroków,
h - długość kroku, error - błąd mierzony jako
różnica między wynikiem z metody a rozwiązaniem dokładnym,
q - iloraz błędów, p \(=\log_2 (q)\) numeryczny rząd zbieżności
metody (dobrze żeby był w przybliżeniu równy 4).
Zadanie:
wczytać dane
nadać odpowiedni format liczbowy kolumnom:
no.iN- liczby całkowite - czyli pewnie zostawić, jak jest,hierror- format naukowy z 2 cyframi po przecinku,qip- liczbowy z 2 cyframi po przecinku.NA- zastąpić znakiem--(dwa minusy)wyrównanie do prawej kolumn (o ile byłoby inne)
nadać wybrane kolory tabeli (inwencja własna)
można dodać tytuł i podtytuł tabeli, jak w przykładzie niżej
Przydatne strony (sugeruje przejście od razu do przykładów)
format liczbowy - formatowanie liczb. Format naukowy (scientific) oraz inne w sekcji
See alsona dole strony
Przykładowy efekt
| Schemat Rungego-Kutty | |||||
| bez formatowania | |||||
| no. | N | h | error | q | p |
|---|---|---|---|---|---|
| 1 | 10 | 2.000000e-01 | 6.063362e-05 | NA | NA |
| 2 | 20 | 1.000000e-01 | 7.653130e-06 | 7.9227218 | 2.9859961 |
| 3 | 40 | 5.000000e-02 | 6.691689e-07 | 11.4367682 | 3.5156075 |
| 4 | 80 | 2.500000e-02 | 5.115456e-08 | 13.0813146 | 3.7094356 |
| 5 | 160 | 1.250000e-02 | 3.564025e-09 | 14.3530311 | 3.8432835 |
| 6 | 320 | 6.250000e-03 | 2.355794e-10 | 15.1287639 | 3.9192222 |
| 7 | 640 | 3.125000e-03 | 1.514799e-11 | 15.5518539 | 3.9590147 |
| 8 | 1280 | 1.562500e-03 | 9.616752e-13 | 15.7516740 | 3.9774333 |
| 9 | 2560 | 7.812500e-04 | 6.183942e-14 | 15.5511670 | 3.9589509 |
| 10 | 5120 | 3.906250e-04 | 8.049117e-15 | 7.6827586 | 2.9416244 |
| 11 | 10240 | 1.953125e-04 | 4.385381e-15 | 1.8354430 | 0.8761283 |
| 12 | 20480 | 9.765625e-05 | 1.598721e-14 | 0.2743056 | -1.8661443 |
| 13 | 40960 | 4.882813e-05 | 9.547918e-15 | 1.6744186 | 0.7436602 |
| 14 | 81920 | 2.441406e-05 | 9.825474e-15 | 0.9717514 | -0.0413408 |
| 15 | 163840 | 1.220703e-05 | 4.796163e-14 | 0.2048611 | -2.2872820 |
| Schemat Rungego-Kutty | |||||
| efekt końcowy | |||||
| no. | N | h | error | q | p |
|---|---|---|---|---|---|
| 1 | 10 | 2.00 × 10−1 | 6.06 × 10−5 | – | – |
| 2 | 20 | 1.00 × 10−1 | 7.65 × 10−6 | 7.92 | 2.99 |
| 3 | 40 | 5.00 × 10−2 | 6.69 × 10−7 | 11.44 | 3.52 |
| 4 | 80 | 2.50 × 10−2 | 5.12 × 10−8 | 13.08 | 3.71 |
| 5 | 160 | 1.25 × 10−2 | 3.56 × 10−9 | 14.35 | 3.84 |
| 6 | 320 | 6.25 × 10−3 | 2.36 × 10−10 | 15.13 | 3.92 |
| 7 | 640 | 3.13 × 10−3 | 1.51 × 10−11 | 15.55 | 3.96 |
| 8 | 1280 | 1.56 × 10−3 | 9.62 × 10−13 | 15.75 | 3.98 |
| 9 | 2560 | 7.81 × 10−4 | 6.18 × 10−14 | 15.55 | 3.96 |
| 10 | 5120 | 3.91 × 10−4 | 8.05 × 10−15 | 7.68 | 2.94 |
| 11 | 10240 | 1.95 × 10−4 | 4.39 × 10−15 | 1.84 | 0.88 |
| 12 | 20480 | 9.77 × 10−5 | 1.60 × 10−14 | 0.27 | −1.87 |
| 13 | 40960 | 4.88 × 10−5 | 9.55 × 10−15 | 1.67 | 0.74 |
| 14 | 81920 | 2.44 × 10−5 | 9.83 × 10−15 | 0.97 | −0.04 |
| 15 | 163840 | 1.22 × 10−5 | 4.80 × 10−14 | 0.20 | −2.29 |
1.3 Więcej
gt
Więcej przykładów zastosowania pakietu gt i formatowania
tabel można zaleźć w np.:
https://posit.co/blog/rstudio-community-table-gallery/
https://forum.posit.co/c/irl/table-gallery/64
2 Biblioteka
plotly
2.1 Opis biblioteki
plotly
Biblioteka plotly umożliwia tworzenie interaktywnych
wykresów. Dostępna jest w językach/środowiskach programowania:
JavaScript - podstawowa, na niej oparte są pozostałe
wersje
Python - najbardziej rozwinięta
R/RStudio
Julia
Matlab
F#
Wymaga jednorazowego zainstalowania w standardowy sposób. Wymaga też
każdorazowego ładowania biblioteki library(plotly)
(wystarczy 1 raz w skrypcie/R Markdown), często używana jest w
połączeniu z pakietem dplyr.
Porównanie kodów w różnych
językach
Poniższe przykłady mają za zadanie porównanie składni w wymienionych
wyżej językach. Każdy z kodów ma za zadanie narysować te same trzy
punkty jako wykres punktowy.
- JavaScript
#wygenerowany przez ChatGPT
<div id="plot"></div>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<script>
var trace = {
x: [0, 2, 4],
y: [0, 1, -3],
mode: 'markers',
type: 'scatter'
};
Plotly.newPlot('plot', [trace]);
</script>
- Python
#wygenerowany przez ChatGPT
import plotly.express as px
x = [0, 2, 4]
y = [0, 1, -3]
fig = px.scatter(x=x, y=y)
fig.show()
- R
- Julia
2.2 Poruszanie się po
wykresie
Zaczniemy od wykonania przykładowego rysunku (kopiuj/wklej poniższy
kod). Przy rysowaniu drugiej funkcji korzystamy z operatora
%>% z pakietu dplyr.
Wybrane elementy, na które warto zwrócić uwagę (wypróbować)
wykres z zamierzenia jest łamaną, najechanie na wykresie na dany
węzeł pokazuje dokładne wartości w danym punkcie
kliknięcie na nazwę w legendzie pozwala na włączenie/wyłączenie
serii danych na wykresie
po najechaniu kursorem na wykres pojawia się panel z
opcjami
można powiększyć wybrany fragment wykresu, w tym “rysując”
prostokąt na fragmencie wykresu do powiększenia
szybko zresetować wykres możemy poprzez podwójne kliknięcie na
wykresie
wybranie “Pan” - ikonka ze strzałkami w pojawiającym się panelu
pozwala na przesuwanie wykresu
wypróbować “Compare data on hover” - taka podwójna
strzałka
library(plotly)
library(dplyr)
x = seq(-pi, 2*pi, length.out = 30)
wart_sin = sin(x)
wart_cos = cos(x)
# wykres
plot_ly(x=~x, y=~wart_sin, type="scatter", mode="lines", name="sinus") %>%
add_lines(x = ~x, y = wart_cos, name = "cosinus")
2.2.1 Zadanie - pierwszy
wykres plotly
Zmodyfikować powyższy wykres w następujący sposób:
zwiększyć liczbę punktów podziału siatki do 100. Czy w
powiększeniu dalej widać łamaną?
dodać do powyższego wykresu dwie wybrane funkcje (np. \(\sin(2x)\), \(\mathrm{arctg}(x)\), ale można też
inne).
zadbać o odpowiednie opisy na legendzie
Uwaga: tutaj korzystamy z przykładu i ogólnego
doświadczenia z R, szczegóły omówimy w dalszej części laboratorium.
Przykładowy wykres - trochę dodatkowych
zmian
2.3 plotly i
ggplot czyli niczego nowego nie musisz się uczyć. Ale czy
aby na pewno?
Polecenie ggplotly(rysunek_ggplot2) pozwala zamienić
rysunek wykonany w ggplot2 na jego interaktywną wersję
pakietu plotly. W efekcie można tworzyć interaktywne
wykresy opierając się na samym ggplot2, który powinien być
wszystkim dobrze znany.
Przykład - utworzymy wykres punktowy ggplot2:
library(ggplot2)
rys_gg=ggplot(iris)+
geom_point(aes(x=Sepal.Length, y=Sepal.Width, color=Species))
rys_gg

i przekształcimy na interaktywny wykres plotly:
2.3.1 Zadanie -
ggplotly na własnym rysunku
Spróbować przerobić własny wykres ggplot2 na rysunek
plotly poprzez funkcję ggplotly. Można
wykorzystać np. paproć Barnsleya, inny rysunek z przeszłości lub
stworzyć nowy (nie musi być szczególnie skomplikowany).
2.3.2 Zadanie - boxplot
ggplota do plotly’a
Powyższe rozwiązanie wydaje się idealne, ale nie zawsze działa.
Spróbować utworzyć wykres ggplot typu boxplot
dla Sepal.Length (ramka iris wbudowana), a
następnie przekształcić ją przez ggplotly.
2.3.3 Utrata formatowania
przy konwersji ggplo2 na plotly
Rozważmy przykładowy rysunek, jaki był do wykonania w jednym z
ćwiczeń na 1 stopniu. Zadanie polegało na dodaniu wybranych szczegółów
do rysunku, w tym odpowiedniego sformatowania klucza legendy. Wykres
powinien wyglądać jak na rysunku niżej

Niestety, po transformacji do plotly niektóre szczegóły
ulegają zatarciu, np. pozycjonowanie legendy czy pomocnicze linie
siatki:
Wniosek: jakieś elementy plotly wypada
znać.
2.1 Opis biblioteki
plotly
Biblioteka plotly umożliwia tworzenie interaktywnych
wykresów. Dostępna jest w językach/środowiskach programowania:
JavaScript - podstawowa, na niej oparte są pozostałe wersje
Python - najbardziej rozwinięta
R/RStudio
Julia
Matlab
F#
Wymaga jednorazowego zainstalowania w standardowy sposób. Wymaga też
każdorazowego ładowania biblioteki library(plotly)
(wystarczy 1 raz w skrypcie/R Markdown), często używana jest w
połączeniu z pakietem dplyr.
Porównanie kodów w różnych językach
Poniższe przykłady mają za zadanie porównanie składni w wymienionych wyżej językach. Każdy z kodów ma za zadanie narysować te same trzy punkty jako wykres punktowy.
- JavaScript
#wygenerowany przez ChatGPT
<div id="plot"></div>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<script>
var trace = {
x: [0, 2, 4],
y: [0, 1, -3],
mode: 'markers',
type: 'scatter'
};
Plotly.newPlot('plot', [trace]);
</script>- Python
#wygenerowany przez ChatGPT
import plotly.express as px
x = [0, 2, 4]
y = [0, 1, -3]
fig = px.scatter(x=x, y=y)
fig.show()- R
- Julia
2.2 Poruszanie się po wykresie
Zaczniemy od wykonania przykładowego rysunku (kopiuj/wklej poniższy
kod). Przy rysowaniu drugiej funkcji korzystamy z operatora
%>% z pakietu dplyr.
Wybrane elementy, na które warto zwrócić uwagę (wypróbować)
wykres z zamierzenia jest łamaną, najechanie na wykresie na dany węzeł pokazuje dokładne wartości w danym punkcie
kliknięcie na nazwę w legendzie pozwala na włączenie/wyłączenie serii danych na wykresie
po najechaniu kursorem na wykres pojawia się panel z opcjami
można powiększyć wybrany fragment wykresu, w tym “rysując” prostokąt na fragmencie wykresu do powiększenia
szybko zresetować wykres możemy poprzez podwójne kliknięcie na wykresie
wybranie “Pan” - ikonka ze strzałkami w pojawiającym się panelu pozwala na przesuwanie wykresu
wypróbować “Compare data on hover” - taka podwójna strzałka
library(plotly)
library(dplyr)
x = seq(-pi, 2*pi, length.out = 30)
wart_sin = sin(x)
wart_cos = cos(x)
# wykres
plot_ly(x=~x, y=~wart_sin, type="scatter", mode="lines", name="sinus") %>%
add_lines(x = ~x, y = wart_cos, name = "cosinus") 2.2.1 Zadanie - pierwszy
wykres plotly
Zmodyfikować powyższy wykres w następujący sposób:
zwiększyć liczbę punktów podziału siatki do 100. Czy w powiększeniu dalej widać łamaną?
dodać do powyższego wykresu dwie wybrane funkcje (np. \(\sin(2x)\), \(\mathrm{arctg}(x)\), ale można też inne).
zadbać o odpowiednie opisy na legendzie
Uwaga: tutaj korzystamy z przykładu i ogólnego doświadczenia z R, szczegóły omówimy w dalszej części laboratorium.
Przykładowy wykres - trochę dodatkowych zmian
2.3 plotly i
ggplot czyli niczego nowego nie musisz się uczyć. Ale czy
aby na pewno?
Polecenie ggplotly(rysunek_ggplot2) pozwala zamienić
rysunek wykonany w ggplot2 na jego interaktywną wersję
pakietu plotly. W efekcie można tworzyć interaktywne
wykresy opierając się na samym ggplot2, który powinien być
wszystkim dobrze znany.
Przykład - utworzymy wykres punktowy ggplot2:
library(ggplot2)
rys_gg=ggplot(iris)+
geom_point(aes(x=Sepal.Length, y=Sepal.Width, color=Species))
rys_ggi przekształcimy na interaktywny wykres plotly:
2.3.1 Zadanie -
ggplotly na własnym rysunku
Spróbować przerobić własny wykres ggplot2 na rysunek
plotly poprzez funkcję ggplotly. Można
wykorzystać np. paproć Barnsleya, inny rysunek z przeszłości lub
stworzyć nowy (nie musi być szczególnie skomplikowany).
2.3.2 Zadanie - boxplot
ggplota do plotly’a
Powyższe rozwiązanie wydaje się idealne, ale nie zawsze działa.
Spróbować utworzyć wykres ggplot typu boxplot
dla Sepal.Length (ramka iris wbudowana), a
następnie przekształcić ją przez ggplotly.
2.3.3 Utrata formatowania
przy konwersji ggplo2 na plotly
Rozważmy przykładowy rysunek, jaki był do wykonania w jednym z ćwiczeń na 1 stopniu. Zadanie polegało na dodaniu wybranych szczegółów do rysunku, w tym odpowiedniego sformatowania klucza legendy. Wykres powinien wyglądać jak na rysunku niżej
Niestety, po transformacji do plotly niektóre szczegóły
ulegają zatarciu, np. pozycjonowanie legendy czy pomocnicze linie
siatki:
Wniosek: jakieś elementy plotly wypada
znać.
3 plotly -
wprowadzenie
3.1 Podstawowy wykres liniowy i punktowy
Zaczniemy od przygotowania danych do wykresów - można je umieścić w ramce danych, ale nie jest to niezbędne.
Chcemy narysować wykres punktowy/liniowy wybranych danych. Zaczynamy
od plot_ly, gdzie podajemy naszą ramkę jako parametr
data=df (samo data jest pierwszym argumentem,
można czasem pominąć nazwę). Tutaj możemy też zdefiniować pierwsza
linię, jaka pojawi się na wykresie. Podajemy typ wykresu
type="scatter oraz mode="markers+lines" aby
narysować wykres liniowy z zaznaczonymi punktami.
Następnie (poprzez operator %>% z pakietu
dplyr lub |> ze standardowego R) dodajemy
wykres punktowy \(\cos (x)\) za pomocą
add_markers. Wykres liniowy \(\cos (2x)\) możemy dodać albo poprzez
add_lines albo poprzez ogólne add_trace z
podaniem typu wykresu. Mamy tutaj sporą dowolność i elastyczność w
doborze elementów wykresu.
#Przygotowanie danych
x = seq(-pi, 4*pi, length.out = 50)
y1 = sin(x)
y2 = cos(x)
y3 = cos(2*x)
y4 = atan(x)
df=data.frame(x=x, wart_sin=y1, wart_cos=y2, wart_cos2x = y3, wart_arctg=y4)
plot_ly(data=df, x=~x,
y=~wart_sin,
type="scatter",
mode="markers+lines") %>%
add_markers(x=~x,
y=~wart_cos,) %>%
add_trace(x=~x,
y=~wart_cos2x,
type="scatter",
mode="lines")3.2 Nazwy, kolory - dodawanie kolejnych elementów
Dodamy teraz nazwy, własne kolory oraz inne elementy do
poszczególnych serii danych. Ze względu na dziedziczenie przez wszystkie
trace parametrów podanych w plot_ly, wykres
\(\sin (x)\) narysujemy osobno, poza
głównym poleceniem plot_ly.
Serie danych możemy dodawać poprzez ogólne polecenie
add_trace() i wewnątrz niego określić typ wykresu lub
poprzez wyspecjalizowane polecenia, np. add_markers do
dodania wykresu punktowego.
#dane jak wcześniej
plot_ly(data=df) %>%
add_trace(x=~x,
y=~wart_sin,
type="scatter", #typ wykresu
mode="markers+lines", #punkty zaznaczone "markerami" i połączone liniami
name="sin(x)",
line=list(color="red"),
marker=list(color="blue", size=10, line=list(color="purple", width=3))) %>%
add_markers(x=~x, #sam wykres punktowy
y=~wart_cos,
name="cos(x)",
opacity=0.5,
marker=list(color="darkorange", symbol="triangle-up", size=15,line=list(color="black", width=2))
) %>%
add_trace(x=~x,
y=~wart_cos2x,
type="scatter", #typ wykresu
mode="lines", #tym razem tylko linie
name="cos(2x)",
line=list(color="cornflowerblue", width=6, dash="dash"))3.3 Pozostałe elementy wykresu
Poprzez dodanie layout() do wykresu możemy zmodyfikować
jego elementy, typu kolory, nagłówki, ich wygląd, ogólne zachowanie (np.
skumulowany wykres słupkowy).
Narysujemy prosty wykres ramka-wąsy box i dodamy do
niego oraz zmodyfikujemy wygląd elementów tekstowych
plot_ly(data=iris) %>%
add_trace(x=~Sepal.Length, type="box", color=~Species) %>%
layout(
title=list(text="Tytuł wykresu",
font=list(
family = "Courier New",
size = 40,
color = "green")
), #tytuł wykresu
legend=list(bgcolor="red", #tło legendy
title=list(
text="Jestem legendą",
font=list(size=15)
)
), #legenda
yaxis = list(showticklabels = FALSE, #etykiety te same co w legendzie są zbędne
title=list(text='Gatunek',
font=list(size=18, family='Courier', color='crimson')
)
), #dostosowanie osi Y
xaxis = list(
title=list(text='Długość płatka',
font=list(size=18,
family='Comic Sans MS',
color='crimson')
)
), # oś X
margin = list(t = 100) # bo tytuł się nie mieścił, zwiększamy margines
)A teraz skupimy się na kolorach, ten sam wykres, ale modyfikujemy inne elementy:
plot_ly(data=iris) %>%
add_trace(x=~Sepal.Length, type="box", color=~Species) %>%
layout(
paper_bgcolor="#ffff32", #kolor tła "papieru", czyli całego obszaru
plot_bgcolor="lightblue", #kolor tła wykresu
legend=list(bgcolor="red"), #kolor tła legendy
yaxis = list(
gridcolor = '#19955a'), #kolor linii siatki poziomych
xaxis = list(
gridcolor = '#000000') #kolor linii siatki pionowych
)3.4 Więcej opcji, więcej przykładów
Opcji formatowania wykresu jest całkiem dużo, podobnie jak w
ggplot2, nie będziemy ich tutaj szczegółowo omawiać.
Po dalsze przykłady odsyłam do dobrze przygotowanej dokumentacji i galerii.
4 plotly -
zadania
4.1 Zadanie - pobranie danych energii
Zaczniemy od pobrania i wczytania pliku danych
tabela_energia_2020_2025.xlsx ze strony przedmiotu. Plik
zawiera zestawienie miesięczne produkcji energii elektrycznej w Polsce z
podziałem na źródła energii. Dane podane są w [GWh]. Źródło danych: Agencja Rynku Energii.
Zapoznać się ze strukturą danych w pliku (polecenia
summary oraz str). Prawdopodobnie kolumna
“Miesiac” zostanie wczytana jako char, aby
przetransformować ją na zmienną typu Date można użyć
następującego polecenia
Pozostałe dane powinny być wczytane jako zmienne liczbowe (sprawdzić, czy tak jest rzeczywiście).
4.2 Zadanie - wykres
ramka-wąsy (box)
Narysować wspólny wykres ramka-wąsy dla wszystkich źródeł energii. Podpisać osie, nadać wykresowi stosowny tytuł.
Przykładowy wykres - nie musi być idealnym odwzorowaniem
4.3 Zadanie - wykres
liniowy (scatter, lines)
Narysować wykres liniowy zmian produkcji energii w czasie dla każdego źródła energii. Zadbać o dodatkowe elementy (podpisy itp.). Legendę umieścić pod wykresem. W przypadku osi X ustawić format daty na “miesiąc-rok”.
Przykładowy wykres - nie musi być idealnym odwzorowaniem
4.4 Zadanie - wykres
słupkowy skumulowany (bar,
barmode="stack")
Narysować wykres słupkowy skumulowany miesięcznych danych produkcji energii. Dodać szczegóły jak wcześniej.