В ggplot2 можно ли изменить границы столбцов только с одной стороны? (цвет, толщина)

Я знаю, 3D Barcharts — это грех. Но меня попросили сделать их, и в качестве компромисса я предложил сделать только рамку чуть более темного цвета, чем полоса сверху и справа от полосы. Таким образом, у столбцов будет какая-то «тень» (ура), но, по крайней мере, вы все равно сможете их сравнить.

Есть какой-либо способ сделать это?

ggplot(diamonds, aes(clarity)) + geom_bar() 

person SEMson    schedule 12.11.2013    source источник


Ответы (2)


Другая возможность, используя два набора geom_bar. Первый набор, зеленые, сделаны немного выше и смещены вправо. Я позаимствовал данные у @Didzis Elferts.

ggplot(data = df2) + 
  geom_bar(aes(x = as.numeric(clarity) + 0.1, y = V1 + 100),
           width = 0.8, fill = "green", stat = "identity") +
  geom_bar(aes(x = as.numeric(clarity), y = V1),
           width = 0.8, stat = "identity") +
  scale_x_continuous(name = "clarity",
                     breaks = as.numeric(df2$clarity),
                     labels = levels(df2$clarity))+
  ylab("count")

введите здесь описание изображения

person Henrik    schedule 13.11.2013

Как вы уже сказали - 3D гистограммы "плохие". Вы не можете сделать это напрямую в ggplot2, но вот возможный обходной путь.

Во-первых, создайте новый фрейм данных, который содержит уровни ясности и соответствующий счет для каждого уровня.

library(plyr)
df2<-ddply(diamonds,.(clarity),nrow) 

Затем в вызове ggplot() используйте новый фрейм данных и clarity в качестве значений x и V1 (счетчики) в качестве значений y и добавьте geom_blank() - это сделает ось x с нужными нам уровнями. Затем добавьте geom_rect() для создания затенения для баров - здесь значения xmin и xmax сделаны as.numeric() из clarity и добавлена ​​константа - для xmin константа должна быть меньше половины ширины баров, а xmax константа больше половины ширины баров. ymin равно 0, а ymax равно V1 (числам) плюс некоторая константа. Наконец, добавьте geom_bar(stat="identity") над этой тенью, чтобы построить гистограмму.

ggplot(df2,aes(clarity,V1)) + geom_blank()+
  geom_rect(aes(xmin=as.numeric(clarity)-0.38,
                xmax=as.numeric(clarity)+.5,
                ymin=0,
                ymax=V1+250),fill="green")+
  geom_bar(width=0.8,stat="identity")

введите здесь описание изображения

person Didzis Elferts    schedule 12.11.2013
comment
+1 за обходной путь, но Стивен Фью плачет, а мои глаза кровоточат. - person Tyler Rinker; 12.11.2013