6、科研作图之饼图详解——ggplot2

基本语法:

p = ggplot(df, aes(x="", y = value, fill=group)) +
  geom_bar(width = 1, stat = "identity") + 
  coord_polar("y", start=0)

示例:

library(ggplot2)

#数据准备

 df1 = data.frame(
  group = c("c", "b", "a"),
  value = c(15, 35, 50))

#基本成图1

p = ggplot(df1, aes(x="", y = value, fill=group)) +
  geom_bar(width = 1, stat = "identity") + 
  coord_polar("y", start=0)
p

 

#图形美化

require(scales)
p + scale_fill_brewer("Blues") + 
  geom_text(aes(y = value/3 + c(0, cumsum(value)[-length(value)]),
                label = percent(value/100)), size=5)+
  theme(
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    axis.text.x=element_blank(),
    panel.border = element_blank(),
    panel.grid=element_blank(),
    axis.ticks = element_blank(),
    plot.title=element_text(size=14, face="bold")
  )

6c9b214aa6ee4a9f947a1d661c4e96fb.png d91faefd0ac64c1db9c494b328857723.png

 讨论(注意事项):

若把上述的数据换为如下数据,即把a和c 两组数据交换位置:

 df1 = data.frame(
  group = c("a", "b", "c"),
  value = c(50, 35, 15))

 则会出现如下情况,数值对不上对应的区域。

d28f71d129c540279fdbe1106b4daa85.png

造成这种情况的原因是作图时数据是按group的升序、逆时针的顺序进行的,即从正上方开始,按逆时针方向一次是a,b,c三组数据的图像(会自动进行这样的排序),而对应数字的添加是按value的原顺序进行顺时针添加的

解决(相对原数据框按照group进行降序排列):

这样可以使数值添加的顺序和绘图顺序一致。将原始数据进行如下处理:

df1 = data.frame(
  group = c("a", "b", "c"),
  value = c(50, 35, 15))

df2 = df1[order(df1$group,decreasing = TRUE),]

df2

 8fa8e0202b394582a467d353c17bb857.png

 因此我们使用的数据应该是按组号的降序排列的数据,而在绘图前先进行降序处理可以解决这一问题。

 无脑可用代码:

library(ggplot2)

#df1改为自己的数据(数据中的group,value进行对应,这两个变量名称别换)
df1 = data.frame(
  group = c("a", "b", "c"),
  value = c(50, 35, 15))

 

df2 = df1[order(df1$group,decreasing = TRUE),]

p = ggplot(df2, aes(x="", y = value, fill=group)) +
  geom_bar(width = 1, stat = "identity") + 
  coord_polar("y", start=0)
require(scales)
p + scale_fill_brewer("Blues") + 
  geom_text(aes(y = value/length(value) + c(0, cumsum(value)[-length(value)]),
                label = percent(value/sum(value))), size=5)+
  theme(
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    axis.text.x=element_blank(),
    panel.border = element_blank(),
    panel.grid=element_blank(),
    axis.ticks = element_blank(),
    plot.title=element_text(size=14, face="bold")
  )

必要补充plot做法: 

这里使用plot进行作图更简单。

df2 = data.frame(
  group = c("a", "b", "c"),
  value = c(50, 35, 15))

pie(df2$value,df2$group)

 e4805ea473124087a930a80a04c5c9df.png

 

 

虽然`ggplot2`主要用于绘制散点图、柱状图和线图等,但也可以用它来绘制饼图。以下是一个简单的例子: 假设有一个数据框`df`,其中包含了各个类别的计数和对应的标签,可以按照以下步骤绘制饼图: 1. 使用`ggplot()`函数创建一个空白图层,例如: ``` library(ggplot2) ggplot(df, aes(x="", y=count, fill=label)) + geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_void() ``` 2. 在图层中添加一个`geom_bar()`图形,并将`x`映射到空字符串、`y`映射到计数、`fill`映射到标签,例如: ``` ggplot(df, aes(x="", y=count, fill=label)) + geom_bar(stat="identity", width=1) ``` 3. 将坐标系设为极坐标,例如: ``` ggplot(df, aes(x="", y=count, fill=label)) + geom_bar(stat="identity", width=1) + coord_polar("y", start=0) ``` 4. 添加一个`theme_void()`主题,去掉所有的网格线和标签,例如: ``` ggplot(df, aes(x="", y=count, fill=label)) + geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_void() ``` 这样就会生成一个带有标签的饼图。如果需要更改饼图的颜色、标题等属性,可以在`ggplot()`函数中传递相应的参数。例如: ``` ggplot(df, aes(x="", y=count, fill=label)) + geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_void() + scale_fill_manual(values=c("red", "blue", "green", "yellow")) + labs(title="My Pie Chart") ``` 这样就会生成一个带有自定义颜色和标题的饼图
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值