【问题标题】:Regarding getting correct axis title using ggplot2 in R关于在 R 中使用 ggplot2 获得正确的轴标题
【发布时间】:2020-10-26 20:52:34
【问题描述】:

我想为数据框中的每一列绘制箱线图。所以我创建了一个函数来做到这一点。我的数据集如下所示:

set.seed(123)
x1=rnorm(100,0,1)
x2=rnorm(100,0,0.5)
x3=rnorm(100,0,0.6)
data_x=data.frame(x1,x2,x3)
datax_long=data_x %>% gather(x_val ,value ,x1:x3)

> head(datax_long)
  x_val       value
1    x1 -0.56047565
2    x1 -0.23017749
3    x1  1.55870831
4    x1  0.07050839
5    x1  0.12928774
6    x1  1.71506499

我创建了以下函数来实现我的目的。

plot_fun=function(var,low_lim,upp_lim,coef,data)
{
  plt=ggplot(data, aes(x = coef, y =var ,color=var)) +
    stat_summary(geom = "errorbarh", 
                 fun.min = function(z) quantile(z, low_lim), 
                 fun = mean,
                 fun.max = function(z) quantile(z, upp_lim)) +
    stat_summary(geom = "point", fun = mean)
  print(plt + labs(y=var)+labs(colour = var))
  
}

它给了我想要的输出,除了 y 轴标签和图例的标题。

plot_fun(datax_long$x_val,0.025,0.975,datax_long$value,datax_long)

在上面的输出中,y轴的标签应该是“x_val”而不是x1。此外,图例的标题也应该是“x_val”而不是 x1。

谁能帮我弄清楚如何修改上述函数以获得所需的结果?

谢谢。

【问题讨论】:

    标签: r ggplot2 plot


    【解决方案1】:

    试试这个。您可以将函数与名称变量的字符串一起使用。然后您的其余代码将正常工作。代码如下:

    #Function
    plot_fun=function(var,low_lim,upp_lim,coef,data)
    {
      plt=ggplot(data, aes_string(x = coef, y =var ,color=var)) +
        stat_summary(geom = "errorbarh", 
                     fun.min = function(z) quantile(z, low_lim), 
                     fun = mean,
                     fun.max = function(z) quantile(z, upp_lim)) +
        stat_summary(geom = "point", fun = mean)
      print(plt + labs(y=var)+labs(colour = var))
      
    }
    #Apply
    plot_fun('x_val',0.025,0.975,datax_long$value,datax_long)
    

    输出:

    【讨论】:

      【解决方案2】:

      使用一些整洁的 eval 可以这样实现:

      1. 将您喜欢绘制的变量传递给您的函数,而不是传递向量。
      2. 在您的函数中,您可以使用 curly-curly-operator {{ 调用这些变量。
      3. 对于标签,我们必须将变量名称转换为字符串,这可以使用as_label(enquo(...)) 来实现。
      library(tidyverse)
      
      set.seed(123)
      x1=rnorm(100,0,1)
      x2=rnorm(100,0,0.5)
      x3=rnorm(100,0,0.6)
      data_x=data.frame(x1,x2,x3)
      datax_long=data_x %>% gather(x_val ,value ,x1:x3)
      
      plot_fun=function(data, var, coef, low_lim,upp_lim)
      {
        plt = ggplot(data, aes(x = {{coef}}, y = {{var}} ,color = {{var}})) +
          stat_summary(geom = "errorbarh", 
                       fun.min = function(z) quantile(z, low_lim), 
                       fun = mean,
                       fun.max = function(z) quantile(z, upp_lim)) +
          stat_summary(geom = "point", fun = mean)
        plt + labs(y = as_label(enquo(var)), colour = as_label(enquo(var)))
        
      }
      
      plot_fun(datax_long, x_val, value, 0.025,0.975)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多