微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于在R中使用ggplot2获得正确的轴标题

如何解决关于在R中使用ggplot2获得正确的轴标题

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

set.seed(123)
x1=rnorm(100,1)
x2=rnorm(100,0.5)
x3=rnorm(100,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)

enter image description here

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

有人可以帮我弄清楚如何修改上述功能以获得所需的结果吗?

谢谢。

解决方法

尝试一下。您可以将函数与字符串一起用于name变量。然后,您的其余代码将正常工作。这里的代码:

#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)

输出:

enter image description here

,

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

  1. 与其传递矢量,不如将要绘制的变量传递给函数。
  2. 在函数内部,您可以使用curl-curly-operator {{调用这些变量。
  3. 对于标签,我们必须将变量名转换为可以使用as_label(enquo(...))实现的字符串。
library(tidyverse)

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

plot_fun=function(data,var,upp_lim)
{
  plt = ggplot(data,aes(x = {{coef}},y = {{var}},color = {{var}})) +
    stat_summary(geom = "errorbarh",fun = mean)
  plt + labs(y = as_label(enquo(var)),colour = as_label(enquo(var)))
  
}

plot_fun(datax_long,x_val,0.975)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。