2016-06-20 29 views
0

Neu bei R und versuchen, den Barplot herauszufinden.
Ich versuche, ein Barplot in R zu erstellen, das Daten aus 2 Spalten anzeigt, die nach einer dritten Spalte gruppiert sind.Barplot mit mehreren Spalten in R

Datenrahmen Name: SprintTotalHours

Spalten mit Daten:

OriginalEstimate,TimeSpent,Sprint 
178,471.5,16.6.1 
210,226,16.6.2 
240,195,16.6.3 

Ich möchte ein BarPlot, die die OriginalEstimate neben dem TimeSpent für jeden Sprint zeigt. Ich versuchte dies aber ich bin nicht das bekommen, was ich will:

colours = c("red","blue") 

barplot(as.matrix(SprintTotalHours),main='Hours By Sprint',ylab='Hours', xlab='Sprint' ,beside = TRUE, col=colours) 

abline(h=200) 

Ich mag Basis Grafiken verwenden, aber wenn es dann nicht getan werden kann, ich ablehne kein Paket bei Bedarf zu installieren.

Sweet Paint Skills

Antwort

4

plot

cols <- c('red','blue'); 
ylim <- c(0,max(SprintTotalHours[c('OriginalEstimate','TimeSpent')])*1.8); 
par(lwd=6); 
barplot(
    t(SprintTotalHours[c('OriginalEstimate','TimeSpent')]), 
    beside=T, 
    ylim=ylim, 
    border=cols, 
    col='white', 
    names.arg=SprintTotalHours$Sprint, 
    xlab='Sprint', 
    ylab='Hours', 
    legend.text=c('Estimated','TimeSpent'), 
    args.legend=list(text.col=cols,col=cols,border=cols,bty='n') 
); 
box(); 

Daten

SprintTotalHours <- data.frame(OriginalEstimate=c(178L,210L,240L),TimeSpent=c(471.5,226, 
195),Sprint=c('16.6.1','16.6.2','16.6.3'),stringsAsFactors=F); 
+1

sehr freche Herr Gold Street. Ich werde in 3 Stunden wählen – rawr

+1

Ha, ich liebe das. – alistaire

+0

Ich nahm eine Mischung aus dieser Antwort und der von digEmAll, um das gewünschte Aussehen zu bekommen. Dies ist letztendlich meine Entscheidung, weil es genau wie meine beschissene Malzeichnung aussah, also Anforderungen erfüllt! Allerdings habe ich Code von digEmAll verwendet, damit es eher wie sein klassisches Beispiel aussieht, dass ich nicht weiß, was ich will :) Danke! – JRDew

2

Mit Base R:

DF <- read.csv(text= 
"OriginalEstimate,TimeSpent,Sprint 
178,471.5,16.6.1 
210,226,16.6.2 
240,195,16.6.3") 

# prepare the matrix for barplot 
# note that we exclude the 3rd column and we transpose the data 
mx <- t(as.matrix(DF[-3])) 
colnames(mx) <- DF$Sprint 

colours = c("red","blue") 
# note the use of ylim to give 30% space for the legend 
barplot(mx,main='Hours By Sprint',ylab='Hours', xlab='Sprint',beside = TRUE, 
     col=colours, ylim=c(0,max(mx)*1.3)) 
# to add a box around the plot 
box() 

# add a legend 
legend('topright',fill=colours,legend=c('OriginalEstimate','TimeSpent')) 

enter image description here

+1

Große Antwort, funktioniert wie erwartet und lieben die Noten. Ich benutzte eine Kombination aus dieser Antwort und der von bgoldst, um das gewünschte Aussehen zu erhalten. Letztendlich wähle bgoldst, weil er dem Look and Feel meines Lackbeispiels entspricht. Allerdings mag ich das Aussehen dieses einen besser, also nahm ich auch etwas Code von hier. Vielen Dank! – JRDew

+0

Froh, um Hilfe zu sein :) – digEmAll

2

Sie müssen lange Form schmelzen, so können Sie Gruppe. Während Sie können tun dies in der Basis R, nicht viele Leute, obwohl es eine Vielzahl von Paketoptionen (hier tidyr). Auch hier gibt ggplot2 Sie bessere Ergebnisse mit weniger Arbeit, und die Art und Weise Plotten am Ende die meisten Leute:

ggplot

Verwenden Basis R

library(tidyr) 
library(ggplot2) 

ggplot(data = SprintTotalHours %>% gather(Variable, Hours, -Sprint), 
     aes(x = Sprint, y = Hours, fill = Variable)) + 
    geom_bar(stat = 'identity', position = 'dodge') 
wenn Sie es vorziehen, aber dieser Ansatz (mehr oder weniger) ist der herkömmliche Ansatz an dieser Stelle.