r - 使用 ggplot 按组为多个变量创建点图
问题描述
我正在尝试为多个变量生成组中位数的水平点图。对于下面的虚拟数据,我想为每个变量(x,y,z,w)绘制一条“线”,在每条线上绘制七个组中位数并按颜色区分。任何帮助表示感谢!
library(dplyr)
dat=data.frame(x=runif(100,1,10),y=runif(100,1,5),z=runif(100,1,15),
w=runif(100,1,20),grp=sample(LETTERS[1:7],100,replace=T))
dat_summ=dat %>% group_by(grp)%>%
summarise_all(funs(median(., na.rm = TRUE)))
像这样的东西
x|_______A_____B____C_D__EF_G
y|_______C_D_E_____F__________B____A_G
z|etc.
w|etc.
|
|
|
|
|____________________________________________________________________
| | | |
5 10 15 20
解决方案
您可以使用geom_segment
(查找max
每个组的值到现在结束的位置,并且它们都从相同的位置(最小值)开始)。
这有点混乱,但使用真实数据应该看起来更好。
library(tidyverse)
data_Let <- gather(dat_summ, wxyz, value, x:w)
data_Seg <- summarise(group_by(data_Let, wxyz), MAX = max(value))
ggplot(data_Let) +
geom_segment(aes(x = min(data_Let$value), xend = MAX,
y = wxyz, yend = wxyz), data_Seg) +
geom_point(aes(value, wxyz, color = grp)) +
geom_text(aes(value, wxyz, label = grp), vjust = -0.5, size = 3) +
scale_y_discrete(limits = rev(sort(unique(data_Let$wxyz)))) +
labs(x = "Median")
推荐阅读
- architecture - Hyperledger Sawtooth Validator 节点如何在 Sawtooth 网络中拥有“大于最大连接性的对等点数”?
- javascript - 按下时的可触摸不透明度在 SVG 标签内不起作用
- r - 基于数据范围扩展大数据框
- java - com.google.wireless.android.sdk.stats.IntellijIndexingStats 构建 AWS sumerian java 项目时出错
- python-2.x - 为什么我的字节数组没有不同,即使 print() 说它们是不同的?
- java - 如何将 fxml 文件与 3d Box 和 PerspectiveCamera 结合使用
- javascript - 自动播放背景音乐不起作用。还包括静音按钮
- c++ - 仅使用 openCV 和 Qt 从嵌入式相机接收黑帧
- javascript - 添加 knex.js .andWhere() 是条件为真
- javascript - 如何从按钮中删除类并在 sweetalert2 中添加自定义类?