在 ggplot2 中将不同颜色的零点绘制为色标
Plot zeros in a different colour to colour scale in ggplot2
我有一个数据框,df:
df <- structure(list(animal = c("cat", "cat", "cat", "cat", "cat",
"cat", "cat", "cat", "cat", "cat", "cat", "cat", "cat", "cat",
"cat", "cat", "cat", "cat"), id = c("201", "202", "203", "204",
"215", "217", "201", "202", "203", "204", "215", "217", "201",
"202", "203", "204", "215", "217"), tissue = c("tail", "tail",
"tail", "tail", "tail", "tail", "whiskers", "whiskers", "whiskers",
"whiskers", "whiskers", "whiskers", "feet", "feet", "feet", "feet",
"feet", "feet"), value = c(0.5, 2.2, 0, 0.2, 0, 0, 2.8, 19.9,
0, 85, 0, 0, 1.9, 4.1, 0, 0.4, 0, 120)), row.names = c(NA, -18L
), class = "data.frame")
head(df)
animal id tissue value
1 cat 201 tail 0.5
2 cat 202 tail 2.2
3 cat 203 tail 0.0
4 cat 204 tail 0.2
5 cat 215 tail 0.0
6 cat 217 tail 0.0
我有以下绘图功能:
p <- ggplot(df, aes_string(x = "id", y = "tissue", fill = "value")) +
geom_tile(color = "white") +
geom_text(aes_string(label = "value"), color = "black", size = 2) +
scale_fill_gradient(
low = "white", high = "red", na.value = "#D0D0D0") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
这会产生:
我希望零值以白色绘制,但任何高于零的值都从淡红色开始(例如#FEECE3)。
我试过这个:
p <- ggplot(df, aes_string(x = "id", y = "tissue", fill = "value")) +
geom_tile(color = "white") +
geom_text(aes_string(label = "value"), color = "black", size = 2) +
scale_fill_gradient2(
low = "white", mid = "#FEECE3", high = "red", na.value = "#D0D0D0",
midpoint = 1) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
但是它以灰红色绘制了零点。
我怎样才能让零点以白色绘制?
您可以使用 scale_fill_gradientn
。将三种颜色设置为白色、off-white 和红色,并将它们达到这些颜色的值设置为 0、最小可能的 non-zero 数字和 1.
ggplot(df, aes_string(x = "id", y = "tissue", fill = "value")) +
geom_tile(color = "white") +
geom_text(aes_string(label = "value"), color = "black", size = 2) +
scale_fill_gradientn(colours = c('white', "#FEECE3", 'red'),
values = c(0, .Machine$double.eps, 1)) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
我有一个数据框,df:
df <- structure(list(animal = c("cat", "cat", "cat", "cat", "cat",
"cat", "cat", "cat", "cat", "cat", "cat", "cat", "cat", "cat",
"cat", "cat", "cat", "cat"), id = c("201", "202", "203", "204",
"215", "217", "201", "202", "203", "204", "215", "217", "201",
"202", "203", "204", "215", "217"), tissue = c("tail", "tail",
"tail", "tail", "tail", "tail", "whiskers", "whiskers", "whiskers",
"whiskers", "whiskers", "whiskers", "feet", "feet", "feet", "feet",
"feet", "feet"), value = c(0.5, 2.2, 0, 0.2, 0, 0, 2.8, 19.9,
0, 85, 0, 0, 1.9, 4.1, 0, 0.4, 0, 120)), row.names = c(NA, -18L
), class = "data.frame")
head(df)
animal id tissue value
1 cat 201 tail 0.5
2 cat 202 tail 2.2
3 cat 203 tail 0.0
4 cat 204 tail 0.2
5 cat 215 tail 0.0
6 cat 217 tail 0.0
我有以下绘图功能:
p <- ggplot(df, aes_string(x = "id", y = "tissue", fill = "value")) +
geom_tile(color = "white") +
geom_text(aes_string(label = "value"), color = "black", size = 2) +
scale_fill_gradient(
low = "white", high = "red", na.value = "#D0D0D0") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
这会产生:
我希望零值以白色绘制,但任何高于零的值都从淡红色开始(例如#FEECE3)。
我试过这个:
p <- ggplot(df, aes_string(x = "id", y = "tissue", fill = "value")) +
geom_tile(color = "white") +
geom_text(aes_string(label = "value"), color = "black", size = 2) +
scale_fill_gradient2(
low = "white", mid = "#FEECE3", high = "red", na.value = "#D0D0D0",
midpoint = 1) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
但是它以灰红色绘制了零点。
我怎样才能让零点以白色绘制?
您可以使用 scale_fill_gradientn
。将三种颜色设置为白色、off-white 和红色,并将它们达到这些颜色的值设置为 0、最小可能的 non-zero 数字和 1.
ggplot(df, aes_string(x = "id", y = "tissue", fill = "value")) +
geom_tile(color = "white") +
geom_text(aes_string(label = "value"), color = "black", size = 2) +
scale_fill_gradientn(colours = c('white', "#FEECE3", 'red'),
values = c(0, .Machine$double.eps, 1)) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))