user5878028
user5878028

Reputation: 117

ggplot axis custom order with duplicate labels

set.seed(357)
x <- data.frame(name = sample(letters, 10), val = runif(10), stringsAsFactors = F)
x[c(2,6),"name"] <- c("k","k")
ggplot(x, aes(x = name, y = val)) + theme_bw() + geom_bar(stat = "identity")

How can I plot the axis in the same order as x$name? (Yes, the k is duplicate, I want that to show up in the plot like this axis: c k g f o k s v t q)

In the past I used to do:

x$name <- factor(x$name, levels = x$name[order(x$val)], ordered = T)

which doesn't work any more thanks to: http://r.789695.n4.nabble.com/factors-with-non-unique-quot-duplicated-quot-levels-have-been-deprecated-since-2009-are-more-depreca-td4721481.html

This is no duplicate of: ggplot: order of factors with duplicate levels His data structure is completely different.

Also, I have tried setting limits in x_scale_discrete. Doesn't work.

Upvotes: 2

Views: 1679

Answers (2)

Andrew Gustar
Andrew Gustar

Reputation: 18425

Try this...

x$name2 <- 1:nrow(x)
ggplot(x, aes(x = factor(name2), y = val)) + theme_bw() + geom_bar(stat = "identity") + 
             scale_x_discrete(labels=x$name)

Upvotes: 5

keepAlive
keepAlive

Reputation: 6655

Actually, simply add the following setting xlab(x$name)

ggplot(x, aes(x = name, y = val)) + theme_bw() + geom_bar(stat = "identity") + xlab(x$name)

Upvotes: 0

Related Questions