【问题标题】:ggplot2 interaction use only first characterggplot2 交互仅使用第一个字符
【发布时间】:2021-03-21 10:21:46
【问题描述】:

在一个项目中,我展示了条形图并使用交互命令对组进行排序,因为一个是另一个的严格子组。我不想打印出第一组的全名,因为这会占用很多空间。有没有办法将单词限制为第一个字符或类似的东西?

mtcars$name <- rownames(mtcars) 
ggplot(data = mtcars, aes(x=interaction(mtcars$cyl, mtcars$name)))+
geom_bar()+
    theme(axis.text.x = element_text(angle = 90, hjust = 1,vjust = 0.5))

例如,这里只有#汽缸是我感兴趣的,我只是使用汽车名称来订购它们。但是它们占用了很多空间。只写汽车的第一个字母就很理想了。所以我想以 8.A 为例。在我的原始数据中,第一个变量具有不同的长度(不只是 1 个字符,因为 #cylinder 在这里有)

感谢您的任何回答, 问候

【问题讨论】:

    标签: r ggplot2 interaction


    【解决方案1】:

    您可以在scale_x_discrete 中使用正则表达式编辑标签:

    library(ggplot2)
    
    ggplot(data = mtcars, aes(x=interaction(mtcars$cyl, mtcars$name)))+
      geom_bar()+
      xlab('Interaction cyl vs Name') + 
      theme(axis.text.x = element_text(angle = 90, hjust = 1,vjust = 0.5)) + 
      scale_x_discrete(labels = function(x) sub('(\\..).*', '\\1', x))
    

    () 中的所有内容都称为捕获组,我们在其中指定要保留文本的哪一部分。在这里,我们提到我们希望将所有内容保留到一个点(即\\.. 是正则表达式中的一个特殊字符,需要用\\ 进行转义),然后是另一个字符(.)。

    【讨论】:

    • 在我的正常项目中,第一个变量的长度很复杂。不像 #cyl 总是长度 1 我有不同的长度。有什么办法可以检测到第一个变量名的长度并将其提供给子字符串?
    • 非常感谢!此更新现在工作正常。但是我很想保留“。”之后的第一个字母。如果可能的话
    • @Duesser 我再次编辑了我的答案以保留“。”之后的第一个字母。你现在可以检查吗?
    • 非常感谢,这正是我想要的!你能解释一下这个功能是如何工作的,所以我将来可以自己修改它吗? function(x) sub('(\\..).*', '\\1', x)) 更具体地说:如何将其更改为在“。”之后显示 2 个字符举个例子
    • 我在答案中添加了一些正则表达式的解释。要显示 2 个字符,您可以执行 scale_x_discrete(labels = function(x) sub('(\\..{2}).*', '\\1', x))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多