修改绘图变量的值(在 R 中)

问题描述 投票:0回答:1

我有以下数据框,描述了用户(Id)有多少天 跟踪他的活动以获取不同的“特征”。

Rows: 35
Columns: 12
Groups: Id [35]
$ Id                         <chr> "1503960366", "1624580081", "1644430081", "1844505072", "1…
$ Distance_DaysTracked       <int> 48, 49, 40, 28, 28, 42, 42, 38, 32, 42, 30, 41, 38, 20, 41…
$ LoggedActivity_DaysTracked <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0…
$ Calories_DaysTracked       <int> 61, 62, 60, 62, 62, 62, 62, 62, 49, 62, 50, 61, 62, 35, 59…
$ Intensities_DaysTracked    <int> 61, 62, 60, 33, 49, 62, 62, 43, 49, 62, 50, 50, 38, 21, 58…
$ MET_DaysTracked            <int> 61, 61, 58, 61, 61, 62, 62, 61, 48, 62, 49, 60, 61, 34, 58…
$ Sleep_DaysTracked          <int> 50, 0, 8, 7, 34, 1, 59, 1, 45, 0, 0, 44, 23, 0, 53, 23, 53…
$ Steps_DaysTracked          <int> 61, 62, 60, 32, 48, 62, 62, 43, 49, 61, 50, 50, 38, 21, 59…
$ Weight_DaysTracked         <int> 3, 0, 0, 0, 2, 0, 0, 0, 1, 4, 0, 0, 0, 0, 2, 0, 1, 6, 1, 0…
$ Fat_DaysTracked            <int> 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0…
$ BMI_DaysTracked            <int> 3, 0, 0, 0, 2, 0, 0, 0, 1, 4, 0, 0, 0, 0, 2, 0, 1, 6, 1, 0…
$ HR_DaysTracked             <int> 0, 0, 0, 0, 0, 42, 5, 0, 32, 0, 0, 0, 27, 0, 0, 30, 0, 42,…

我想为每个特征创建绘图(geom_col),其中 x 轴 = 'Id' 且 y 轴 = '..._DaysTracked'。所以我总共需要11张图。我想包括 趋势线,以及输出使用的用户数量的小计算 该功能。我创建了以下情节:

DaysTracked_All %>% 
  ggplot() +
  geom_col(mapping = aes(x = Id, 
                         y = Distance_DaysTracked, 
                         fill = Distance_DaysTracked), 
           width = 0.8) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90)) +
  geom_hline(yintercept = mean(DaysTracked_All$Distance_DaysTracked), 
             colour = "plum2", 
             linewidth = 1) +
  ylim(0, 65) +
  
  annotate("text",                                                    # add mean value to 
           x = 37,                                                    # trendline    
           y = mean(DaysTracked_All$Distance_DaysTracked)+2, 
           label =  round(mean(DaysTracked_All$Distance_DaysTracked), 
                          digits = 1), 
           colour = "plum2", fontface = "bold", size = 4) +
  coord_cartesian(clip = "off") +
  
  labs(tag = sprintf("nUsers: %i",                                    # add tag for number of    
                     DaysTracked_All %>%                              # people who used feature 
                       select(Id, Distance_DaysTracked) %>%
                       filter(Distance_DaysTracked != 0) %>% 
                       nrow()
                     )) +   
  
  theme(plot.tag.position = c(0.83, 0.93),                            # change pos/colour/size           
        plot.tag = element_text(colour = "plum2",                     # of tag
                                size = 14))

图表如下所示:

Plot for column 'Distance_DaysTracked'

现在回答我的问题。对于每个功能,我基本上都需要十一次相同的代码块。 我当然可以每次简单地交换列名,但是是否有任何方法可以将图形存储为变量 p,例如,然后只修改必要的值(在这种情况下,每个需要更改的“Distance_DaysTracked”变量中的其他列名称)?我只是想减少必要的代码行数,而不必编写这些大的代码 每次都是块。唯一可能需要调整的其他事情是“plot.tag.position”的值,因为图形的大小各不相同,并且我希望“nUsers”输出与 传说。

我尝试尝试一些不同的东西,但没有成功。

非常感谢您提前付出的所有时间和精力!

r variables plot
1个回答
0
投票

您可以像这样使用

lapply

library(ggplot2)
plots <- lapply(names(iris)[-5], 
                \(var) ggplot(iris, aes(fill = Species, x = .data[[var]])) + 
                  geom_histogram())
print(plots[[1]])
© www.soinside.com 2019 - 2024. All rights reserved.