Pylväsdiagrammi R:ssä

Kun muuttuja ottaa muutamia arvoja, on tavallista tiivistää tiedot frekvenssitaulukkoon, joka voidaan esittää pylväsdiagrammin tai pylväsdiagrammin avulla R:ssä. Tässä artikkelissa kerromme pylväsdiagrammien luomisen perusteet R:ssä.

R:n pylväsdiagrammifunktio

Pylväsdiagrammin luomiseen R:ssä voit käyttää R:n perusfunktiota barplot. Tässä esimerkissä luomme pylväsdiagrammin datakehyksestä. Tarkemmin sanottuna esimerkkitietokanta on tunnettu mtcars. Lataa ensin tiedot ja luo cyl-sarakkeelle taulukko table-funktiolla.

# Load datadata(mtcars)attach(mtcars)# Frequency tablemy_table <- table(cyl)my_table
cyl 4 6 811 7 14

Muista, että luodaksesi pylväsdiagrammin R:ssä voit käyttää barplot-funktiota, joka asettaa parametriksi aiemmin luodun taulukkosi näyttämään tietojen absoluuttisen frekvenssin. Jos haluat kuitenkin mieluummin pylväsdiagrammin, jonka pystyakselilla on prosentteja (suhteellinen frekvenssi), voit käyttää prop.table-funktiota ja kertoa tuloksen 100:lla seuraavasti:

# One row, two columnspar(mfrow = c(1, 2))# Absolute frequency barplotbarplot(my_table, main = "Absolute frequency", col = rainbow(3))# Relative frequency barplotbarplot(prop.table(my_table) * 100, main = "Relative frequency (%)", col = rainbow(3))par(mfrow = c(1, 1))

Huomaa, että voit luoda pylväsdiagrammin myös faktoridatan avulla plot-funktiolla.

plot(factor(mtcars$cyl), col = rainbow(3))

Lisäksi voit näyttää pylväissä numeroita tekstifunktiolla seuraavasti:

barp <- barplot(my_table, col = rainbow(3), ylim = c(0, 15))text(barp, my_table + 0.5, labels = my_table)
Pylväsdiagrammin määrittäminen muuttujan sisälle tallentaa kunkin pylvään keskikohtaa vastaavat akseliarvot.

Palkkien taakse voi myös lisätä ruudukon grid-funktiolla.

barp <- barplot(my_table, col = rainbow(3), ylim = c(0, 15))grid(nx = NA, ny = NULL, lwd = 1, lty = 1, col = "gray")barplot(my_table, col = rainbow(3), ylim = c(0, 15), add = TRUE)

Pylväsdiagrammin graafiset parametrit: otsikko, akselien merkinnät ja värit

Kuten muitakin piirtoalueita, myös palkkidiagrammeja varten voi määritellä monenlaisia graafisia parametreja, kuten akselien merkinnät ja otsikon, tai muokata akseleita. Edellisessä koodilohkossa muokkasimme barplotin värejä col-parametrilla. Voit määrittää haluamasi värit vektorilla tai käyttää rainbow-funktiota, jonka parametrina on palkkien lukumäärä, kuten me teimme, tai käyttää muita väripalettitoimintoja. Voit myös muuttaa palkkien reunaväriä border-argumentilla.

barplot(my_table, # Data main = "Customized bar plot", # Title xlab = "Number of cylinders", # X-axis label ylab = "Frequency", # Y-axis label border = "black", # Bar border colors col = c("darkgrey", "darkblue", "red")) # Bar colors

Ryhmien etikettien muuttaminen

Kunkin ryhmän etiketti voidaan muuttaa names.arg-argumentilla. Esimerkissämme ryhmät on merkitty numeroilla, mutta voimme muuttaa niitä kirjoittamalla jotain seuraavanlaista:

barplot(my_table, names.arg = c("four", "six", "eight")) 

Palkkien leveys ja väli

Palkkien välejä ja välejä

Palkkien välejä tai palkkien leveyttä voi muuttaa myös argumenteilla width ja space. Ryhmien välisen tilan osalta tutustu tämän ohjeen vastaavaan osaan.

par(mfrow = c(1, 2))# Bar width (by default: width = 1)barplot(my_table, main = "Change bar width", col = rainbow(3), width = c(0.4, 0.2, 1))# Bar spacebarplot(my_table, main = "Change space between bars", col = rainbow(3), space = c(1, 1.1, 0.1))par(mfrow = c(1, 1))
Vektori space edustaa palkin tilaa edelliseen nähden, joten ensimmäistä elementtiä ei oteta huomioon.

Pylväsdiagrammi datakehyksestä tai listasta

Lisäksi voit luoda pylväsdiagrammin suoraan datakehyksen tai jopa matriisin muuttujista, mutta huomaa, että muuttujan tulee olla jonkin tapahtuman tai ominaisuuden laskenta. Seuraavassa esimerkissä laskemme ajoneuvojen määrän värin mukaan ja kuvaamme ne pylväsdiagrammilla. Käytämme kunkin auton väriä vastaavien palkkien värittämiseen.

df <- data.frame(carColor = c("red", "green", "white", "blue"), count = c(3, 5, 9, 1))# df <- as.list(df) # Equivalentbarplot(height = df$count, names = df$carColor, col = c("red", "green", "white", "blue"))

Palkkikaavio jatkuvalle muuttujalle

Työskennellessäsi jatkuvan muuttujan kanssa sinun on käytettävä cut-funktiota tietojen luokitteluun. Muuten, jos ei ole yhtäläisyyksiä, sinulla on yhtä monta palkkia kuin vektorisi pituus ja palkkien korkeudet ovat yhtä suuret kuin 1. Seuraavassa esimerkissä jaamme datamme 0:sta 45:een 5:n askelin argumentilla breaks.

x <- c(2.1, 8.6, 3.9, 4.4, 4.0, 3.7, 7.6, 3.1, 5.0, 5.5, 20.2, 1.7, 5.2, 33.7, 9.1, 1.6, 3.1, 5.6, 16.5, 15.8, 5.8, 6.8, 3.3, 40.6)barplot(table(cut(x, breaks = seq(0, 45, by = 5))))

Vaakasuora pylväsdiagrammi

Oletusarvoisesti pylväsdiagrammit R:ssä piirretään pystysuoraan. On kuitenkin yleistä esittää vaakasuoria pylväsdiagrammeja. Voit kääntää kuvaajaa 90º ja luoda vaakasuuntaisen pylväsdiagrammin asettamalla horiz-argumentin arvoksi TRUE.

barplot(my_table, main = "Barchart", ylab = "Number of cylinders", xlab = "Frequency", horiz = TRUE) # Horizontal barplot

R-pylväsdiagrammin legenda

R:n pylväsdiagrammiin voidaan lisätä legenda legend.text-argumentilla, jossa määritetään nimiä, jotka halutaan lisätä legendaan. Huomaa, että RStudiossa tuloksena saatava kuvaaja voi olla hieman erilainen, sillä legendan tausta on valkoinen eikä läpinäkyvä.

barplot(my_table, xlab = "Number of cylinders", col = rainbow(3), legend.text = rownames(my_table)) # Legend
Huomaa, että käyttämällä legend.text-argumenttia legenda voi mennä päällekkäin pylväsdiagrammin kanssa.

Helppoimmin tämän ongelman ratkaisee tässä esimerkissä legendan siirtäminen. Tämä voidaan toteuttaa args.legend-argumentilla, jossa voit asettaa graafisia parametreja luettelon sisällä. Voit asettaa sijainniksi top, bottom, topleft, topright, bottomleft ja bottomright.

barplot(my_table, xlab = "Number of cylinders", col = rainbow(3), legend.text = rownames(my_table), args.legend = list(x = "top"))

Yhtälailla saat aikaiseksi edellisen piirroksen, jossa legenda on legend-funktiolla legend, seuraavasti legend– ja fill-argumenteilla.

barplot(my_table, xlab = "Number of cylinders", col = rainbow(3))legend("top", legend = rownames(my_table), fill = rainbow(3))

Tämä lähestymistapa toimii kuitenkin hyvin vain, jos legenda ei ole päällekkäin palkkien kanssa kyseisissä paikoissa. Parempi lähestymistapa on siirtää legenda oikealle, pois pylväsdiagrammista. Voit tehdä tämän asettamalla inset-argumentin, joka välitetään args.legend-argumentin sisällä olevan luettelon elementtinä, seuraavasti:

par(mar = c(5, 5, 4, 10))barplot(my_table, xlab = "Number of cylinders", col = rainbow(3), legend.text = rownames(my_table), # Legend values args.legend = list(x = "topright", inset = c(-0.20, 0))) # Legend arguments

Voisit myös muuttaa akselien raja-arvoja xlim– tai ylim-argumenteilla pystysuuntaisia ja vaakasuuntaisia pylväsdiagrammeja varten, mutta huomioi, että tällöin määritettävä arvo riippuu palkkien lukumäärästä ja leveydestä. Muista, että jos osoitat pylväsdiagrammin muuttujalle, voit tallentaa kunkin pylvään keskipistettä vastaavat akselipisteet.

barplot(my_table, xlab = "Number of cylinders", col = rainbow(3), legend.text = rownames(my_table), xlim = c(0, 4.25))

Vaihtoehto legendan siirtämiseen on myös siirtää se pylväsdiagrammin alle layout-, par– ja plot.new-funktioilla. Tämä lähestymistapa on edistyneempi kuin muut, ja sinun on ehkä tyhjennettävä graafiset parametrit ennen koodin suorittamista, jotta saat oikean kuvaajan, koska graafiset parametrit muuttuvat.

# dev.off()# opar <- par(no.readonly = TRUE)plot.new()layout(rbind(1, 2), heights = c(10, 3))barplot(my_table, xlab = "Number of cylinders", col = rainbow(3))par(mar = c(0, 0, 0, 0))plot.new()legend("top", rownames(my_table), lty = 1, col = c("red", "green", "blue"), lwd = c(1, 2))# dev.off()# on.exit(par(opar))

Ryhmitetty pylväsdiagrammi R:ssä

Ryhmitetty pylväsdiagrammi, joka tunnetaan myös nimellä side-by-side-pylväsdiagrammi (side-by-side bar plot) tai klusteroitu pylväsdiagrammi (clustered bar chart) on R:ssä laadittu pylväsdiagrammi, jossa on kaksi tai useampi muuttuja. Kaavio näyttää kunkin useamman muuttujan pylväät.

# Variable am to factoram <- factor(am)# Change factor levelslevels(am) <- c("Automatic", "Manual")# Table cylinder - transmission typeother_table <- table(cyl, am)# other_table <- xtabs(~cyl + am , data = mtcars) # Equivalentbarplot(other_table, main = "Grouped barchart", xlab = "Transmission type", ylab = "Frequency", col = c("darkgrey", "darkblue", "red"), legend.text = rownames(other_table), beside = TRUE) # Grouped bars

Huomaa, että jos olisimme määritelleet table(cyl, am):n sijasta table(am, cyl), X-akseli kuvaisi sylinterien lukumäärää vaihteistotyypin sijasta.

Ryhmien väli

Kuten aiemmin tarkastelimme, pylväiden välejä voi muuttaa. Jos ryhmiä on useita, voit asettaa kaksielementtisen vektorin, jonka ensimmäinen elementti on kunkin ryhmän palkkien väli (0,4) ja toinen ryhmien välinen väli (2,5).

barplot(other_table, main = "Grouped barchart space", xlab = "Transmission type", ylab = "Frequency", col = c("darkgrey", "darkblue", "red"), legend.text = rownames(other_table), beside = TRUE, space = c(0.4, 2.5)) # Space 

Numeeriset arvot ryhmissä

Palkkikaavioita voidaan käyttää myös muuttujan yhteenvedon tekemiseen ryhmittäin, jotka on annettu yhdellä tai useammalla tekijällä. Ajatellaan esimerkiksi, että halutaan näyttää sylinterien lukumäärä ja voimansiirtotyyppi autojen hevosvoimien keskiarvon perusteella. Voit käyttää tapply-funktiota vastaavan taulukon luomiseen:

summary_data <- tapply(mtcars$hp, list(cylinders = mtcars$cyl, transmission = mtcars$am), FUN = mean, na.rm = TRUE)summary_data
 transmissioncylinders Automatic Manual 4 84.66667 81.8750 6 115.25000 131.6667 8 194.16667 299.5000

Nyt voit luoda vastaavan pylväsdiagrammin R:ssä:

par(mar = c(5, 5, 4, 10))barplot(summary_data, xlab = "Transmission type", main = "Horsepower mean", col = rainbow(3), beside = TRUE, legend.text = rownames(summary_data), args.legend = list(title = "Cylinders", x = "topright", inset = c(-0.20, 0)))

Virhepalkkeja sisältävä pylväsdiagrammi R:ssä

Oletusarvoisesti pylväsdiagrammia, jossa on virhepalkkeja, ei voi luoda. Seuraavalla funktiolla voit kuitenkin luoda täysin mukautettavan pylväsdiagrammin, jossa on vakiovirhepalkit.

# Arguments:# x: an unique factor object# y: a numeric vector object# ...: additional arguments to be passed to barplot functionbarplot.error <- function(x, y, ...){ mod <- lm(y ~ x) reps <- sqrt(length(y)/length(levels(x))) sem <- sigma(mod)/reps means <- tapply(y, x, mean) upper <- max(means) + sem lev <- levels(x) barpl <- barplot(means, ...) invisible(sapply(1:length(barpl), function(i) arrows(barpl, means + sem, barpl, means - sem, angle = 90, code = 3, length = 0.08)))}# Calling the functionbarplot.error(factor(mtcars$cyl), mtcars$hp, col = rainbow(3), ylim = c(0, 250))

Vaikka pylväsdiagrammiin voikin lisätä virhepalkkeja, on syytä huomioida, että laatikkodiagrammi ryhmittäin saattaisi olla tässä skenaariossa parempi lähestymistapa tietojen yhteenvetoon.

Pinotettu pylväsdiagrammi R:ssä

Pinotettu pylväsdiagrammi on kuin ryhmitelty pylväsdiagrammi, mutta muuttujien frekvenssit on pinottu. Tämäntyyppinen pylväsdiagrammi luodaan oletusarvoisesti, kun argumenttina annetaan taulukko, jossa on kaksi tai useampia muuttujia, sillä argumentin beside oletusarvo on FALSE.

barplot(other_table, main = "Stacked barchart", xlab = "Transmission type", ylab = "Frequency", col = c("darkgrey", "darkblue", "red"), legend.text = rownames(other_table), beside = FALSE) # Stacked bars (default)

Pinotetuille pylväsdiagrammeille on olemassa samankaltaisia toteutustapoja, kuten selkärangan piirto (spine plot) ja mosaiikkidiagrammi. Tällaisia plotteja voidaan luoda graphics-paketin spineplot– ja mosaicplot-funktioilla.

Mosaiikkiplotin avulla voidaan visualisoida kahden tai useamman kvantitatiivisen muuttujan tietoja, joissa kunkin suorakulmion pinta-ala edustaa kyseisen muuttujan osuutta kussakin ryhmässä.

# install.packages("graphics")library(graphics)mosaicplot(other_table, main = "Mosaic plot")

Selkärankapiirros on mosaiikkiplotin erikoistapaus, ja se on pinotun pylväspiirroksen (stacked barplot) yleistys. Tässä tapauksessa, toisin kuin pinotuissa pylväsdiagrammeissa, jokainen pylväs laskee yhteen.

spineplot(other_table)

Huomaa, että oletusarvoisesti akselit on vaihdettu keskenään edellisessä kappaleessa luomasi pinotun pylväsdiagrammin suhteen. Voit luoda vastaavan pylväsdiagrammin transponoimalla frekvenssitaulukon t-funktiolla.

spineplot(t(other_table))

Pylväsdiagrammi R:ssä: ggplot2

ggplot2-kirjasto on tunnettu grafiikkakirjasto R:ssä. Voit luoda pylväsdiagrammin tällä kirjastolla muuntamalla datan datakehykseksi ja ggplot– ja geom_bar-funktioilla. Argumentissa aes sinun on välitettävä datakehyksen muuttujien nimet. Kohdassa x kategorinen muuttuja ja kohdassa y numeerinen muuttuja.

# install.packages("ggplot2")library(ggplot2)df <- as.data.frame(my_table)ggplot(data = df, aes(x = cyl, y = Freq)) + geom_bar(stat = "identity")

Vaakasuora pylväsdiagrammi ggplot2

Jos haluat kääntää edellistä pylväsdiagrammia, käytä coord_flip-funktiota seuraavasti.

ggplot(data = df, aes(x = cyl, y = Freq)) + geom_bar(stat = "identity") + coord_flip() # Horizontal bar plot

Vastaa

Sähköpostiosoitettasi ei julkaista.