我有一个包含如此多行(数千个城市)的热图,为清楚起见,我只想显示其中几个的名称。我仍然希望显示整个热图,因为颜色可以了解情况(城市名称并不重要,但我想展示其中一些用于教学目的)。
library(ggplot2)
n <- 15
c.1 <- c(rep(x="Summer", times=n), rep(x="Winter", times=n))
c.2 <- c(rep(x="Dallas", times=n/5), rep(x="Seattle", times=n/5), rep(x="Atlanta", times=n/5), rep(x="Chicago", times=n/5), rep(x="Boston", times=n/5))
c.3 <- c("Morning", "Midday", "Evening")
to.plot <- data.frame(cbind(c.1, c.2, c.3))
to.plot$value <- sample(rep(x=c("Bad", "Average", "Good"), times=100), 10)
colnames(to.plot) <- c("Season", "City", "Time", "value")
to.plot$City <- factor(to.plot$City, levels=c("Seattle", "Chicago", "Dallas", "Atlanta", "Boston"), ordered=TRUE)
p <- ggplot(to.plot, aes(x=Season, y=City))
p <- p + geom_tile(aes(fill=value), colour="white")
p <- p + scale_fill_manual(values=c("red", "green", "yellow"))
p <- p + theme(legend.position = "none", axis.text.x=element_text(angle=90, 8))
p <- p + facet_grid(. ~ Time)
p <- p + theme(legend.position = "none")
print(p)
在只有五个城市的示例情节中,很容易看到所有五个城市名称,但在真实的例子中,它们模糊了数千个城市。
如何才能看到完全相同的热图,但只显示每三个左右的城市名称?我包含有序因子,因为顺序与情节可视化相关(分解可能是我遇到问题的原因,但因子顺序必须在那里)。
答案 0 :(得分:2)
如果您通过从城市变量的级别采样来创建包含要标记的城市的向量:
breakpoints <- levels(to.plot$City)[seq(1, length(levels(to.plot$City)), 2)]
调整“2”可以确定在你得到喜欢的东西之前你可能会想要多少个标签。
然后在代码的末尾添加:
p <- p + scale_y_discrete(breaks = breakpoints)
print(p)
告诉ggplot使用新向量将y轴断开的位置。我认为这仍然保留了因素的顺序吗?
这有帮助吗?
(部分归功于nico对Extracting every nth element of a vector的回答)