Порядок печати в многогранной точечной диаграмме в ggplot2 - PullRequest
6 голосов
/ 23 января 2011

Я пытаюсь создать многогранную точечную диаграмму в ggplot2, но не могу получить внутренний аспект категории появляются в том порядке, который я хочу. Код для построения точечной диаграммы:

g <- ggplot(df2, aes(x=Y, y=label)) + geom_point() 
g <- g + facet_grid(incentive ~ .,   scale="free")
g <- g + geom_errorbarh(aes(xmax = Y + se, xmin = Y - se))  
g <- g + geom_vline(xintercept=1/6, linetype=2, colour="red") 
g <- g + opts(title="% Subjects Choosing Non-Focal Image",
          strip.text.y = theme_text()
          ) + xlab("%") + ylab("Groups")
print(g)

Проблема с сюжетом заключается в том, что в фасете «Только деньги» категории 1 цент и 5 центов расположены в неправильном порядке. Проблема, похоже, не в порядке самих факторов, а:

> levels(df2$label)
[1] "0"      "1"      "1 cent" "5 cent" "6"     
> 

alt text

Обновление : упорядочение коэффициента, по-видимому, не меняет порядок построения, т. Е. Построение с меткой 3, где:

df2 $ Метка3 1 0 1 1 цент 5 центов 6
Уровни: 0 <1 <1 цент <5 цент <6 </p>

>str(df2$label3)
Ord.factor w/ 5 levels "0"<"1"<"1 cent"<..: 1 2 3 4 5

Фактический фрейм данных:

df2 <- structure(list(Y = c(0.0869565217391304, 0.148148148148148, 0.172413793103448, 
0.384615384615385, 0.5625), group = c(0L, 1L, 5L, 3L, 6L), se = c(0.0856368459098186, 
0.079039229753282, 0.0762650540661762, 0.0805448741815074, 0.0726021684593052
), nudged = c(FALSE, TRUE, TRUE, TRUE, TRUE), incentive = structure(c(1L, 
2L, 3L, 3L, 4L), .Label = c("Default behavior", "Imbalance only", 
"Money only", "Money & Imbalance together"), class = "factor"), 
label = structure(1:5, .Label = c("0", "1", "1 cent", "5 cent", 
"6"), class = "factor"), plot_order = c(0, 1, 2, 3, 4)), .Names = c("Y", 
"group", "se", "nudged", "incentive", "label", "plot_order"), 
row.names = c("as.factor(group)0", 
"as.factor(group)1", "as.factor(group)5", "as.factor(group)3", 
"as.factor(group)6"), class = "data.frame")

Ответы [ 2 ]

9 голосов
/ 23 января 2011

Ваша проблема в том, что facet_grid отображает типы стимулов ('Поведение по умолчанию' и т. Д.) В порядке, который противоречит порядку значения стимула (0, 1 цент, 5 центов и т. Д.), Поэтому вы не получаете требуемый заказ в группе «Только деньги». Самый простой способ исправить это - переупорядочить коэффициент incentive, чтобы поведение по умолчанию отображалось на bottom , а не на top :

df2$incentive <- ordered( df2$incentive,
                 levels = rev(c("Default behavior", "Imbalance only", 
                                "Money only", "Money & Imbalance together"))) 

и оставьте остальной код как есть. Тогда вы получите этот сюжет: alt text

0 голосов
/ 23 января 2011

Это звучит и выглядит очень странно (поскольку метки отсортированы по порядку уровней факторов, как @Dirk Eddelbuettel также писал выше), но вы всегда можете использовать scale_discrete .

Я сделал небольшой пример на основе вашего кода, но это тоже немного странно, см .:

g <- ggplot(df2, aes(x=Y, y=label)) + geom_point()
# add manual scale
g <- g+ scale_y_discrete(limits=c("0","1","1 cent","5 cent","6"))
g <- g + facet_grid(incentive ~ .,   scale="free")
g <- g + geom_errorbarh(aes(xmax = Y + se, xmin = Y - se))  
g <- g + geom_vline(xintercept=1/6, linetype=2, colour="red") 
g <- g + opts(title="% Subjects Choosing Non-Focal Image",
      strip.text.y = theme_text()
      ) + xlab("%") + ylab("Groups")

ggplot example plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...