R语言中的千层饼图

3

我一直在阅读关于R中的千层面图。在链接的论文附录中,作者有很多实现这些图的代码。但它是一个pdf文件,我无法复制到RStudio中(至少我还没有弄清楚如何)。是否有人将这些代码制作成软件包或以更可用的格式提供了代码?


3
这些看起来很好吃,+1...从浏览图1来看,我猜想一些有针对性的heatmap()使用可能会让你朝着某个方向前进... - texb
尝试联系论文作者不是更容易吗? - joran
1
@Joran 我已经这样做了,但我没有收到回复。我想也许有其他人已经做过了,所以我想在这里问一下。另外,我还宣传了一个很酷的情节。 - Peter Flom
2
根据PDF的类型而定:如果您选择文本工具(在Adobe Reader或您选择的PDF查看器中),则无法复制和粘贴?另一种选择是通过Calibre运行PDF文档。但是:我在您链接的文档中没有看到任何代码。代码本身在哪里? - Carl Witthoft
1
该补充材料中的语法看起来确实很笨拙:Swihart等人似乎定义了具有30多个参数的绘图函数,而没有设置任何默认值;出于实际原因,如果有人真正阅读了论文中的描述并定义了自己的实现(并可能足够友好地在下面发布),甚至可能更有效。 - texb
显示剩余2条评论
3个回答

4

当时可行了。谢谢。无论如何,现在有关Lasagna图的参考资料在这里了。但是,鉴于@TexB的评论,我不确定是否应该将其标记为已回答,因为可能有更好的代码。 - Peter Flom

2

拉萨尼亚图看起来就像热力图,虽然名字很可爱。其他软件包中的热力图绘制得非常好。考虑 Carl Witthoft 指出的代码中的第一个示例图。您可以像这样在 ggplot 中复现它:

## Create the data
palette <- brewer.pal(4, "PuOr")[-2]
## the matrix containing data for Figure 02a
H.mat <- matrix(NA, nrow=4, ncol=6)
H.mat[1, 1:6] = 100*c(2, 1, 1, 1, 1, 2)
H.mat[2, 1:6] = 100*c(2, 2, 2, 3, 2, 1)
H.mat[3, 1:6] = 100*c(2, 2, 1, 1, 1, 3)
H.mat[4, 1:6] = 100*c(3, 3, 2, 1, 2, 3)

library(ggplot2)
library(reshape2)
rownames(H.mat)<-c('P1','T1','P2','T2')
colnames(H.mat)<-seq(ncol(H.mat))
names(dimnames(H.mat))<-c('Subject','Time')
H.df<-melt(H.mat)

根据您的需求,您可以获得不同类型的着色。

# For continuous values.
ggplot(H.df,aes(x=Time,y=Subject,fill=value)) + geom_tile(colour='black') 

enter image description here

# If you consider the value to be categorical.
ggplot(H.df,aes(x=Time,y=Subject,fill=factor(value))) + 
  geom_tile(colour='black') 

enter image description here

# If you want those exact colours the author used:
col<-palette[match(ordered(H.df$value),levels(ordered(H.df$value)))]
ggplot(H.df,aes(x=Time,y=Subject,fill=col)) + 
  geom_tile(colour='black') + scale_fill_identity()

enter image description here


2
我无法弄清楚如何正确使用作者所用的确切颜色,因此我使用了一个不太正规的方法。如果有人能告诉我如何以更自然的方式向ggplot提供自定义颜色,那么请告诉我,我会更改答案。 - nograpes
1
我认为你已经明白了! - Peter Flom

1

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