【发布时间】:2026-01-12 01:25:01
【问题描述】:
我正在尝试处理自动循环以在 R 中创建绘图,但我是初学者,我真的很努力。
假设我有一个这样的数据框:
lp date cars laptops
1 2016-10-01 bmw lenovo
2 2016-10-02 mercedes dell
3 2016-10-03 mercedes dell
4 2017-11-04 null acer
5 2017-11-05 seat asus
6 2017-11-06 seat asus
7 2018-12-07 bmw null
8 2018-12-08 volvo asus
9 2018-12-09 volvo dell
10 2018-12-10 null lenovo
然后我使用这个代码:
df %>% mutate(date = year(date)) %>% group_by(date, cars) %>% count() -> df_mutated
所以我得到类似的东西:
date cars n
2016 bmw 1
2016 mercedes 2
2017 null 1
2017 seat 2
2018 bmw 1
2018 volvo 2
2018 null 1
之后我使用一些函数来创建两种类型的图
#gg plot function #
function.name <- function(df_mutated)
{
require(ggplot2)
p <- ggplot(df_mutated, aes(x = date, y=n))
p + geom_bar(stat = "identity",aes(fill = cars))
}
#use of function#
plot_cars <- function.name(df_mutated)
#ggplot with 100% percentage#
function.name2 <- function(df_mutated)
{
require(ggplot2)
p <- ggplot(df_mutated, aes(x = date, y=n))
p + geom_bar(stat = "identity",position = "fill",aes(fill = cars))+scale_y_continuous(labels = percent_format())
}
#use of percentage function#
plot_cars_percentage <- function.name2(df_mutated)
在上面的示例中,我为“日期”和一个分类变量 =“汽车”创建了两个不同的图。我想自动化这个过程,所以我可以为我将在我的数据集中拥有的每个分类变量创建这两个图,所以在这种情况下它将是汽车和笔记本电脑。当然,以一种不需要手动编写变量名的方式。所以最后我当然会有更多的图,因为每个分类变量会有 2 个图。
如果有任何帮助,我将不胜感激。 谢谢!
【问题讨论】:
-
也许可以使用
facet_wrap代替循环?简化一切...尝试添加此+ facet_wrap(~ laptops) -
也许我解释得不够好。我希望函数自动获取变量,所以我不必命名它们。
-
重做你的例子,因为不清楚你在问什么。为什么要包括百分比图?从您的评论看来,您想循环访问不同的变量以用于图中的
y变量,因此请基于此创建一个示例。 -
在示例中,我使用一个“y”变量来创建我需要的两种类型的图。这是我得到的所有代码,所以我已经粘贴了它。现在我想使用这些函数(或者不,我不知道,也许它们不适合)为我将在我的数据框中拥有的每个分类“y”变量创建这两种类型的图,所以在上面的例子中是汽车和笔记本电脑。
-
所以您想以编程方式定义用于
y的变量:ggplot2.tidyverse.org/reference/aes_.html