2016-12-08 7 views
0

Ответ here кажется, что он должен получить меня туда, где я хочу, но у меня возникли проблемы с отладкой ошибки при попытке применить ее.Маркировка одиночной обрезанной колонны в ggplot из двух распределений гистограммы

Вот код (который отлично работает), чтобы нарисовать два дистрибутива вместе и «увеличить», чтобы обрезать самую высокую полосу одного из распределений.

data(iris) 

#Round Sepal.Length for Binning 
iris$Sepal.Length = round(iris$Sepal.Length) 

#Drop versicolor rows so density plot comes out skewed like my data 
iris <- iris[iris$Species!="versicolor",] 

#Plot density plot, truncating 0.8 column at (setosa, 5) 
p <-ggplot(iris, aes(x=Sepal.Length, y=..density.., fill=Species)) + 
    geom_histogram(binwidth=1, alpha=0.5, position = 'identity') + 
    coord_cartesian(ylim = c(0, 0.6)) 

p 

enter image description here

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

p + geom_text(data=as.data.frame(ggplot_build(p)$data), 
       aes(x=5, y=0.5, label = paste0("Bar Height: ", max(density)))) 

Я получаю ошибку

Ошибка в Eval (выражение, Envir, Enclos): объект «Вид» не найден

Вот выход as.data.frame(ggplot_build(p)$data)$density

0.10 0.80 0.10 0.00 0.00 0.00 0.02 0.54 0.32 0.12 
+0

Кажется, что это похоже на [это] (http://stackoverflow.com/questions/12629647/adding-geom-path-and-geom-text-to-the-same-ggplot-generates-error-in- р) – Haboryme

ответ

2

proble m - это то, что вы определили эстетический fill как вид в глобальном масштабе в заявлении ggplot(). Когда вы добавляете текстовую геометрию, ggplot ищет «Species» для определения цвета заливки, которого нет во втором кадре данных.

Вы можете решить эту проблему двумя способами: либо переместить fill=Species из ggplot заявления на geom_histogram заявление:

p <-ggplot(iris, aes(x=Sepal.Length, y=..density..)) + 
geom_histogram(binwidth=1, alpha=0.5, position = 'identity', aes(fill=Species)) + 
coord_cartesian(ylim = c(0, 0.6)) 

или перезаписать заливки эстетику в geom_text вызова:

p + geom_text(data=as.data.frame(ggplot_build(p)$data), 
      aes(x=5, y=0.5, fill='black', label = paste0("Bar Height: ", max(density)))) 

enter image description here

Редактировать: Картинка выше была создана с использованием второго варианта. Как вы можете видеть, ggplot добавил «черный» в качестве третьего вида в легенде. Чтобы этого избежать, используйте первый вариант.

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