R ggplot标签每个有序小提琴的观察数量,使用facet wrap。

huangapple go评论78阅读模式
英文:

R ggplot label number of observations per ordered violin with facet wrap

问题

以下是您提供的代码的翻译:

# 我有一个绘图,看起来像是使用鸢尾花数据的以下代码生成的输出
require(tidyverse)
require(purrr)
require(forcats) # 用于排序 facets 的有用工具,参见 [此处][1]

# 生成一些长格式的数据,并使用某些变量进行自定义排序
tbl <- iris %>%
  pivot_longer(., cols = 1:4, names_to = "Msr", values_to = "Vls") %>%
  mutate(Msr = factor(Msr)) %>%
  mutate(plot_fct = fct_cross(Species, Msr)) %>%
  mutate(plot_fct = fct_reorder(plot_fct, Vls))

# 用于生成次要对数刻度线的工具函数,参见 [此处][1](非常有帮助)
minor_breaks_log <- function(base) {
  # 防止懒惰计算
  force(base)
  # 将计算包装在外部函数返回的函数中
  function(limits) {
    ggplot2:::calc_logticks(
      base = base,
      minpow = floor(log(limits[1], base = base)),
      maxpow = ceiling(log(limits[2], base = base))
    )$value
  }
}

# 绘制图像
ggplot(data = tbl, aes(x = plot_fct, y = Vls, fill = Species)) +
  geom_violin() +
  coord_flip() + # 交换坐标
  scale_y_log10(labels = function(x) sprintf("%g", x),
                minor_breaks = minor_breaks_log(10)) + # 标签格式化
  theme_bw(base_size = 12) +
  annotation_logticks(base = 10, sides = "b") +
  facet_wrap(~Species, nrow = 1, scales = "free")

# 我现在想在每个 facet 的右侧,紧靠最大边框的内侧列出每个小提琴图中的观察数量,
# 我相信这是可能的,但似乎找不到一个示例,可以在小提琴图和 facets 中执行此类标签。

注意:代码中的注释保留了原文中的英文内容,不作翻译。

英文:

I've got a plot that looks like the output of the following code using the iris data

require(tidyverse)
require(purrr)
require(forcats) # Useful for ordering facets found at [here][1]

# Make some long data and set a custom sorting order using some of t
tbl &lt;- iris %&gt;% 
       pivot_longer(., cols = 1:4, names_to = &quot;Msr&quot;, values_to = &quot;Vls&quot;) %&gt;%
       mutate(Msr = factor(Msr)) %&gt;% 
       mutate(plot_fct = fct_cross(Species, Msr)) %&gt;%                              
       mutate(plot_fct = fct_reorder(plot_fct, Vls))                           


# A functioning factory for minor log breaks found [here][1] (very helpful)
minor_breaks_log &lt;- function(base) {
  # Prevents lazy evaluation
  force(base) 
  # Wrap calculation in a function that the outer function returns
  function(limits) {
    ggplot2:::calc_logticks(
      base = base, 
      minpow = floor(log(limits[1], base = base)), 
      maxpow = ceiling(log(limits[2], base = base))
    )$value
  }
}


# Plot the images
ggplot(data = tbl, aes(x =plot_fct, y = Vls, fill = Species)) +
       geom_violin() +
       coord_flip() +                                                               # swap coords
       scale_y_log10(labels = function(x) sprintf(&quot;%g&quot;, x),
                     minor_breaks = minor_breaks_log(10)) +                       # format for labels                                           # box fills
       theme_bw(base_size = 12) +
       annotation_logticks(base = 10, sides = &quot;b&quot;) +
       facet_wrap(~Species, nrow = 1, scales = &quot;free&quot;)  

R ggplot标签每个有序小提琴的观察数量,使用facet wrap。

I would now like to list the number of observations per violin on the right side of each facet just inside the maximum border, which I'm sure is possible but cannot seem to find an example that does this sort of labeling, with violins and facets.

答案1

得分: 2

ggplot(data = tbl, aes(y = plot_fct, fill = Species)) +
  geom_violin(aes(x = Vls)) +
  geom_text(aes(label = after_stat(count)), hjust = 1,
            stat = "count", position = "fill") +
  scale_x_log10(labels = function(x) sprintf("%g", x),
                minor_breaks = minor_breaks_log(10)) +
  theme_bw(base_size = 12) +
  annotation_logticks(base = 10, sides = "b") +
  facet_wrap(~Species, nrow = 1, scales = "free")

R ggplot标签每个有序小提琴的观察数量,使用facet wrap。


Note: The code section has been left untranslated as per your request.

<details>
<summary>英文:</summary>

    ggplot(data = tbl, aes(y = plot_fct, fill = Species)) +
      geom_violin(aes(x = Vls)) +
      geom_text(aes(label = after_stat(count)), hjust = 1,
                stat = &quot;count&quot;, position = &quot;fill&quot;) +
      scale_x_log10(labels = function(x) sprintf(&quot;%g&quot;, x),
                    minor_breaks = minor_breaks_log(10)) +                       # format for labels                                           # box fills
      theme_bw(base_size = 12) +
      annotation_logticks(base = 10, sides = &quot;b&quot;) +
      facet_wrap(~Species, nrow = 1, scales = &quot;free&quot;)  
[![enter image description here][1]][1]


  [1]: https://i.stack.imgur.com/MV9iS.png

</details>



huangapple
  • 本文由 发表于 2023年2月16日 11:04:23
  • 转载请务必保留本文链接:https://go.coder-hub.com/75467438.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定