楼主: EveIOU
1489 5

[问答] ggplot2 分面绘图,求助 [推广有奖]

  • 1关注
  • 0粉丝

博士生

2%

还不是VIP/贵宾

-

威望
0
论坛币
183 个
通用积分
59.2896
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3004 点
帖子
87
精华
0
在线时间
196 小时
注册时间
2011-11-18
最后登录
2024-10-23

楼主
EveIOU 发表于 2021-7-5 23:20:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请教各位朋友,我在绘制分面图时遇到问题:1.每个子图有10个分类项目,为何Y轴有40项(4大类/子图项目的总和),如何使每个子图的Y轴只显示对应的10个项目?
2.每个数据的Y轴标签,前面已经截短了,如何显示?多谢朋友们!
  1. go_enrich_df <- read.table('go_enrich_df.txt', sep ='\t', header=T)

  2. ## numbers as data on x axis
  3. go_enrich_df$number <- factor(rev(1:nrow(go_enrich_df)))

  4. ## shorten the names of GO terms
  5. shorten_names <- function(x, n_word=4, n_char=40){
  6.   if (length(strsplit(x, " ")[[1]]) > n_word || (nchar(x) > 40))
  7.   {
  8.     if (nchar(x) > 40) x <- substr(x, 1, 40)
  9.     x <- paste(paste(strsplit(x, " ")[[1]][1:min(length(strsplit(x," ")[[1]]), n_word)], collapse=" "), "...", sep="")
  10.     return(x)
  11.   }
  12.   else
  13.   {
  14.     return(x)
  15.   }
  16. }

  17. labels <- (sapply(
  18.   levels(factor(go_enrich_df$Term))[as.numeric(go_enrich_df$number)],
  19.   shorten_names))
  20. names(labels) <- rev(1:nrow(go_enrich_df))

  21. library(ggplot2)
  22. p <- ggplot(data=go_enrich_df, aes(x=FoldEnrichment, y=Term, fill=PValue, size = GeneNumber)) +
  23.   geom_point(shape=21, colour="black", alpha=0.95) +
  24.   # facet_wrap(type ~ ) +
  25.   facet_grid(type ~ .) +
  26.   # scale_fill_gradient2(low="blue", high = "red") +
  27.   # scale_fill_manual(values = CPCOLS) +
  28.   theme_bw() +
  29.   scale_y_discrete(labels=labels) +
  30.   theme(axis.text=element_text(face = "bold", color="gray50")) +
  31.   labs(y = "GO term /KEGG Pathway", title = "Enriched GO Terms /KEGG Pathway") # color = PValue, size = GeneNumber,

  32. p
复制代码
Rplot05.jpeg go_enrich_df.txt (3.73 KB)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:ggplot2 gplot plot GPL enrich

回帖推荐

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

第一个问题,你在第29行修改一下, 第二个问题,没看懂你本来想要做什么,貌似你写的函数输入和输出没有达到你函数名字的设想。

沙发
owenqi 在职认证  学生认证  发表于 2021-7-7 10:00:40
第一个问题,你在第29行修改一下,
  1. facet_grid(type ~ ., scales = "free_y")
复制代码

第二个问题,没看懂你本来想要做什么,貌似你写的函数输入和输出没有达到你函数名字的设想。
已有 1 人评分论坛币 学术水平 收起 理由
llb_321 + 5 + 3 精彩帖子

总评分: 论坛币 + 5  学术水平 + 3   查看全部评分

藤椅
EveIOU 发表于 2021-7-8 08:52:49 来自手机
owenqi 发表于 2021-7-7 10:00
第一个问题,你在第29行修改一下,

第二个问题,没看懂你本来想要做什么,貌似你写的函数输入和输出没有 ...
多谢朋友指点,第一个问题完美解决。第二个问题,就是想让图片左边那一排排的文字(应该是坐标轴刻度标签?),长度变短一些。绘图代码的前面不是有个shorten  names函数吗,就是截断y轴变量名字的。刚接触绘图,这段代码是以其它代码为模板改的,有些地方还不太清楚。手机回的,shorten  names可能和代码里不完全一致,见谅。再次感谢!

板凳
owenqi 在职认证  学生认证  发表于 2021-7-8 12:19:26
EveIOU 发表于 2021-7-8 08:52
多谢朋友指点,第一个问题完美解决。第二个问题,就是想让图片左边那一排排的文字(应该是坐标轴刻度标签 ...
我说的意思是,我没明白你shorten_names这个函数具体截短的逻辑是什么,是只取前面四个字母吗?还是怎么样?你最终想要的效果是什么?

报纸
EveIOU 发表于 2021-7-8 15:42:41 来自手机
owenqi 发表于 2021-7-8 12:19
我说的意思是,我没明白你shorten_names这个函数具体截短的逻辑是什么,是只取前面四个字母吗?还是怎么样 ...
照搬别人的代码,其实我也不太明白,感觉是不是这样: 保留4个单词或40个字母,超出的部分截掉。
可以忽略这个函数,其他函数也能达到截短字符的目的,比如stringr包里的函数。我想请教的重点是: 如果想改y轴左边那一排排的文字,是不是应该设置坐标轴刻度标签?scale_y_discrete(labels = )?多谢!

地板
owenqi 在职认证  学生认证  发表于 2021-7-9 00:47:23
EveIOU 发表于 2021-7-8 15:42
照搬别人的代码,其实我也不太明白,感觉是不是这样: 保留4个单词或40个字母,超出的部分截掉。
可以忽略 ...
是的.....

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-29 15:31