将方括号添加到 ggplot2 中的组轴标签
Adding square brackets to group axis labels in ggplot2
测试图 <- read.table("R/test",header=TRUE,sep="\t")
testmap
Models Group Brands Presence Country
1 Xperia Z5 A Sony 1 Japan
2 Galaxy S20 A Samsung 1 Korea
3 Xperia XZ B Sony 1 Japan
4 Galaxy Note FE B Samsung 0 Korea
5 Nord A OnePlus 1 China
我使用以下代码获得了根据国家/地区绘制的模型的presence/absence。
ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
geom_tile() + xlab(label="Country")+ ylab(label="Models")+
scale_fill_gradient(low="white",high="black")+
theme_bw() + theme(legend.position="none")
testmap.jpg
我想根据相应的品牌对模型进行分组。 (从技术上讲,画一个方括号来显示每个品牌组。)
我尝试按照之前 post 中的建议使用 facet_grid,但它也在绘图区域中对模型进行了分组。我想将整个地块区域保持为一个。是否可以生成与上面完全相同的图表,只是使用方括号根据品牌对它们进行分组?
尝试 facet_grid:
ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
geom_tile() + xlab(label="Country")+ ylab(label="Models")+
scale_fill_gradient(low="white",high="black")+
facet_grid(Brands ~., scales="free", space="free_y",switch="y")+
theme_bw() + theme(strip.placement="outside", strip.background=element_rect(fill="white"), axis.title=element_blank(),legend.position="none",strip.text.y.left = element_text(angle = 0))
试一试。仍在弄清楚如何正确地将文本添加到 y 轴。尽管这是非常手动且难以扩展的。
library(tidyverse)
library(grid)
library(pBrackets)
testmap <- tribble(
~Models, ~Group, ~Brands, ~Presence, ~Country,
"Xperia Z5", "A", "Sony", 1, "Japan",
"Galaxy S20", "A", "Samsung", 1, "Korea",
"Xperia XZ", "B", "Sony", 1, "Japan",
"Galaxy Note FE", "B", "Samsung", 0, "Korea",
"Nord", "A", "OnePlus", 1, "China")
)
ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
geom_tile() + xlab(label="Country")+ ylab(label="Models\n\n")+
scale_fill_gradient(name="Presence of Models", low="white",high="black")+
theme_bw() + theme(legend.position="none")
# using grid.locator to identify the coordinate for brackets
grid.locator(unit = "native")
# add bracket to plot area
grid.brackets(60, 134, 60, 32, type = 1)
grid.brackets(60, 233, 60, 157, type = 1)
grid.brackets(60, 353, 60, 247, type = 1)
输出:
感谢 Henrik 和 Sinh Nguyen 的帮助,我设法获得了我想要的东西——特别是:用于对 y 轴标签进行分组的方括号。
library(ggplot2)
library(grid)
library(pBrackets)
ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
geom_tile() + xlab(label="Country")+ ylab(label="Models\n\n\n\n\n\n\n\n")+
scale_fill_gradient(low="white",high="black")+
theme_bw() + theme(legend.position="none")
grid.locator(unit="native")
grid.brackets(140, 198, 140, 78, lwd=1, ticks=NA, type = 4)
grid.brackets(140, 321, 140, 320, lwd=0.5, ticks=NA, type = 4)
grid.brackets(140, 556, 140, 436, lwd=1, ticks=NA, type = 4)
grid.text(x=unit(35,'native'), y=unit(140,'native'),
label=expression(paste('Sony'),'type=4'), hjust = 0, vjust=0)
grid.text(x=unit(35,'native'), y=unit(325,'native'),
label=expression(paste('OnePlus'),'type=4'), hjust = 0, vjust=0)
grid.text(x=unit(35,'native'), y=unit(496,'native'),
label=expression(paste('Samsung'),'type=4'), hjust = 0, vjust=0)
我用grid.locator(unit="native")
估计位置。这是“估计的”,因为括号似乎稍微偏离了预期的位置。
另外,grid.brackets
中的h
可以用来调整括号的水平长度。
括号和字体的类型和调整更加灵活,在手册中有:https://cran.r-project.org/web/packages/pBrackets/pBrackets.pdf
它并不完美,但我想至少它解决了问题。 但仍然欢迎任何改进可视化的建议。
希望这个回答对遇到同样问题的人有所帮助!
谢谢!
测试图 <- read.table("R/test",header=TRUE,sep="\t")
testmap
Models Group Brands Presence Country
1 Xperia Z5 A Sony 1 Japan
2 Galaxy S20 A Samsung 1 Korea
3 Xperia XZ B Sony 1 Japan
4 Galaxy Note FE B Samsung 0 Korea
5 Nord A OnePlus 1 China
我使用以下代码获得了根据国家/地区绘制的模型的presence/absence。
ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
geom_tile() + xlab(label="Country")+ ylab(label="Models")+
scale_fill_gradient(low="white",high="black")+
theme_bw() + theme(legend.position="none")
testmap.jpg
我想根据相应的品牌对模型进行分组。 (从技术上讲,画一个方括号来显示每个品牌组。)
我尝试按照之前 post 中的建议使用 facet_grid,但它也在绘图区域中对模型进行了分组。我想将整个地块区域保持为一个。是否可以生成与上面完全相同的图表,只是使用方括号根据品牌对它们进行分组?
尝试 facet_grid:
ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
geom_tile() + xlab(label="Country")+ ylab(label="Models")+
scale_fill_gradient(low="white",high="black")+
facet_grid(Brands ~., scales="free", space="free_y",switch="y")+
theme_bw() + theme(strip.placement="outside", strip.background=element_rect(fill="white"), axis.title=element_blank(),legend.position="none",strip.text.y.left = element_text(angle = 0))
试一试。仍在弄清楚如何正确地将文本添加到 y 轴。尽管这是非常手动且难以扩展的。
library(tidyverse)
library(grid)
library(pBrackets)
testmap <- tribble(
~Models, ~Group, ~Brands, ~Presence, ~Country,
"Xperia Z5", "A", "Sony", 1, "Japan",
"Galaxy S20", "A", "Samsung", 1, "Korea",
"Xperia XZ", "B", "Sony", 1, "Japan",
"Galaxy Note FE", "B", "Samsung", 0, "Korea",
"Nord", "A", "OnePlus", 1, "China")
)
ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
geom_tile() + xlab(label="Country")+ ylab(label="Models\n\n")+
scale_fill_gradient(name="Presence of Models", low="white",high="black")+
theme_bw() + theme(legend.position="none")
# using grid.locator to identify the coordinate for brackets
grid.locator(unit = "native")
# add bracket to plot area
grid.brackets(60, 134, 60, 32, type = 1)
grid.brackets(60, 233, 60, 157, type = 1)
grid.brackets(60, 353, 60, 247, type = 1)
输出:
感谢 Henrik 和 Sinh Nguyen 的帮助,我设法获得了我想要的东西——特别是:用于对 y 轴标签进行分组的方括号。
library(ggplot2)
library(grid)
library(pBrackets)
ggplot(testmap, aes(x=Country, y=Models, fill=Presence))+
geom_tile() + xlab(label="Country")+ ylab(label="Models\n\n\n\n\n\n\n\n")+
scale_fill_gradient(low="white",high="black")+
theme_bw() + theme(legend.position="none")
grid.locator(unit="native")
grid.brackets(140, 198, 140, 78, lwd=1, ticks=NA, type = 4)
grid.brackets(140, 321, 140, 320, lwd=0.5, ticks=NA, type = 4)
grid.brackets(140, 556, 140, 436, lwd=1, ticks=NA, type = 4)
grid.text(x=unit(35,'native'), y=unit(140,'native'),
label=expression(paste('Sony'),'type=4'), hjust = 0, vjust=0)
grid.text(x=unit(35,'native'), y=unit(325,'native'),
label=expression(paste('OnePlus'),'type=4'), hjust = 0, vjust=0)
grid.text(x=unit(35,'native'), y=unit(496,'native'),
label=expression(paste('Samsung'),'type=4'), hjust = 0, vjust=0)
我用grid.locator(unit="native")
估计位置。这是“估计的”,因为括号似乎稍微偏离了预期的位置。
另外,grid.brackets
中的h
可以用来调整括号的水平长度。
括号和字体的类型和调整更加灵活,在手册中有:https://cran.r-project.org/web/packages/pBrackets/pBrackets.pdf
它并不完美,但我想至少它解决了问题。 但仍然欢迎任何改进可视化的建议。
希望这个回答对遇到同样问题的人有所帮助!
谢谢!