R:如何在 ggplot 条形图中的右轴上添加标签?
R: How to add a label on the right axis in a ggplot barchart?
假设我使用以下代码创建一个 ggplot 条形图:
mtcars$carb<-as.character(mtcars$carb)
mtcars$gear<-as.character(mtcars$gear)
mtcars$carb_labelright<-paste0("label_right",mtcars$carb)
#pelacolset
ggplot(mtcars,
#color by which to fill
aes(fill=gear,
#y axis
y=wt,
#x axis
x=carb)) +
#title and subtitle
#barplot
geom_bar(position="fill", stat="identity",width=.8)+
coord_flip()+
#rotate x axis labels 90 degrees
theme(axis.text.x = element_text(angle=90),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank())
情节是这样的:
现在我想使用列carb_labelright 在条形图的右侧添加数据。它应该是这样的:
如何做到这一点?
我发现使用 geom_text
(您需要一个数据框)或 annotate(geom = "text",...)
进行注释最容易。使用注释通常更安全,因为 geom_text
喜欢为每一行创建一个标签(当您使用精心准备的数据框进行注释时,这很好)。
library(tidyverse)
mtcars$carb<-as.character(mtcars$carb)
mtcars$gear<-as.character(mtcars$gear)
mtcars$carb_labelright<-paste0("label_right",mtcars$carb)
ggplot(mtcars) +
# use geom_col, a convenience wrapper for geom_bar(stat = "identity")
geom_col(aes(fill=gear, y=wt, x=carb),
position="fill", width=.8) +
# you have to turn clipping off
coord_flip(clip = "off") +
annotate(geom = "text", x = unique(mtcars$carb),
label = unique(mtcars$carb_labelright),
y = 1, hjust = 0) +
# you need to increase the legend's margin and make it "transparent"
# otherwise you will cover some labels.
theme(legend.margin = margin(l = 1, unit = "inch"),
legend.background = element_blank())
由 reprex package (v2.0.1)
于 2021-10-26 创建
我也 运行 解决了离散轴不支持二级刻度的问题(参见相关 issue on the ggplot2 repo). I solved it by writing a manual guide 我自己确实允许我制作具有离散刻度的二级轴。在下面的代码中,我们使用ggh4x::guide_axis_manual()
结合 rlang/purrr lambda 函数来格式化标签。(免责声明:我是 ggh4x 的作者)。
library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 4.1.1
mtcars$carb<-as.character(mtcars$carb)
mtcars$gear<-as.character(mtcars$gear)
mtcars$carb_labelright<-paste0("label_right",mtcars$carb)
p <- ggplot(mtcars,
aes(fill = gear, y = carb, x = wt)) +
geom_col(position="fill", width=.8)
p + guides(
y.sec = ggh4x::guide_axis_manual(
labels = ~ paste0("label_right_", .x)
)
)
或者,您也可以直接将标签作为字符向量给出。
p + guides(
y.sec = ggh4x::guide_axis_manual(
labels = sort(unique(mtcars$carb_labelright))
)
)
由 reprex package (v2.0.1)
于 2021-10-26 创建
假设我使用以下代码创建一个 ggplot 条形图:
mtcars$carb<-as.character(mtcars$carb)
mtcars$gear<-as.character(mtcars$gear)
mtcars$carb_labelright<-paste0("label_right",mtcars$carb)
#pelacolset
ggplot(mtcars,
#color by which to fill
aes(fill=gear,
#y axis
y=wt,
#x axis
x=carb)) +
#title and subtitle
#barplot
geom_bar(position="fill", stat="identity",width=.8)+
coord_flip()+
#rotate x axis labels 90 degrees
theme(axis.text.x = element_text(angle=90),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank())
情节是这样的:
现在我想使用列carb_labelright 在条形图的右侧添加数据。它应该是这样的:
如何做到这一点?
我发现使用 geom_text
(您需要一个数据框)或 annotate(geom = "text",...)
进行注释最容易。使用注释通常更安全,因为 geom_text
喜欢为每一行创建一个标签(当您使用精心准备的数据框进行注释时,这很好)。
library(tidyverse)
mtcars$carb<-as.character(mtcars$carb)
mtcars$gear<-as.character(mtcars$gear)
mtcars$carb_labelright<-paste0("label_right",mtcars$carb)
ggplot(mtcars) +
# use geom_col, a convenience wrapper for geom_bar(stat = "identity")
geom_col(aes(fill=gear, y=wt, x=carb),
position="fill", width=.8) +
# you have to turn clipping off
coord_flip(clip = "off") +
annotate(geom = "text", x = unique(mtcars$carb),
label = unique(mtcars$carb_labelright),
y = 1, hjust = 0) +
# you need to increase the legend's margin and make it "transparent"
# otherwise you will cover some labels.
theme(legend.margin = margin(l = 1, unit = "inch"),
legend.background = element_blank())
由 reprex package (v2.0.1)
于 2021-10-26 创建我也 运行 解决了离散轴不支持二级刻度的问题(参见相关 issue on the ggplot2 repo). I solved it by writing a manual guide 我自己确实允许我制作具有离散刻度的二级轴。在下面的代码中,我们使用ggh4x::guide_axis_manual()
结合 rlang/purrr lambda 函数来格式化标签。(免责声明:我是 ggh4x 的作者)。
library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 4.1.1
mtcars$carb<-as.character(mtcars$carb)
mtcars$gear<-as.character(mtcars$gear)
mtcars$carb_labelright<-paste0("label_right",mtcars$carb)
p <- ggplot(mtcars,
aes(fill = gear, y = carb, x = wt)) +
geom_col(position="fill", width=.8)
p + guides(
y.sec = ggh4x::guide_axis_manual(
labels = ~ paste0("label_right_", .x)
)
)
或者,您也可以直接将标签作为字符向量给出。
p + guides(
y.sec = ggh4x::guide_axis_manual(
labels = sort(unique(mtcars$carb_labelright))
)
)
由 reprex package (v2.0.1)
于 2021-10-26 创建