群里有这么一个问题:

请问老师,fviz_pca_ind 做pca,当设置geom.ind = “point”,group>6时,就不能显示第7,8组的点,应该如何处理(在不设置为文本的情况下),只改变点的几何形状和颜色

fviz_pca_indfactoextra里面用来可视化PCA结果的一个参数,具体见PCA主成分分析实战和可视化 | 附R代码和测试数据。

这个问题是ggplot2绘制形状时的通用问题,默认只支持6种形状。我们生成个测试数据看下效果:

x <- 1:50
y <- dpois(x, lambda = 10)
data <- data.frame(X=x,y=y)
data$type <- as.factor(x)
library(ggplot2)ggplot(data, aes(x=x, y=y)) + geom_point(aes(shape=type))

图效果如下。同时给出了一段提示:

Warning: The shape palette can deal with a maximum of 6 discrete values because more than 6 becomes difficult to discriminate; you have 50. Consider specifying shapes manually if you must have them.

Warning: Removed 44 rows containing missing values (geom_point).

就是说我们需要自己手动指定形状。

ggplot2默认支持下面122种形状。

# 代码来自 http://sape.inf.usi.ch/quick-reference/ggplot2/shape
d=data.frame(p=c(0:25,32:127))
ggplot() +
scale_y_continuous(name="") +
scale_x_continuous(name="") +
scale_shape_identity() +
geom_point(data=d, mapping=aes(x=p%%16, y=p%/%16, shape=p), size=5, fill="red") +geom_text(data=d, mapping=aes(x=p%%16, y=p%/%16+0.25, label=p), size=3)

那怎么利用起来呢?需要转换计算下能用的符号编号,这里选取0:14, 33-127  (15-25是其它形状加了颜色或变了大小,可能会对设置的大小或颜色属性有影响,先暂时忽略了; 32没看出来是什么形状)。

下面根据设定的符号列的因子数,通过取余数的方式获取这些数字,然后传递给scale_shape_manual函数。

shape_level <- nlevels(data[["type"]])
if (shape_level < 15){shapes = (0:shape_level) %% 15
} else{shapes = c(0:14,c((15:shape_level) %% 110 + 18))
}ggplot(data, aes(x=x, y=y)) + geom_point(aes(shape=type)) + scale_shape_manual(values=shapes)

回到上面的问题,因为没有给代码和数据,这里也就只能意思一下了。

# type 需要改成自己映射到形状的列名
shape_level <- length(levels(data[["type"]]))
if (shape_level < 15){shapes = (0:shape_level) %% 15
} else{shapes = c(0:14,c((15:shape_level) %% 110 + 18))
}fviz_pca_ind(....) + scale_shape_manual(values=shapes)

往期精品(点击图片直达文字对应教程)

机器学习

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

ggplot2绘图点的形状不够用怎么办?相关推荐

  1. R语言(ggplot2绘图)

    原文链接:https://wklchris.github.io/R-ggplot2.html ggplot2 的语法与 R 原生的语法并不统一,但是熟悉起来也并不复杂.它主要通过"+&quo ...

  2. R语言绘图——实用篇 ggplot2绘图

    文章目录 R语言绘图--实用篇 ggplot2绘图 绘制等值线图相关 如何绘制等值线图 插值,平滑插值 插值,缺失值插值 色条(色阶)划分 图例的色条(色阶)修改,合理的参数值选用 图例的色条(色阶) ...

  3. ggplot2绘图之基本概念

    1.映射 1)概念: 映射即为数据集中的数据关联到相应的图形属性过程中一种对应关系, 是将一个变量中离散或连续的数据与一个图形属性中以不同的参数来相互关联, 而设定能够将这个变量中所有的数据统一为一个 ...

  4. ggplot2绘图入门系列之二:图层控制与直方图

    如前文所述,ggplot2使用图层将各种图形元素逐步添加组合,从而形成最终结果.第一层必须是原始数据层,其中data参数控制数据来源,注意数据形式只能是数据框格式.aes参数控制了对哪些变量进行图形映 ...

  5. ggplot2绘图入门系列之四:再说散点图

    1 色彩和形状的控制 数据特征不仅可以用坐标来表示,也可以用不同的色彩或形状来表示.仍以mpg数据集为例,所用到的变量有cty(城市中行驶距离),hwy(高速路行驶距离),displ(排量大小),ye ...

  6. R语言ggplot2绘图教程——Pathway富集分析气泡图

    library(ggplot2) pathway = read.table("C://Users//Desktop//path.richFactor.head20.tsv",hea ...

  7. ggplot2绘图:如果做出来的图颜色区分度不明显,如何对数据进行转换?

    今天分享的学习笔记:异常绘图数据转换方法(对数法,评分法,踢值法,颜色法),用于对热图进行修饰. ggplot2中绘制热图时,有时候会遇到数据的组间差异太大,导致可视化结果不明显(颜色区分度较低),因 ...

  8. ggplot2绘图:qPCR数据箱式图叠加散点图1

    小白新手,加速记忆,先整理个帖子 正题: install.packages('gg.gap')library(ggplot2)#首次用需要先安装install.packages('ggplot2') ...

  9. ggplot2绘图如何根据一个变量即区分颜色又区分深浅?

    群里有这么一个问题: 请问用ggplot2绘制气泡图的时候,根据数字的正负设置红蓝两种颜色,根据数字的大小可以设置颜色的深浅吗?如何实现?可以用哪个函数,谢谢大家 先构造一个正弦曲线数据集,数值有正有 ...

最新文章

  1. KALI LINUX文件名乱码,在kali linux之下 下载并解压的文件名呈现乱码 解决方案
  2. 如何在dnn禁止复制的问题
  3. KS004 基于SSH通讯录系统设计与实现
  4. AppManager
  5. python模块之datetime
  6. NGUI全面实践教程(大学霸内部资料)
  7. 10种常用降维算法源代码(python)
  8. php excel批量导入,PHP将excel文件中的数据批量导入到数据库中
  9. 解决cookie写入问题
  10. javaone_JavaOne 2015 –提交技巧和建议
  11. 【笔试面试】C#中的程序集
  12. Linux 终端常用快捷键
  13. 巧用安全IP策略指定计算机访问某台电脑
  14. SQLite Tutorial 1 在ubuntu上安装SQLite 3.8.2
  15. mysql 节假日判断,sql 节假日判断(春节、中秋、国庆、周末等)
  16. 苍松翠柏,自然景色非常优美
  17. 王者荣耀微信一区的服务器没了,为什么王者荣耀微信区和QQ区玩起来像两个游戏?...
  18. 北京电影学院及中央戏剧学院老师推荐的必看影片,我真是一条一条翻的,一条一条写的,是真的。...
  19. DataX实践趟坑大全
  20. 「儒系」产品经理:管理预期,做好增长的3个核心要素

热门文章

  1. 【计算机科学基础】电子计算机抽象层次
  2. 【CSS3】CSS3背景相关属性大全
  3. 【Python】Matplotlib绘制各式各样的圆形
  4. 用完全平方数填满指定区域(洛谷P2666题题解,Java语言描述)
  5. 欢乐的跳(洛谷P1152题目链接,Java语言描述)
  6. SpringBoot-07:SpringBoot整合PageHelper做多条件分页查询
  7. Teleport Ultra 抓包工具
  8. 包过滤防火墙和代理应用防火墙
  9. FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_F
  10. web服务减少服务器TIME_WAIT