如何在ggplot2中添加覆盖geom_point的半圆

问题描述 投票:0回答:1

我正在尝试生成一个点图,显示多个个体中病毒感染随时间的变化。可以检测到不止一种病毒,我希望每种病毒在点图中都有自己的颜色。当一个人在同一时间点感染不止一种病毒时,情况就会变得复杂。我想通过将第二个病毒显示为第一个病毒上方的半圆来显示此数据。我一直在研究这个问题,看起来在 ggplot2 中添加第二个 geom_point 层,并使用 unicode 字符表示半圆(例如“\u25D7”)是执行此操作的更简单方法之一。但是,我遇到了两个问题。

首先:我无法在任何 ggplot 中显示 unicode 字符。相反,我得到了失败的空心方块。

第二:我需要抑制结果类别之一(“Res2”中的“Neg”),以便仅在同时检测到两种病毒的点处施加半圆。

任何建议将不胜感激!我在 Windows 10 上运行带有 English_United States.utf8 的 R v 4.4.0。

一些示例数据和代码:

library(ggplot2)
library(ggthemes)
library(tidyverse)
library(dplyr)

AnimalID<-c("A","A","A","A","A","B","B","B","B","B","C","C","C","C","C")
Week<-c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5)
Res1<-c("HV1","HV1","Neg","HV2","Neg","Neg","HV2","HV1","HV1","HV1","HV1","HV1","HV2","Neg","HV1")
Res2<-c("HV2","Neg","Neg","Neg","Neg","Neg","Neg","HV2","Neg","Neg","Neg","HV2","Neg","Neg","Neg")
AllHV<-c("HV1 and HV2","HV1","Neg","HV2","Neg","Neg","HV2","HV1 and HV2","HV1","HV1","HV1","HV1 and      HV2","HV2","Neg","HV1")
     
db<-data.frame(AnimalID,Week,Res1,Res2,AllHV)

Exgraph<-
ggplot(db,aes(x= Week, y=AnimalID, color=Res1)) + 
geom_point(size=3,shape=16) +
theme_tufte() +
ggtitle("HV Shedding Patterns") +
xlab("Study Week") +
ylab("Animal ID") +
theme(axis.line = element_line(colour = "black")) +
theme(plot.title = element_text(face = "bold",size=18)) +
theme(axis.text = element_text(size = 10)) +
theme(axis.title = element_text(face = "bold",size = 14)) +
theme(legend.title = element_text(size = 14, face = "bold"),legend.text = element_text(size = 11)) +
labs(color='HV')+
geom_point(aes(x= Week, y=AnimalID, color=Res2)) ## this is where I'd be adding the unicode +
scale_color_manual(values=c("green","blue","grey80"))

Exgraph`
ggplot2 unicode
1个回答
0
投票

这会呈现一个半圆:

geom_text(aes(x = Week, y = AnimalID, label = "\u25D1"))
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.