楼主: 2017110138
616 3

[问答] R语言ggplot绘制环形图,固定切片顺序 [推广有奖]

  • 5关注
  • 0粉丝

教授

69%

还不是VIP/贵宾

-

威望
0
论坛币
1860 个
通用积分
7.1692
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
19195 点
帖子
725
精华
0
在线时间
345 小时
注册时间
2018-10-12
最后登录
2025-4-2

楼主
2017110138 发表于 2022-12-13 11:34:10 |AI写论文
100论坛币
在R语言中,我使用ggplot绘制环形图,我想让每一个环形图的切片排序为“BA”,“Gini”,“MAT”,“PH”,但是R语言默认的是变量的占比大小的进行排序,下面我放置了图片和代码,请各位帮帮忙,非常感谢。 B.png A.png
dat = data.frame(count=c(72.5, 6.3, 11.1, 10.1), category=c("BA", "Gini", "MAT", "PH"))
# Add addition columns, needed for drawing with geom_rect.
dat$fraction = dat$count / sum(dat$count)
dat = dat[order(dat$fraction), ]
dat$ymax = cumsum(dat$fraction)
dat$ymin = c(0, head(dat$ymax, n=-1))
dat$labelPosition <- ((dat$ymax + dat$ymin) / 2)
dat$label <- paste0(dat$category, ":\n ",
                     round(dat$count/sum(dat$count), 3) * 100, "%")
dat<- within(dat, category<- factor(category, levels = c("BA", "Gini", "MAT", "PH")))
dat$fen<-"Young"
p2 = ggplot(dat, aes(fill=category, ymax=ymax, ymin=ymin, xmax=5, xmin=2.8)) +
  geom_rect(colour="grey30") +
  coord_polar(theta="y") +
  xlim(c(0, 5)) +
  scale_fill_manual(values =c("#8DD3C7", "#1F78B4","#33A02C","#E41A1C"))+
  theme_bw() +
  theme(panel.grid=element_blank()) +
  theme(axis.text=element_blank()) +
  theme(axis.ticks=element_blank()) +
  labs(title="Young_A")+
  geom_label(x = 5, aes(y = labelPosition, label = label), size = 8)+theme(legend.position = "none")
p2

最佳答案

zhjx19 查看完整内容

你想要的顺序,跟你计算的值是不配套的,需要调整一下顺序。再一个 ggplot2 早就扩展到涵盖数据科学整个领域的 tidyverse了,base R的代码该更新换代了: 说到 R语言知识汰旧换新、更新换代,看我免费分享的课件就足够了:[学习分享] 张敬信:分享我的1393页《R语言编程:基于tidyverse》完整课件
关键词:gplot plot GPL R语言 Category

回帖推荐

zhjx19 发表于2楼  查看完整内容

你想要的顺序,跟你计算的值是不配套的,需要调整一下顺序。再一个 ggplot2 早就扩展到涵盖数据科学整个领域的 tidyverse了,base R的代码该更新换代了: 说到 R语言知识汰旧换新、更新换代,看我免费分享的课件就足够了:[学习分享] 张敬信:分享我的1393页《R语言编程:基于tidyverse》完整课件

沙发
zhjx19 发表于 2022-12-13 11:34:11
你想要的顺序,跟你计算的值是不配套的,需要调整一下顺序。再一个 ggplot2 早就扩展到涵盖数据科学整个领域的 tidyverse了,base R的代码该更新换代了:

  1. library(tidyverse)

  2. dat = tibble(
  3.   count = c(72.5, 6.3, 11.1, 10.1),
  4.   category=c("BA", "Gini", "MAT", "PH"))

  5. # Add addition columns, needed for drawing with geom_rect.

  6. dat1 = dat %>%
  7.   mutate(fraction = count / sum(count),
  8.          category = factor(category, levels = c("BA","Gini","MAT","PH"))) %>%
  9.   arrange(category) %>%
  10.   mutate(ymax = cumsum(fraction), ymin = c(0, ymax[-n()]),
  11.          labelPosition = (ymin + ymax) / 2,
  12.          label = str_c(category, ":\n", round(fraction, 3) * 100, "%"))


  13. ggplot(dat1, aes(fill=category, ymax=ymax, ymin=ymin, xmax=5, xmin=2.8)) +
  14.   geom_rect(color = "grey30") +
  15.   coord_polar(theta = "y") +
  16.   xlim(c(0, 5)) +
  17.   scale_fill_manual(values = c("#8DD3C7", "#1F78B4","#33A02C","#E41A1C")) +
  18.   theme_bw() +
  19.   theme(panel.grid = element_blank()) +
  20.   theme(axis.text = element_blank()) +
  21.   theme(axis.ticks = element_blank()) +
  22.   labs(title = "Young_A") +
  23.   geom_label(x = 5, aes(y = labelPosition, label = label), size = 8) +
  24.   theme(legend.position = "none")
复制代码



Rplot.png


说到 R语言知识汰旧换新、更新换代,看我免费分享的课件就足够了:[学习分享] 张敬信:分享我的1393页《R语言编程:基于tidyverse》完整课件
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
2017110138 + 5 + 4 + 4 + 4 精彩帖子

总评分: 论坛币 + 5  学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

藤椅
2017110138 发表于 2022-12-15 09:27:47
zhjx19 发表于 2022-12-13 11:34
你想要的顺序,跟你计算的值是不配套的,需要调整一下顺序。再一个 ggplot2 早就扩展到涵盖数据科学整个领域 ...
非常感谢

板凳
shihuachen 发表于 2023-2-7 12:52:11
真的不错啊 值得推荐

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-20 08:40