Ta strona wykorzystuje ciasteczka ("cookies") w celu zapewnienia maksymalnej wygody w korzystaniu z naszego serwisu. Czy wyrażasz na to zgodę?

Czytaj więcej
< All Topics
Print

Legenda

Elementy tworzące legendę

Legenda jest obowiązkowym obiektem na złożonych wykresach robionych w biologii, na których trzeba wyjaśnić znaczenie wszystkich użytych kolorów, stylów linii, rodzajów znaczników i innych symboli. Polega ona na umieszczeniu gdzieś na wykresie tabelki złożonej z dwóch kolumn. Na lewo są symbole, lub małe odcinki linii o określonych stylach i kolorach lub prostokąciki wypełnione określonym wzorem i kolorem. Na prawo są wyjaśnienia w formie słownej.

Żaden wykres w R nie ma domyślnej opcji pozwalającej na umieszczenie legendy na wykresie. Trzeba ja zrobić za pomocą podrzędnej funkcji graficznej legend(). Ma ona prawie 40 opcji, które umożliwiają zrobienie dobrej legendy we właściwym miejscu. Najważniejsze z nich można podzielić na kilka grup:

  • Opcje x, y, xjust i yjus wskazujące na punkt, względem którego ma być umieszczona legenda.
  • Opcje bty, bg, box.lty, box.lwd, box.col pokazujące jak ma wyglądać prostokąt okalający legendę.
  • Opcje pch, col, lty, lwd, seg.len, fill, angle, density związane z punktami, liniami i prostokącikami z odpowiednimi kolorami umieszczane z lewej strony legendy.
  • Opcja legend=c() pokazująca kolejne napisy ukazujące się z prawej strony legendy.
  • Opcja title, title.col, title.adj pozwalające na zatytułowanie legendy.

Umiejscowienie legendy wynika z dwóch przesłanek:

  • Legenda nie może przesłaniać informacji wynikającej z wykresu a więc żadnych punktów, linii i wzorów które umieszczono w polu kreślenia.
  • Legenda nie może zabierać zbyt wiele miejsca, nie powinna generować zbyt wiele pustego miejsca i powinna tworzyć możliwie duże pole kreślenia.

Zatem legenda może być umieszczona wewnątrz pola kreślenia. Najczęściej jednak występuje na marginesach. Może też przecinać brzeg wykresu i tkwić częściowo w polu kreślenia i częściowo na marginesie. Wykonanie funkcji legend() poprzedza zazwyczaj wykonanie funkcji par(xpd=TRUE) co pozwala na rysowanie legendy lub jej elementów zarówno w polu kreślenia jak i na marginesie. Domyślna opcja xpd=FALSE powoduje, że legendę można utworzyć tylko w polu kreślenia, a to co wychodzi za to pole, znika.

 

Umiejscowienie legendy na przykładzie wykresów punktowych

Wykresy punktowe, w których zastosowano znaczniki o różnym kształcie lub kolorze wymagają legendy. Jej utworzenie wygląda następująco:

x.samice=c(0.32, 0.16, 0.34, 0.39, 1.55, 0.56, 0.13, 1.05, 0.15, 5.16, 4.41,
 3.07, 4.72)
y.samice=c(7.34, 3.85, 5.27, 10.42, 2.16, 8.58, 9.51, 6.91, 5.05, 0.64, 1.92,
 1.51, 2.65)
x.samce=c(0.07, 0.88, 5.14, 3.14, 1.50, 0.52, 0.48, 2.34, 1.98, 0.53, 0.63,
 1.03, 0.69)
y.samce=c(9.72, 7.92, 0.15, 4.80, 5.88, 11.29, 9.40, 5.21, 3.98, 9.13, 9.08,
 4.88, 5.40)
n1=length(x.samice)
n2=length(x.samce)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,1), mgp=c(1.7, 0.5, 0), tck=-0.04)
plot(c(x.samice,x.samce),c(y.samice,y.samce),
xlab="Odległość norki od szosy [m]",
ylab=expression("Stężenie ołowiu [ " * mu *"g/g]"),
pch=c(rep(15,n1),rep(17,n2)),
col=c(rep("green2",n1),rep("blue",n2)))
x0=par("usr")[2]
y0=par("usr")[4]
legend(x0,y0, xjust=1, yjust=1,
legend=c("samice","samce"),
pch=c(15,17),
col=c("green2","blue"))

Uzyskany wykres wygląda następująco:

Legenda umieszczana na polu kreślenia zazwyczaj zajmuje skrajną pozycję wolną od danych. Wtedy dobrze jest powołać się na współrzędne rogów pola kreślenia wyświetlanych przez funkcję par(“usr”) w kolejności współrzędne x1 i x2 dolnego brzegu i współrzędne y1 i y2 lewego brzegu. Opcje xjus=x i yjust=x pokazują jak ma być przesunięta legenda względem punktu (x,y) o współrzędnych podanych na początku. Ich wartości mogą być liczbą z przedziału [0,1] i w szczególności:

  • xjus=0, yjust=0 oznacza, że legenda jest na prawo i powyżej punktu (x,y)
  • xjust=0.5, yjust=0.5 oznacza, że punkt (x,y) jest w środku legendy
  • xjust=1, yjust=1 oznacza, że legenda jest na lewo i poniżej punktu (x,y)
  • xjust=0, yjust=1 (ustawienia domyślne) oznacza, że legenda jest na prawo i poniżej punktu (x,y)

Umiejscowienie legendy na marginesach wymaga zastosowania opcji xpd=TRUE (domyślnie ma wartość FALSE). Można to zrobić w opcji par() przed funkcją graficzną rysującą, w jej powtórzeniu przed funkcją legend() albo zastosować ją w funkcji legend(). Różne umiejscowienia legendy pokazują następujące programy:

windows(4.5, 2.5)
par(mar=c(3,3,1,6), mgp=c(1.8,0.5,0), xpd=TRUE)
plot(c(1:6,1:6+0.5),c(6:1,1:6),
pch=c(3,3,3,5,5,5,3,3,3,5,5,5), col=c(2,2,2,4,4,4,2,2,2,4,4,4),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(par("usr")[2], par("usr")[4],
legend=c("czerwony", "niebieski"),
pch=c(3,5), col=c(2, 4))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,6), mgp=c(1.8,0.5,0))
plot(c(1:6,1:6+0.5),c(6:1,1:6),
pch=c(3,3,3,5,5,5,3,3,3,5,5,5), col=c(2,2,2,4,4,4,2,2,2,4,4,4),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
par(xpd=TRUE)
legend(par("usr")[2], sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
legend=c("czerwony", "niebieski"),
pch=c(3,5), col=c(2, 4))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,6), mgp=c(1.8,0.5,0))
plot(c(1:6,1:6+0.5),c(6:1,1:6),
pch=c(3,3,3,5,5,5,3,3,3,5,5,5), col=c(2,2,2,4,4,4,2,2,2,4,4,4),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(par("usr")[2], par("usr")[3], xjust=0, yjust=0, xpd=TRUE,
legend=c("czerwony", "niebieski"),
pch=c(3,5), col=c(2, 4))

Po wykonaniu tego programu pojawiają się trzy wykresy, różniące się umiejscowieniem legendy na prawym marginesie, który musi być wcześniej zdefiniowany jako odpowiednio szeroki.

Aby zaoszczędzić nieco miejsca na pole kreślenia kosztem miejsca na legendę można wykonać następujący wykres:

windows(4.5, 2.5)
par(mar=c(3,3,1,3), mgp=c(1.8,0.5,0), xpd=TRUE)
plot(c(1:6,1:6+0.5),c(6:1,1:6),
pch=c(3,3,3,5,5,5,3,3,3,5,5,5), col=c(2,2,2,4,4,4,2,2,2,4,4,4),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")legend(par("usr")[2]-1,
   sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
legend=c("czerwony", "niebieski"),
bg="white",
pch=c(3,5), col=c(2, 4))

Program generuje wykres:

Dość istotne jest w nim ustalenie koloru tła w prostokącie przeznaczonym na legendę opcją bg=”kolor”, bo domyślne ustawienie, to brak koloru tła. Wtedy brzeg wykresu byłby widoczny na legendzie.

Legendę można także umieścić na marginesie górnym albo dolnym, gdzie z reguły robi się to pod podpisem osi. Wymaga to napisania jej wierszy obok siebie. Służy do tego opcja horiz=TRUE. Wygląda to następująco:

windows(4.5, 2.5)
par(mar=c(3,3,3,1), mgp=c(1.8,0.5,0), xpd=TRUE)
plot(c(1:6,1:6+0.5),c(6:1,1:6),
pch=c(3,3,3,5,5,5,3,3,3,5,5,5), col=c(2,2,2,4,4,4,2,2,2,4,4,4),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(sum(par("usr")[1:2])/2, par("usr")[4]+0.5, xjust=0.5, yjust=0,
horiz=TRUE,
legend=c("czerwony", "niebieski"),
bg="white",
pch=c(3,5), col=c(2, 4))
#
windows(4.5, 2.5)
par(mar=c(5.5,3,1,1), mgp=c(1.8,0.5,0), xpd=TRUE)
plot(c(1:6,1:6+0.5),c(6:1,1:6),
pch=c(3,3,3,5,5,5,3,3,3,5,5,5), col=c(2,2,2,4,4,4,2,2,2,4,4,4),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(sum(par("usr")[1:2])/2, par("usr")[3]-3, xjust=0.5, yjust=1,
horiz=TRUE,
legend=c("czerwony", "niebieski"),
bg="white",
pch=c(3,5), col=c(2, 4))

Program generuje następujące wykresy:

 

Legendę można też umiejscowić na lewym marginesie, choć jest to rzadko stosowane.

 

Wygląd i tytuł legendy na przykładzie wykresów liniowych

Wykresy liniowe wymagają legendy, jeśli widać na nich dwa lub więcej rodzajów linii. Często także tworzy się wykresy liniowo-punktowe, a to wymaga odpowiednio złożonej legendy. Wygląda to następująco:

y1=c(4,7,1,3,5,2)
y2=c(5,2,6,1,7,4)
y3=c(3,5,4,7,3,2)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,7), mgp=c(1.8,0.5,0), xpd=TRUE)
plot(1:6,y1,type="l", lty=1, lwd=1, col="red", xlab="Podpis osi 0X",
     ylab="Podpis osi 0Y")
lines(1:6,y2, lty=2, lwd=2, col="blue")
lines(1:6,y3, lty=3, lwd=2, col="green3")
legend(6.3,sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
legend=c("czerwony", "niebieski", "zielony"),
title="Legenda",
lty=c(1,2,3), lwd=c(1,2,2), col=c("red", "blue", "green3"))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,7.2), mgp=c(1.8,0.5,0), xpd=TRUE)
plot(1:6,y1,type="o", pch=15, lty=1, lwd=1, col="red",
    xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
lines(1:6,y2, lty=2, lwd=2, col="blue")
points(1:6,y2, pch=17, col="blue")
lines(1:6,y3, lty=3, lwd=2, col="green3")
points(1:6,y3, pch=19, col="green3")
legend(6.3,sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
legend=c("czerwony", "niebieski", "zielony"),
title="Legenda",
   pch=c(15,17,19), lty=c(1,2,3), lwd=c(1,2,2),
   col=c("red", "blue", "green3"), seg.len=3)

Wykonanie powyższego programu w konsoli spowoduje powstanie następującego wykresu:

 

Na drugim wykresie wydłużono linie występujące w legendzie by były lepiej widoczne pod znacznikami. Zrobiono to opcją seg.len=x.

Legenda umiejscawiana na marginesie nie wymaga obramowania, albo przynajmniej obramowanie nie powinno być tak wyraźne jak obramowanie pola kreślenia. Zmienić to można opcja bty=””, która ma następujące wartości: “o” (domyślna) i “n” (oznacza brak obramowania). Przy opcji bty=”o” można zmienić rodzaj linii obramowania opcją box.lty=n, jej grubość opcją box.lwd=x i jej kolor opcja box.col. Jednocześnie można wprowadzić kolor tła legendy opcją bg=”color”. Opcje te nie działają, gdy bty=”n”.

Za pomocą poniższego programu można zmienić wygląd legendy.

windows(4.5, 2.5)
par(mar=c(3,3,1,6.7), mgp=c(1.8,0.5,0), xpd=TRUE)
matplot(1:6,cbind(1:6,6:1), type="l", lty=2:3, lwd=2:3, col=2:3,
    xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(6.3,sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
legend=c("czerwony", "zielony"),
title="Legenda",
box.lty=5, box.col=4, bg="#ccffff",
lty=c(2,3), col=2:3, lwd=2:3)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,6.7), mgp=c(1.8,0.5,0), xpd=TRUE)
matplot(1:6,cbind(1:6,6:1), type="l", lty=2:3, lwd=2:3, col=2:3,
    xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(6.3,sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
legend=c("czerwony", "zielony"),
title="Legenda",
box.lty=5, box.col=4, bg="#ccffff",
lty=c(2,3), col=2:3, lwd=2:3,
bty="n")

Program generuje następujące wykresy:

 

Dodanie opcji bty=”n” zlikwidowało działanie opcji związanych z wyglądem prostokąta na którym umieszczona jest legenda i wstawiło legendę bez obramowania.

Tytuł legendy nie zawsze jest potrzebny. Użycie haseł rozróżniających dane typu: “samiec”, “samica” nie wymaga wyjaśnienia, że jest to płeć. Ale już, na przykład, użycie wyjaśnień takich, jak “Negew”, “Lota” i “Registan”, wymagają tytułu “Pustynie”. Czasami jest to względne. W polskojęzycznej pracy nazwy “Wisła”, “Odra” nie wymagają tytułu, ale gdy przeznaczymy tę pracę do angielskojęzycznego czasopisma, lepiej jest zatytułować legendę “Rivers”.

Tytuł tworzy się przez dodanie opcji title=”” do funkcji legend() i powinien być najkrótszy jak się da. Często jest to słowo, które powinno być umieszczane przed każdym z haseł. Na przykład w tytule legendy jest “Ocean” a hasłami są “Atlanctycki”, “Spokojny”, “Indyjski”. Standardowo tytuł jest wyśrodkowany, ale można to zmienić opcją title.adj=x działającą tak, jak opcja adj=x w funkcji text(). Wygląda to następująco:

windows(4.5, 2.5)
par(mar=c(3,3,1,7), mgp=c(1.8,0.5,0), xpd=TRUE)
matplot(1:6,cbind(1:6,6:1), type="l", lty=2:3, lwd=2:3, col=2:3,
    xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(6.3,sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
legend=c("czerwony", "zielony"),
bty="n",
title="Legenda", title.adj=0,
lty=c(2,3), col=2:3, lwd=2:3)
#
windows(4.5, 2.5)
par(mar=c(3,3,1,7), mgp=c(1.8,0.5,0), xpd=TRUE)
matplot(1:6,cbind(1:6,6:1), type="l", lty=2:3, lwd=2:3, col=2:3,
    xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(6.3,sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
legend=c("czerwony", "zielony"),
bty="n",
title="Legenda", title.adj=0.85,
lty=c(2,3), col=2:3, lwd=2:3)

Program powoduje powstanie dwóch wykresów różniących się tylko umiejscowieniem tytułu legendy.

 

Napisy w legendzie można pogrubiać, pisać kursywą i stosować dla nich różne kolory. Służą do tego opcje text.font=n, text.col=”kolor”, title.col=”kolor”. Pogrybienie lub pochylenie czcionki tytułu legendy uzyskamy stosując opcje font w funkcji par() poprzedzającej legendę. Wygląda to następująco:

windows(4.5, 2.5)
par(mar=c(3,3,1,5), mgp=c(1.8,0.5,0), xpd=TRUE, font=2)
matplot(1:5, outer(1:5,1:5), type="l", col=rainbow(5),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(5.3, sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
text.font=1, text.col="blue", title.col="blue3",
bty="n", title="Tytuł",
legend=c(paste(letters[1:5],1:5)),
lty=1:5, col=rainbow(5))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,5), mgp=c(1.8,0.5,0), xpd=TRUE, font=3)
matplot(1:5, outer(1:5,1:5), type="l", col=rainbow(5),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(5.3, sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
text.font=2, text.col="red", title.col="red3",
bty="n", title="Tytuł",
legend=c(paste(letters[1:5],1:5)),
lty=1:5, col=rainbow(5))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,5), mgp=c(1.8,0.5,0), xpd=TRUE, font=4)
matplot(1:5, outer(1:5,1:5), type="l", col=rainbow(5),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(5.3, sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
text.font=3, text.col="green", title.col="green3",
bty="n", title="Tytuł",
legend=c(paste(letters[1:5],1:5)),
lty=1:5, col=rainbow(5))

Po wykonaniu tego programu powstają trzy wykresy:

Zdarza się, że w legendzie trzeba wyróżnić tak wiele wierszy, że się nie mieści na wykresie. Są na to trzy sposoby. Pierwszy to zmniejszenie czcionki opcją cex=x, co relatywnie zmniejszy także elementy graficzne. Drugi, to zmniejszenie odstępu między kolejnymi wierszami legendy opcją y.intersp=x, gdzie domyślnie x=1, a trzeba użyć liczby mniejszej. Trzeci, to napisanie legendy w dwóch lub więcej kolumnach. Służy do tego opcja ncol=n. Wygląda to następująco:

windows(4.5, 2.5)
par(mar=c(3,3,1,4.7), mgp=c(1.8,0.5,0), xpd=TRUE)
matplot(1:5, outer(1:5,1:10), type="l", col=rainbow(10),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(5.3, sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
legend=c("-5", "0", "5", "10", "15", "20", "25","30", "35", "40"),
title="Temp.", lty=1:8, seg.len=1, col=rainbow(10))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,4.7), mgp=c(1.8,0.5,0), xpd=TRUE)
matplot(1:5, outer(1:5,1:10), type="l", col=rainbow(10),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(5.3, sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
cex=0.8,
legend=c("-5", "0", "5", "10", "15", "20", "25","30", "35", "40"),
title="Temp.", lty=1:8, seg.len=1, col=rainbow(10))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,4.7), mgp=c(1.8,0.5,0), xpd=TRUE)
matplot(1:5, outer(1:5,1:10), type="l", col=rainbow(10),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(5.3, sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
y.intersp=0.8,
legend=c("-5", "0", "5", "10", "15", "20", "25","30", "35", "40"),
title="Temp.", lty=1:8, seg.len=1, col=rainbow(10))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,7.5), mgp=c(1.8,0.5,0), xpd=TRUE)
matplot(1:5, outer(1:5,1:10), type="l", col=rainbow(10),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(5.3, sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
ncol=2,
legend=c("-5", "0", "5", "10", "15", "20", "25","30", "35", "40"),
title="Temp.", lty=1:10, seg.len=1, col=rainbow(10))

Program tworzy trzy wykresy:

Pierwszy z wykresów pokazuje sytuację, gdy legenda nie mieści się na wykresie. Drugi i trzeci wykres obrazuje efekt zmniejszenia czcionki i odstępów między wierszami legendy. Czwarty wykres pokazuje legendę dwukolumnową.

W przypadku wielokolumnowych legend (ale nie tylko) może przydać się opcja x.intersp=x. Określa ona wielkość odstępu miedzy elementem graficznym (znacznikiem, linią lub prostokątem ze wzorem), a wyjaśnieniem słownym. W wielokolumnowych legendach może wyraźnie zmniejszyć ich szerokość. Można to zobaczyć za pomocą programu:

windows(4.5, 2.5)
par(mar=c(3,3,1,7.5), mgp=c(1.8,0.5,0), xpd=TRUE)
matplot(1:5, outer(1:5,1:14), type="l", col=rainbow(14),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(5.3, sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
ncol=2,
legend=c(paste(1:14*2)),
title="Temp.", lty=1:10, seg.len=1, col=rainbow(14))
#
windows(4.5, 2.5)
par(mar=c(3,3,1,6.5), mgp=c(1.8,0.5,0), xpd=TRUE)
matplot(1:5, outer(1:5,1:14), type="l", col=rainbow(14),
main="", xlab="Podpis osi 0X", ylab="Podpis osi 0Y")
legend(5.3, sum(par("usr")[3:4])/2, xjust=0, yjust=0.5,
ncol=2, x.intersp=0.1,
legend=c(paste(1:14*2)),
title="Temp.", lty=1:10, seg.len=1, col=rainbow(14))

Program generuje następujące wykresy:

 

Legenda związana z różnymi kolorami wypełnienia i teksturą

Obszary wypełnione różnymi kolorami występują w wykresach kołowych uzyskanych funkcja pie(), w wykresach słupkowych uzyskanych funkcją barplot() i w wykresach pudełkowych uzyskanych funkcją boxplot(). W wykresach tworzonych przez funkcje pie() i barplot() można utworzyć namiastkę tekstury stosując wypełnienie obszarów liniami o różnych kolorach, grubościach, kształtach i rodzajach, mające różne nachylenie do osi 0X. Te różne wypełnienia powinny zostać powtórzone w legendzie i wyjaśnione.

Rząd prostokącików wypełnionych zadanymi kolorami wstawia się do legendy za pomocą opcji fill=c(“kolor_1″,…,”kolor_n”). Można przy okazji zmieniać kolor obramowania prostokącików opcją border=”kolor”, co może czasem się przydać. Działanie tych opcji pokazuje następujący program:

windows(4.5, 2.5)
par(mar=c(2,0,0,7), xpd=TRUE)
pie(c(3,4,3,2,5,2), col=c("#ffffcc", "#ffccff", "#ccffff", "#ffcccc",
    "#ccffcc", "#ccccff"))
legend(1.3,0, xjus=0, yjust=0.5,
   fill=c("#ffffcc", "#ffccff", "#ccffff", "#ffcccc",
    "#ccffcc", "#ccccff"),
legend=c("bór dębowy", "las mieszany", "las liściasty", "las iglasty",
    "łęg podmokły"))
#
windows(4.5, 2.5)
par(mar=c(2,0,0,7), xpd=TRUE)
pie(c(3,4,3,2,5,2), col=c("#ffffcc", "#ffccff", "#ccffff", "#ffcccc",
    "#ccffcc", "#ccccff"), border=c("#ffff00", "#ff11ff", "#11ffff", "#ff1111",
    "#11ff11", "#1111ff"),)
legend(1.3,0, xjus=0, yjust=0.5,
   fill=c("#ffffcc", "#ffccff", "#ccffff", "#ffcccc", "#ccffcc", "#ccccff"),
   border=c("#ffff00", "#ff11ff", "#11ffff", "#ff1111", "#11ff11", "#1111ff"),
   legend=c("bór dębowy", "las mieszany", "las liściasty",
    "las iglasty", "łęg podmokły"))
#
windows(4.5, 2.5)
par(mar=c(2,0,0,7), xpd=TRUE)
pie(c(3,4,3,2,5,2), col=c("#ffffcc", "#ffccff", "#ccffff", "#ffcccc",
    "#ccffcc", "#ccccff"), border=NA)
legend(1.3,0, xjus=0, yjust=0.5,
   fill=c("#ffffcc", "#ffccff", "#ccffff", "#ffcccc", "#ccffcc", "#ccccff"),
   border=NA,
legend=c("bór dębowy", "las mieszany", "las liściasty", "las iglasty",
    "łęg podmokły"))

Powstają trzy wykresy:

W funkcji pie() i barplot() możemy zastosować namiastkę tekstury poprzez zastosowanie opcji angle=x i density=y. Takie same opcje z tymi samymi wartościami należy zastosować w legendzie. Jeżeli tekstura na wykresie słupkowym powstaje poprzez nakładanie ukośnych linii tak samo należy ją nałożyć w legendzie. Kolory tekstury wskazuje się opcją fill=””.

windows(4.5, 2.5)
par(mar=c(2,0,0,7), xpd=TRUE)
pie(c(3,4,3,5), col=c("#131313", "#363636", "#575757", "#797979"),
angle=1:4*30, density=2:5*5)
legend(1.3,0, xjus=0, yjust=0.5,
fill=c("#131313", "#363636", "#575757", "#797979"),
angle=1:4*30, density=2:5*5,
legend=c("PCBs", "HCHs", "HCB", "DDE"))
#
windows(4.5, 2.5)
y=c("A"=4,"B"=7,"C"=1,"D"=3,"E"=5,"F"=2)
par(mar=c(3,3,1,6), mgp=c(1.7,0.5,0), xpd=TRUE)
barplot(y, col=c("#ffcccc", "#ccccff", "#ccffcc"))
barplot(y,angle=c(0,45,90),density=20, col=c("red", "blue", "green3"), add=TRUE)
barplot(y,angle=c(0,135,0),density=20, col=c("red", "blue", "green3"), add=TRUE)
legend(7.5, 5, legend=c(" ", " ", " "),
fill=c("#ffcccc", "#ccccff", "#ccffcc"), bty="n")
legend(7.5, 5, legend=c(" ", " ", " "),
angle=c(0,45,90), density=20, fill=c("red", "blue", "green3"), bty="n")
legend(7.5, 5, legend=c("czerwony", "niebieski", "zielony"),
angle=c(0,135,0), density=20, fill=c("red", "blue", "green3"), bty="n")

Powyższy program generuje wykresy postaci:

 

Wspólna legenda do rycin złożonych z wielu wykresów

Pewne kłopoty może sprawić konieczność umieszczenia legendy na marginesie określonym przez parametr oma=c(x1,x2,x3,x4) funkcji par() wokół ryciny złożonej z kilku wykresów. Pokazuje to następujący przykład:

windows(4.5,2.5)
par(mar=c(1,1,0.5,2.5), mfrow=c(1,2),oma=c(1,1,1,5),xpd=TRUE)
barplot(c(3,2,6,3,1,2),col=c("green","blue","red"))
barplot(c(5,2,4,3,6,3),col=c("green","blue","red"))
legend (7.5,5,legend=c("zielony","niebieski","czerwony"), 
    fill=c("green","blue","red"))

Powstaje rycina postaci:

Legenda ujawnia się tylko na marginesie wyznaczonym przez opcje mar=c() a nie opcję oma=C(). Zbyt duża wartość odpowiedniego marginesu opcji mar=c(), taka żeby zmieścić legendę, powoduje brzydką dużą przerwę między wykresami. Zaradzić można temu bardzo prosto zmieniając wartość opcji xpd=TRUE na xpd=NA.

windows(4.5,2.5)
par(mar=c(1,1,0.5,1), mfrow=c(1,2),oma=c(1,1,1,5),xpd=NA)
barplot(c(3,2,6,3,1,2),col=c("green","blue","red"))
barplot(c(5,2,4,3,6,3),col=c("green","blue","red"))
legend (7.5,5,legend=c("zielony","niebieski","czerwony"), 
   fill=c("green","blue","red"))

Spowoduje to powstanie następującego wykresu:

Spis treści