在ggplot2中的dotplot中转换geom_tile

时间:2019-01-16 15:20:44

标签: r ggplot2

我正在使用geom_tile在ggplot2中做几个热图。它们的效果很好,但是如果我要代替点(小矩形)而不是我想要点。我的输入是一个二进制矩阵(使用melt函数在表中转换)。
我的x和y是离散因子。如何产生圆圈或点而不是图块.....任何想法?

谢谢!

示例:

dat=data.frame(sample = c("a","a","a","b","b","b","c","c","c"), cond=c("x","y","z","x","y","z","x","y","z"),value=c("1","4","6","2","3","7","4","6","7"),score=c(0,1,1,0,0,0,1,1,1))

如果我使用以下图表:

ggplot(dat, aes(x = sample, y = cond, color = value)) + 
  geom_point()

我弄错了情节。相反,我希望有一个分数为0或1的点,并按值系数对其进行着色。

1 个答案:

答案 0 :(得分:1)

我认为您的意思是将得分映射到您的色彩美感,而不是共享代码中所写的 value 。 只需将 color 转换为您最初的美学呼吁中的一个因素:

ggplot(dat, aes(x = sample, y = cond, color = as.factor(score))) + 
  geom_point()

color points as factor

编辑: 用户表示他想过滤分数不等于1的观察值,然后按 value 为点着色。您可以通过添加以下管道操作来做到这一点:

我认为您的意思是将得分映射到您的色彩美感,而不是共享代码中所写的 value 。 只需将 color 转换为您最初的美学呼吁中的一个因素:

dat %>% 
filter(score == 1) %>% 
ggplot(aes(x = sample, y = cond, color = as.factor(value))) + 
  geom_point()

Modified Plot

请注意,因子得分只有3个级别,而我们在x轴上缺少水平 b 。通过在drop = FALSE中指定scale_x_discrete()来保持所有级别:

dat %>% 
  filter(score == 1) %>% 
  ggplot(aes(x = sample, y = cond, color = as.factor(value))) + 
  geom_point() + 
  scale_x_discrete(drop = FALSE)

third plot with <code>drop = false</code>