如何在 R 的绘图中为不同的值设置多个中断?
How can I set several breaks for different values in a plot in R?
我已经尝试了几个选项,但我无法使其工作,我想在图中表示矩阵的值。
我正在尝试让不同的值由某些颜色表示,其余由渐变调色板表示。
数值与颜色的对应关系为:
红色:-2
绿色:-1
黑色:-0.7
蓝色:-0.5
“YlOrRd”调色板:0-inf
这是我试过的代码,我不知道我做错了什么,但我只能用热调色板显示所有值。
y1<-c(-2,-1,-0.7,0.5,-2)
y2<-rep(-0.7,5)
y3<-seq(1,500,by=100)
y4<-rep(250,5)
y5<-seq(60,100,by=10)
heat<-rbind(y1,y2,y3,y4,y5)
bk = seq(-2, max(heat), length.out = 5)
color1 <- colorpanel(sum(bk[-1]<=-1.1), "red","red")
color2 <- colorpanel(sum(bk[-1]>-1.1 & bk[-1]<=-0.9), "green", "green")
color3 <- colorpanel(sum(bk[-1]>-0.9 & bk[-1]<=-0.6), "black","black")
color4 <- colorpanel(sum(bk[-1]>-0.6 & bk[-1]<=-0.4), "blue", "blue")
color5 <- colorpanel(sum(bk[-1]>-0.4), "yellow","red")
colors <- c(color1,color2,color3,color4,color5)
image(t(apply(heat, 2, rev)),col=colors)
如果有人能帮助我,我将不胜感激。
如果您对所有颜色进行硬编码,则可以使用 image()
来实现(也许还有一种我不知道的更优雅的方式)。
grad <- colorRampPalette(c("#ffffb2", "#fd8d3c", "#bd0026"))
cols <- grad(max(round(h5$val))+1)
cols_val <- rep(NA, length(heat$val))
cols_val[which(heat$val >=0)] <- cols[round(heat$val[which(heat$val >=0)])+1]
cols_val[which(heat$val == -2)] <- "red"
cols_val[which(heat$val == -1)] <- "green"
cols_val[which(heat$val == -.7)] <- "black"
cols_val[which(heat$val == -.5)] <- "blue"
brk <- c(-2.5, -1.5, -.75, -.25, seq(0,410, by=10))
image(t(heat), breaks=brk, col = c("red", "green", "black", "blue", grad(41)))
但是,您可以使用 ggplot()
稍微更优雅地完成它[另外,我假设您想要 y1
的第四个元素到 b -0.5]:
heat <- t(heat) %>% as_tibble %>%
mutate(obs = 1:n()) %>%
pivot_longer(-obs, names_to="y", values_to="val") %>%
mutate(y = factor(y, levels=c("y1", "y2", "y3", "y4", "y5")) )
h1 <- heat %>% filter(val == -2)
h2 <- heat %>% filter(val == -1)
h3 <- heat %>% filter(val == -.7)
h4 <- heat %>% filter(val == -.5)
h5 <- heat %>% filter(val >= 0)
ggplot() +
geom_tile(data=h1, aes(x=obs, y=y), fill="red", width=1) +
geom_tile(data=h2, aes(x=obs, y=y), fill="green") +
geom_tile(data=h3, aes(x=obs, y=y), fill="black") +
geom_tile(data=h4, aes(x=obs, y=y), fill="blue") +
geom_tile(data=h5, aes(x=obs, y=y, fill=val)) +
scale_fill_gradientn(colors=c("#ffffb2", "#fd8d3c", "#bd0026")) +
geom_text(data=heat, aes(x=obs, y=y, label=val), col="gray60") +
theme_classic() +
labs(x="Observation", y="")
我已经尝试了几个选项,但我无法使其工作,我想在图中表示矩阵的值。
我正在尝试让不同的值由某些颜色表示,其余由渐变调色板表示。
数值与颜色的对应关系为:
红色:-2
绿色:-1
黑色:-0.7
蓝色:-0.5
“YlOrRd”调色板:0-inf
这是我试过的代码,我不知道我做错了什么,但我只能用热调色板显示所有值。
y1<-c(-2,-1,-0.7,0.5,-2)
y2<-rep(-0.7,5)
y3<-seq(1,500,by=100)
y4<-rep(250,5)
y5<-seq(60,100,by=10)
heat<-rbind(y1,y2,y3,y4,y5)
bk = seq(-2, max(heat), length.out = 5)
color1 <- colorpanel(sum(bk[-1]<=-1.1), "red","red")
color2 <- colorpanel(sum(bk[-1]>-1.1 & bk[-1]<=-0.9), "green", "green")
color3 <- colorpanel(sum(bk[-1]>-0.9 & bk[-1]<=-0.6), "black","black")
color4 <- colorpanel(sum(bk[-1]>-0.6 & bk[-1]<=-0.4), "blue", "blue")
color5 <- colorpanel(sum(bk[-1]>-0.4), "yellow","red")
colors <- c(color1,color2,color3,color4,color5)
image(t(apply(heat, 2, rev)),col=colors)
如果有人能帮助我,我将不胜感激。
如果您对所有颜色进行硬编码,则可以使用 image()
来实现(也许还有一种我不知道的更优雅的方式)。
grad <- colorRampPalette(c("#ffffb2", "#fd8d3c", "#bd0026"))
cols <- grad(max(round(h5$val))+1)
cols_val <- rep(NA, length(heat$val))
cols_val[which(heat$val >=0)] <- cols[round(heat$val[which(heat$val >=0)])+1]
cols_val[which(heat$val == -2)] <- "red"
cols_val[which(heat$val == -1)] <- "green"
cols_val[which(heat$val == -.7)] <- "black"
cols_val[which(heat$val == -.5)] <- "blue"
brk <- c(-2.5, -1.5, -.75, -.25, seq(0,410, by=10))
image(t(heat), breaks=brk, col = c("red", "green", "black", "blue", grad(41)))
但是,您可以使用 ggplot()
稍微更优雅地完成它[另外,我假设您想要 y1
的第四个元素到 b -0.5]:
heat <- t(heat) %>% as_tibble %>%
mutate(obs = 1:n()) %>%
pivot_longer(-obs, names_to="y", values_to="val") %>%
mutate(y = factor(y, levels=c("y1", "y2", "y3", "y4", "y5")) )
h1 <- heat %>% filter(val == -2)
h2 <- heat %>% filter(val == -1)
h3 <- heat %>% filter(val == -.7)
h4 <- heat %>% filter(val == -.5)
h5 <- heat %>% filter(val >= 0)
ggplot() +
geom_tile(data=h1, aes(x=obs, y=y), fill="red", width=1) +
geom_tile(data=h2, aes(x=obs, y=y), fill="green") +
geom_tile(data=h3, aes(x=obs, y=y), fill="black") +
geom_tile(data=h4, aes(x=obs, y=y), fill="blue") +
geom_tile(data=h5, aes(x=obs, y=y, fill=val)) +
scale_fill_gradientn(colors=c("#ffffb2", "#fd8d3c", "#bd0026")) +
geom_text(data=heat, aes(x=obs, y=y, label=val), col="gray60") +
theme_classic() +
labs(x="Observation", y="")