Данные заказа внутри geom_tile - PullRequest
11 голосов
/ 19 апреля 2011

У меня есть фрейм данных, и я хочу сгенерировать из него график geom_tile(), но я хочу, чтобы график был упорядочен не по алфавиту, а по переменной внутри этого фрейма данных.

structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"), 
    V2 = c("r", "w", "q", "m", "l", "q", "g"), V3 = c( 
    "5", "2", "9", "2", "1", "3", "0")), .Names = c("V1", "V2", 
"V3"), class = "data.frame", row.names = c(NA, -8L))

Я хочу упорядочить график на основе переменной V3, потому что при обычном построении графики они будут упорядочены по буквам в V1 и V2.

Как это можно сделать ??

Ответы [ 2 ]

18 голосов
/ 19 апреля 2011

Я обычно стараюсь использовать уровни, чтобы исправить свои данные перед рукой:

x <- structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"), 
    V2 = c("r", "w", "q", "m", "l", "q", "g"), V3 = c( 
    "5", "2", "9", "2", "1", "3", "0")), .Names = c("V1", "V2", 
"V3"), class = "data.frame", row.names = c(NA, -8L))

x <- x[1:7,]

x$V1 <- factor(x$V1, levels=(x$V1)[order(x$V3)])

# Note it's not an ordered factor, it's a factor in the right order

ggplot(x, aes(V1, V3)) + geom_tile()

enter image description here

ОБНОВЛЕНИЕ:

Все еще не совсем ясно о ваших размерах, но, возможно, что-то вроде:

x$V2 <- factor(x$V2, levels=(x$V2)[order(x$V3)])

ggplot(x, aes(V1,V2,fill=V3)) + geom_tile() 

enter image description here

13 голосов
/ 15 мая 2014

В качестве ответа на дублирующий вопрос приведено решение, которое использует ggplot напрямую и не требует изменения данных.

x <- structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"), 
                    V2 = c("r", "w", "q", "m", "l", "q", "g"), 
                    V3 = c( "5", "2", "9", "2", "1", "3", "0")), 
               .Names = c("V1", "V2", "V3"), class = "data.frame", 
               row.names = c(NA, -8L))

x <- x[1:7,]

ggplot(x, aes(V1, V2, fill=V3)) + geom_tile() +
  scale_x_discrete(limits=(x$V1)[order(x$V3)]) + 
  scale_y_discrete(limits=(x$V2)[order(x$V3)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...