ggplot:在y轴行名称中创建换行符

时间:2019-11-25 00:20:15

标签: r ggplot2

我正在努力实现以下目标:

  1. 在y轴行文本中创建换行符(在下图中用红色圆圈圈出);
  2. 在图的左垂直3号释放空间。

Text for line break circled in red

我发现我可以通过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"),            
    )

1 个答案:

答案 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() 

第一种方法的优点是,您无需在轴上重新排序类别时就可以重新排序标签。