我正在努力实现以下目标:
我发现我可以通过theme()
影响文本:
theme(
axis.text.y = element_text(size = 10),
plot.title = element_text(face = "bold"),
)
但是,我找不到在以下内容中创建换行符的正确参数:
axis.text.y = element_text(size = 10)
我是在错误的地区实现我的目标吗?
再次,更大的目标是释放整个图的左侧垂直部分中的空间。我不知道如何开始解决这个问题。情节的完整代码。
top_customers_tbl %>%
# Geometries ----
ggplot(aes(revenue, bikeshop_name)) +
geom_segment(aes(xend = 0, yend = bikeshop_name),
color = palette_light()[1],
size = 1) +
geom_point(size = -1,
color = palette_light()[1]) +
# Labels "inward" hjust special input ----
geom_label(aes(label = label_text),
hjust = "inward",
size = 3,
color = palette_light()[1]) +
# Formatting ----
scale_x_continuous(labels = scales::dollar_format(scale = 1e-6, suffix = "M")) +
labs(
title = str_glue("Top {n} Customers"),
subtitle = str_glue("Top 6 customers = 51% of revenue
\nStart: {year(min(bike_orderlines_tbl$order_date))}\nEnd: {year(max(bike_orderlines_tbl$order_date))}"),
x = "Revenue ($M)",
y = "Customer"
) +
theme_tq() +
theme(
axis.text.y = element_text(size = 10),
plot.title = element_text(face = "bold"),
)
答案 0 :(得分:0)
如果您对换行符有清晰的了解...
您可以在预定义的位置创建一个带有硬中断(\n
)的新变量。例如,如果您想用三个或三个以上的单词在字符串的第一个单词之后打断:
# Load mtcars data, isolate car names in new var
df <-
mtcars[1:5,] %>%
rownames_to_column(var = 'LongName')
# Add line break in 2nd space (' ') of LongName
df <-
df %>%
mutate(
Splits = if_else(
str_count(LongName, '\\S+') > 2,
str_c(word(LongName,1,1), word(LongName,2,str_count(LongName,'\\S+')), sep = '\n'),
LongName
)
)
if_else
标识长度超过两个单词的字符串,然后使用str_c
,第一个单词和其余字符串(由\n
分隔)粘贴在一起。对于短字符串,它将返回原始字符串。
> df$Splits
[1] "Mazda RX4" "Mazda\nRX4 Wag" "Datsun 710" "Hornet\n4 Drive"
[5] "Hornet Sportabout"
如果您没有清晰的图案...
您可能必须在新变量中对中断进行硬编码,并在绘制时调用scale_x_discrete
中的中断。例如:
labs = c('Datsun 710','Mazda \n RX4', 'Mazda \n RX4 Wag')
mtcars[1:3,] %>%
rownames_to_column() %>%
ggplot(aes(x = rowname, y = mpg)) +
geom_col() +
scale_x_discrete(labels = labs) +
coord_flip()
第一种方法的优点是,您无需在轴上重新排序类别时就可以重新排序标签。