我正在使用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的点,并按值系数对其进行着色。
答案 0 :(得分:1)
我认为您的意思是将得分映射到您的色彩美感,而不是共享代码中所写的 value 。 只需将 color 转换为您最初的美学呼吁中的一个因素:
ggplot(dat, aes(x = sample, y = cond, color = as.factor(score))) +
geom_point()
编辑: 用户表示他想过滤分数不等于1的观察值,然后按 value 为点着色。您可以通过添加以下管道操作来做到这一点:
我认为您的意思是将得分映射到您的色彩美感,而不是共享代码中所写的 value 。 只需将 color 转换为您最初的美学呼吁中的一个因素:
dat %>%
filter(score == 1) %>%
ggplot(aes(x = sample, y = cond, color = as.factor(value))) +
geom_point()
请注意,因子得分只有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)