我有以下数据框,描述了用户(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))
图表如下所示:
现在回答我的问题。对于每个功能,我基本上都需要十一次相同的代码块。 我当然可以每次简单地交换列名,但是是否有任何方法可以将图形存储为变量 p,例如,然后只修改必要的值(在这种情况下,每个需要更改的“Distance_DaysTracked”变量中的其他列名称)?我只是想减少必要的代码行数,而不必编写这些大的代码 每次都是块。唯一可能需要调整的其他事情是“plot.tag.position”的值,因为图形的大小各不相同,并且我希望“nUsers”输出与 传说。
我尝试尝试一些不同的东西,但没有成功。
非常感谢您提前付出的所有时间和精力!
您可以像这样使用
lapply
:
library(ggplot2)
plots <- lapply(names(iris)[-5],
\(var) ggplot(iris, aes(fill = Species, x = .data[[var]])) +
geom_histogram())
print(plots[[1]])