在R语言中,如何绘制连续/序列事件的图形?

7

编辑:按照建议进行修改

我正在尝试根据这篇文章创建一个简单的连续事件频率图:ggplot序列模式

我想堆叠相同的图表,但是针对其他主题(不同的序列) 主题"aa","bb","cc"

示例数据集如下:

subject <- c("aa","aa","aa","aa","aa","aa","aa", "bb","bb","bb","bb","bb","bb","bb","cc","cc","cc","cc","cc","cc","cc")
event <- c("P","C","D","C","P","E","D","C","P","E","D","P","C","E","P","E","D","P","C","x","x")
freq <- c(3,2,1,4,2,1,0,3,4,1,3,3,1,2,1,3,2,1,4,0,0))

dfx <- data.frame(subject, event, freq)

我得到的结果是: 我的结果,不好 使用这段代码,基于原始帖子:
library(ggplot2)

dfx$type <- factor(dfx$type)
dfx$ymin <- c(0,1,2)
dfx$ymax <- c(1,2,3)
dfx$xmax <- cumsum(dfx$count)
dfx$xmin <- c(0, head(dfx$xmax, n=-1))

plot_x <- ggplot(dfx, 
            aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,fill=type))   +geom_rect(colour="grey40", size=0.5)

png("plot_x.png", height=200, width=800)
print(plot_x)
dev.off()

我用Excel手工制作了这张图,希望能够绘制出来。在这种情况下,我们有3个主题,4个事件(C,P,D,E)+1个虚拟事件(X),需要创建数据框。正如您所看到的,每个主题的事件总数不一定相等。

expected

你还应该分享“你得到的结果”部分的代码。 - MrFlick
1
如果输出示例与您提供的示例数据相关,则更容易理解您的目标输出示例。请提供与您拥有的数据匹配的示例,或者提供与示例相关的数据。 - arvi1000
感谢您的建议!我已经相应地编辑了我的帖子。 - jgfdsa
1个回答

2
尝试使用facet_gridfacet_wrap
library(ggplot2)
p1  <-  
    ggplot(dfx, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = event))+
    theme_bw() + 
    geom_rect(colour = "black", size = 0.5) + 
    facet_grid(subject ~ .) + 
    theme(axis.ticks.y=element_blank(), axis.text.y=element_blank())

p1

这里输入图片描述 数据:

dfx <- data.frame(
       subject = c("aa","aa","aa","aa","aa","aa","aa", "bb","bb","bb","bb","bb","bb","bb","cc","cc","cc","cc","cc","cc","cc"),
       event = c("P","C","D","C","P","E","D","C","P","E","D","P","C","E","P","E","D","P","C","x","x"),
       freq = c(3,2,1,4,2,1,0,3,4,1,3,3,1,2,1,3,2,1,4,0,0),
       ymin = 0,
       ymax = 1)

TEMP        <-  tapply(dfx$freq,dfx$subject,cumsum)
dfx$xmax    <-  unlist(TEMP)
dfx$xmin    <-  c(0, head(TEMP$aa, -1), 0, head(TEMP$bb, -1), 0, head(TEMP$cc, -1))

谢谢!我已经测试过了,这是一个非常简单而且好的解决方案。非常感谢!!! - jgfdsa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接