简体   繁体   中英

ggplot2 barplot

I have small data.frame which I managed to plot in ggpot. Since ggplot does not support patterns , I graph the data with colors. I would appreciate a better presentation than the one I did in terms of coloring and design or even black and white. Also, I couldn't change the legend title

My data:

structure(list(Type = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
9L, 8L), .Label = c("Type A+Mod ", "Type B+C+D", "Type E+A", 
"Type G+W", "Type H & Mod C", "Type Operation", "Type Production", 
"Type Sales", "X, T, S"), class = "factor"), X2011 = structure(c(7L, 
4L, 6L, 5L, 9L, 8L, 3L, 1L, 2L), .Label = c("$1,517.00", "$1,579.00", 
"$1,727.00", "$105,352.00", "$126,787.00", "$141,647.00", "$187,506.00", 
"$24,968", "$30,397.00"), class = "factor"), X2012 = structure(c(7L, 
6L, 5L, 4L, 8L, 9L, 3L, 2L, 1L), .Label = c("$1,232.00", "$1,406.00", 
"$1,963.00", "$109,533.00", "$125,795.00", "$166,251.00", "$172,238.00", 
"$18,040.00", "$23,541.00"), class = "factor"), X2013 = structure(c(8L, 
4L, 3L, 2L, 7L, 6L, 5L, 1L, 9L), .Label = c("$1,324.00", "$102,216.00", 
"$125,101.00", "$198,769.00", "$2,088.00", "$20,070.00", "$21,094.00", 
"$243.91", "$997.00"), class = "factor")), .Names = c("Type", 
"X2011", "X2012", "X2013"), class = "data.frame", row.names = c(NA, 
-9L))

The code:

colnames(DF)<-c("Type","2011","2012","2013")
dfMelt<-melt(DF, id.var="Type")
graph<- ggplot(dfMelt,aes(x=Type, y=value))+
geom_bar(aes(fill=variable),stat="identity", position="dodge",linetype=1,colour="red")+

#Tried this for black and white-Seems not working
#scale_colour_grey(start = 0, end = .9) +

theme_bw()+
theme(panel.background = element_rect(fill="grey98"))+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+

theme(axis.title.x=element_text(size=14,face="bold",vjust=-0.2),
      axis.title.y=element_text(size=14,face="bold",vjust=0.15))+ 
theme(axis.ticks.x = element_line(size = 2))+

scale_x_discrete(expand=c(0.01,0))+
scale_y_discrete(expand=c(0.004,0.5))


print(graph)

Your values are being treated as factors rather than numbers, so the chart doesn't make sense. So first you want to convert them to numeric values:

DF <- cbind(DF[1],sapply(DF[-1], function(x) as.numeric(gsub("[$,]","",x))))

Then you can proceed as before, but obviously changing the discrete scale expansion on the y axis to a continuous one which also formats the values as dollars and using the Blues Brewer palette with scale_fill_brewer which works well in black and white and in colour. You can set the legend title when setting the palette here too.

dfMelt<-melt(DF, id.var="Type")
graph<- ggplot(dfMelt,aes(x=Type, y=value))+
geom_bar(aes(fill=variable),stat="identity", position="dodge",linetype=1,colour="red")+
theme_bw()+
theme(panel.background = element_rect(fill="grey98"))+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+

theme(axis.title.x=element_text(size=14,face="bold",vjust=-0.2),
      axis.title.y=element_text(size=14,face="bold",vjust=0.15))+ 
theme(axis.ticks.x = element_line(size = 2))+

scale_x_discrete(expand=c(0.01,0))+
scale_y_continuous("Price",labels=dollar)+

scale_fill_brewer("Year", palette="Blues")

Which gives:

条形图

First of all, your data is not in the correct format. Now it's a factor-variable and it needs to be numeric. Moreover remove the comma's (for the thousands) and the $ valuta-sign. I also cleaned up the ggplot code.

DF <- cbind(DF[1],sapply(DF[-1], function(x) as.numeric(gsub("[$,]","",x)))) # copied from James
colnames(DF)<-c("Type","2011","2012","2013")
dfMelt <- melt(DF, id.var="Type")

ggplot(dfMelt,aes(x=Type, y=value)) +
  geom_bar(aes(fill=variable),stat="identity", position="dodge") +
  theme_bw() +
  theme(panel.background = element_rect(fill="grey98"),
        axis.text.x = element_text(angle = 45, hjust = 1),
        axis.title.x=element_text(size=14,face="bold",vjust=-0.2),
        axis.title.y=element_text(size=14,face="bold",vjust=0.15),
        axis.ticks.x = element_line(size = 2)) +
  scale_y_continuous("Price (in dollars)") +
  scale_fill_discrete("Year")

The result: 在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM