当前位置: 首页 > news >正文

ggplot2绘图点的形状不够用怎么办?

群里有这么一个问题:

请问老师,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)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • django基于个人BMI的健康饮食食谱推荐系统-计算机毕业设计源码26624
  • [Debugger]调试Arm设备
  • nginx配置代理
  • 基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网
  • 每日新闻 7月9日 星期二
  • uniapp开发android调试工具
  • 【前端】使用chrom浏览器Network,查看前后台数据传输请求
  • 系统架构的基础:定义、原则与发展历程
  • C语言 输出n阶魔方阵
  • 语法糖:代码中的甜品
  • 世上最懂交易原理的是佛学
  • VS2019运行报错 应输入预处理器指令
  • 通信网络机房服务器搬迁方案要求
  • Java面试八股之MySQL的redo log和undo log
  • Drools开源业务规则引擎(五)- jBPM流程图元素介绍
  • 【笔记】你不知道的JS读书笔记——Promise
  • Angular4 模板式表单用法以及验证
  • Git的一些常用操作
  • JS笔记四:作用域、变量(函数)提升
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 检测对象或数组
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 如何实现 font-size 的响应式
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 小程序button引导用户授权
  • 一文看透浏览器架构
  • (04)odoo视图操作
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (一)VirtualBox安装增强功能
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)c++ std::pair 与 std::make
  • **PHP二维数组遍历时同时赋值
  • .a文件和.so文件
  • .gitignore文件---让git自动忽略指定文件
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • /proc/vmstat 详解
  • @Controller和@RestController的区别?
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [AI 大模型] Meta LLaMA-2
  • [AR Foundation] 人脸检测的流程
  • [C++] 深入理解面向对象编程特性 : 继承