Создайте составной участок или круговой график

Цель

Создайте график с областями с накоплением или круговой график с накоплением (см. Рисунок). Круговая диаграмма не нужна.

Данные и код гистограммы

#Data set:
Numbers     16%
Frosts       2%
Doors        6%
Shelfs      10%
Earning     -3%

par(mai=c(2, 1, 1, 1), lwd=2)
barplot(as.numeric(c(16, 2, 6, 10, -3)), col = c("lightblue"), main="Bar plot",
        names.arg=c("Numbers","Frosts","Earning", "Doors","Shelfs"), xpd=TRUE, las=2, lwd=2, 
        axes=FALSE, axis.lty=1, cex.axis=1, cex.names=1, cex.main=1, ylim=c(-4, 18), xlim=c(0, 5))

Два варианта вывода

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

3 ответа

Решение

Это должно дать вам большую часть пути там

library(ggplot2)
df<- data.frame(value=as.numeric(c(16, 2, 6, 10, -3)),
                cat=c("Numbers","Frosts","Earning","Doors","Shelfs"))

ggplot(df[order(df$value),], aes(x=1, y=abs(value), fill=factor(ifelse(value>0, 0, 1)))) +
    geom_bar(stat="identity", colour="grey") +
    geom_text(aes(label=paste(cat, value)), position = "stack", vjust = 3) +
    scale_fill_manual(values=c("white", "red"))

Бар Участок

ggplot(df[order(df$value),], aes(x=1, y=abs(value), fill=factor(ifelse(value>0, 0, 1)))) +
    geom_bar(stat="identity", colour="grey") +
    geom_text(aes(label=paste(cat, value)), position = "stack", vjust = -1) +
    scale_fill_manual(values=c("white", "red")) +
    coord_polar()

Круговой участок

Возможно, вам придется поиграться со значениями vjust, чтобы изменить положение меток, или рассчитать для них собственное отображение y, но это хорошее начало.

Вы можете попробовать поработать с этим:

library(ggplot2)
data<-data.frame(Name=c("Earning","Frosts","Doors","Shelfs","Numbers"),Val=c(1,2,6,10,16))

ggplot(data,aes(x=factor(1),y=Val,fill=Name))+
geom_bar(stat="identity",width=1)+coord_polar()

Просто измените цветовую палитру и добавьте текст, где вы хотите (и, конечно, первое значение в Val столбец, если он слишком большой на участке - это соответствует вашему отрицательному значению) введите описание изображения здесь

Самая верхняя из ссылок "Связанные" справа должна дать вам большую часть информации, которая необходима для построения линейчатой ​​диаграммы, но адаптированной для вашего использования, это будет примерно так:

# A vertical matrix containing the values
md <- matrix(c(-3, 16, 2, 6, 10), ncol=1)
d <- barplot(md, col=c(2, rep(0, 4))) 

# Finding the vertical position for the labels
ypos <- apply(md, 2, cumsum)
ypos <- ypos - md/2
ypos <- t(ypos)

# I haven't checked if the values and names match
text(d/3, ypos, adj=c(0, NA),
  paste(c("Earning","Numbers","Frosts","Doors","Shelfs"), md, sep=": "))

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

Другие вопросы по тегам