2017-02-15 1 views
1

Используя следующие данные, я пытаюсь создать график для презентации:Refining ggplot R код так аннотированный прямоугольник появляется за сюжетные

name = c("Phil", "Ian", "Leslie", "Darla", "Silvia", "Ron", "Emily", "Jack") 
score = c(73.8, 73.5, 70.3, 68.9, 65.3, 61.4, 55.2, 54.3) 
tx = c(0,0,1,0,0,0,0,0) 
test1 <- data.frame(name, score, tx) 

График предназначен для отображения каждой точки, как большой круг с значение точки графика внутри круга. Красная пунктирная линия представляет среднее значение построенных значений. Серый прямоугольник представляет собой стандартное отклонение вокруг среднего значения. Вот код, который я использую для создания графика:

library(ggplot2) 
library(scales) 

cols <- c("1" = "#ff7f0e", "0" = "#1f77b4") 
txctrl <- c("1" = "#ffffff", "0" = "#000000") 

ggplot(test1, aes(x=score, y=reorder(name,score))) + 
    geom_vline(aes(xintercept=mean(score)), colour="red", linetype="dashed", size=1) + 
    geom_point(aes(colour = factor(tx), size=0), show.legend = FALSE) + 
    annotate("rect", xmin=(mean(test1$score)-sd(test1$score)), xmax=(mean(test1$score)+sd(test1$score)), ymin=-Inf, ymax=Inf, alpha=0.5, fill="grey90") + 
    # geom_label(aes(label=score), colour=txctrl, fontface = "bold") + 
    scale_colour_manual(values=cols) + 
    scale_size(range=c(11,11)) + 
    xlim(52,78) + 
    geom_text(aes(label=score), hjust=0.5, vjust=0.5, size=5, label=round(test1$score, digits = 0)) + 
    labs(y='Name', x='Score') + 
    theme_bw() + 
    theme(panel.border = element_blank(), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     axis.line = element_line(color=NA), 
     axis.ticks = element_blank(), 
     axis.text.x = element_blank(), 
     axis.title.x = element_blank(), 
     axis.text.y = element_text(size=14), 
     axis.title.y = element_blank()) 

Вот результат приведенного выше кода:

Resulting graph of preceding code.

Проблема Я бегу в прямоугольник исчезает цвет сюжетных точек. Как я могу заставить серый прямоугольник появляться за точками графика и знаками значений?

Работая слоем, мне удалось получить пунктирную среднюю линию, чтобы сидеть за пунктами графика. Когда я пытаюсь переместить аннотированный прямоугольник где-нибудь перед слоем, определяющим точки графика, я получаю сообщение об ошибке.

+1

Порядок добавления слоев в ggplot - это порядок их рисования. Переместите аннотацию перед 'geom_point()'. Не добавляйте «бонусы» к вопросам. Задавайте один вопрос одновременно. – MrFlick

+0

Это может быть полезно: http://stackoverflow.com/questions/20249653/insert-layer-underneath-existing-layers-in-ggplot2-object – jesstme

ответ

1

Попробуйте использовать geom_rect вместо аннотации. Затем вы захотите удалить свою эстетику из функции aes. Я не могу сказать, почему это вызывает ошибку, но это так.

Вы можете изучить ниже, чтобы посмотреть, что я имею в виду.

ggplot(test1, aes(x=score, y=reorder(name,score))) + 
geom_rect(xmin=(mean(score)-sd(score)), xmax=(mean(score)+sd(score)),ymin=-Inf, ymax=Inf, alpha=0.5,fill="grey90") + 
geom_vline(aes(xintercept=mean(score)), colour="red", linetype="dashed", size=1) + 
geom_point(aes(colour = factor(tx), size=0), show.legend = FALSE) + 
scale_colour_manual(values=cols) + 
scale_size(range=c(11,11)) + 
xlim(52,78) + 
geom_text(aes(label=score), hjust=0.5, vjust=0.5, size=5, label=round(test1$score, digits = 0)) + 
labs(y='Name', x='Score') + 
theme_bw() + 
theme(panel.border = element_blank(), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    axis.line = element_line(color=NA), 
    axis.ticks = element_blank(), 
    axis.text.x = element_blank(), 
    axis.title.x = element_blank(), 
    axis.text.y = element_text(size=14), 
    axis.title.y = element_blank()) 
+0

Благодарим вас за предоставление дополнительного направления. Я попытался использовать geom_rect, но не удалил эстетику из функции aes. Это обеспечило решение, на которое я застрял. – Vondredi

Смежные вопросы