Trying to fill large gap in pie chart using ggplot

2019-09-18 19:04发布

Attempting to create pie chart with ggplot2 but cannot seem to get it using other references online. The chart I create is missing most of its fill.

ggplot(sae,aes(x=1,fill=factor(State), width=1))+        
geom_bar()+
ggtitle("House by State")+
coord_polar(theta='y')

This code gives:

enter image description here

How do I fill the center?

Any other improvements appreciated.

3条回答
走好不送
2楼-- · 2019-09-18 19:34

As @Heroka already mentioned in the comments, pie-charts are a bad way of visualizing information. They are bad that it is even mentioned in the help-files of R.

From ?pie:

Pie charts are a very bad way of displaying information. The eye is good at judging linear measures and bad at judging relative areas. A bar chart or dot chart is a preferable way of displaying this type of data.

Cleveland (1985), page 264: “Data that can be shown by pie charts always can be shown by a dot chart. This means that judgements of position along a common scale can be made instead of the less accurate angle judgements.” This statement is based on the empirical investigations of Cleveland and McGill as well as investigations by perceptual psychologists.

Some further reading on the pie-chart debate.


With the example data of @Heroka:

ggplot(sae,aes(x = factor(1), fill = factor(State)))+        
  geom_bar(width = 1, position = "dodge")+
  ggtitle("House by State")

you get:

enter image description here

A clear demonstration that it's better to see the differences between the categories when you use a barchart instead of a piechart.

查看更多
Deceive 欺骗
3楼-- · 2019-09-18 19:36

With sample data

sae <- data.frame(State=sample(LETTERS[1:6],60,T))


ggplot(sae,aes(x=factor(1),fill=factor(State)))+        
  geom_bar(width=1)+
  ggtitle("House by State")+
  coord_polar(theta="y")

enter image description here

EDIT: Other options (because piecharts are bad)

#following Jaaps example: some better way to visualize this
#grouped barchart

p1 <- ggplot(sae, aes(x=State, fill=State)) +
  geom_bar() + labs(title="grouped barchart")


#stacked barchart; especially practical if you want to compare groups
sae$group <- rbinom(60,1,0.5)
p2 <- ggplot(sae, aes(x=factor(group),fill=State))+
  geom_bar(width=0.5) + labs(title="grouped stacked barchart")

do.call(grid.arrange,list(grobs=list(p1,p2),ncol=2))

enter image description here

查看更多
神经病院院长
4楼-- · 2019-09-18 19:43

When you want to show information about proportions, there is another choice, the waffle package which gets back more to what you probably intend to show with a pie chart (i.e., proportions). In most instances, the bar plots above would likely be best, but for the sake of showing another way of plotting...

Using the sae data from above:

library(waffle)  # install the package if you don't have it
w <- table(sae)
w.waf <- waffle(table(sae))
w.waf + ggtitle("Contextless Waffle Graph") + theme(plot.title=element_text(face="bold", size=24))

which yields this:

enter image description here

查看更多
登录 后发表回答