复制离散的x轴以用于ggplot。

8

嗨,这与另一篇文章类似,但我想在此处复制上下的x轴,而不仅仅是将其移动到顶部。 我尝试使用scale_x_discrete(sec.axis=dup_axis()),但那并没有起作用。以下是我的工作示例。

d<- data.frame (pid=c("d","b","c"), type=c("rna","rna","rna"), value = c(1,2,3) )
d2 <- data.frame (pid=c("d","b","c"), type=c("dna","dna","dna"), value = c(10,20,30) )
df <- rbind (d,d2)

ggplot(df, aes(y=pid, x=type  ) ) + 
  geom_tile(aes(fill = value),colour = "white") + 
  scale_fill_gradient(low = "white",high = "steelblue") +
  scale_x_discrete(position = "top") 
  # this failed: scale_x_discrete(sec.axis = dup_axis())

目前情节看起来是这样的,但我希望 x 出现在顶部和底部。enter image description here

如果您找到了类似的问题,能否提供链接并解释它们为什么不起作用? - Michael Harper
一个类似的帖子在这里,https://dev59.com/dF8d5IYBdhLWcg3waxvo 然而这只是将轴移动到顶部,而复制则是为了连续。 - Ahdee
我刚刚通过转换为数字然后重新标记的方式找到了一个解决方案,但我想知道是否有另一种ggplot选项。ggplot(df, aes(y=pid, x=type ) ) + geom_tile(aes(fill = value),colour = "white") + scale_fill_gradient(low = "white",high = "steelblue") + scale_x_continuous(breaks = c(1, 2), labels = c("开始", "n-1"), sec.axis = dup_axis() ) ``` - Ahdee
这应该添加到问题中,而不是评论中。 - Michael Harper
1个回答

11

scale_x_discrete函数没有第二个轴参数,但是scale_x_continuous有。 因此,将type变量编辑为数值变量,然后更改标签即可:

d<- data.frame (pid=c("d","b","c"), type=1, value = c(1,2,3) )
d2 <- data.frame (pid=c("d","b","c"), type= 2, value = c(10,20,30) )
df <- rbind (d,d2)

ggplot(df, aes(y=pid, x=type)) + 
  geom_tile(aes(fill = value),colour = "white") + 
  scale_fill_gradient(low = "white",high = "steelblue") +
  scale_x_continuous(breaks = 1:2,
                      labels = c("rna", "dna"),
                      sec.axis = dup_axis())

输入图像描述


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