我有汽车数据框(n个品牌的注册年数在2个不同时期内测量)。我想分析价格变化的动态,所以我试图创建一个折线图(x =年,y =两个价格序列)每个品牌的图表。
# data frame example
brand=sort(rep(paste(letters[1:26]),16))
data_date = rep(seq(as.Date("2017/5/1"), by = "month", length.out = 2 ),208)
category = rep(c(1,2),208)
cars = data.frame(brand, data_date, category)
cars = cars[order(cars$brand, cars$data_date, cars$category),]
year = rep(rep(seq(as.Date("2010/1/1"), by = "year", length.out = 8 ),2),26)
cars = cbind(cars, year, price= abs(rnorm(416))*10)
View(cars)
我使用ggplot和facet_wrap以及facet_grid创建了一个图表,但图表几乎无法读取。
我试图使用包gridExtra和grid.arrange函数,但这给了我一个我无法解决的错误。
另一种替代多时隙不适用于R版本3.3.3
有人可以解释为什么grid.arrange在这里不起作用吗?
(同一张图表打印次数)
有没有更好的方法可以在一个屏幕上获取所有图表?
有我的尝试:
load(ggplot2)
# plot 1
ggplot(data=cars , aes(x=cars$year , y=cars$price,
group=interaction(cars$brand, cars$data_date),
fill=interaction(cars$brand, cars$data_date),
color =interaction(cars$brand, cars$data_date)))+
geom_line()+ geom_point() +
#facet_grid(.~cars$brand)
facet_wrap(~cars$brand, ncol=2)
# plot 2 using loop
car_brands = levels(cars$brand)
p_list=list(0)
for (i in 1:26) {
plot_data = cars[(cars$brand==car_brands[i]),]
p1 = ggplot(data=plot_data , aes(x=plot_data$year , y=plot_data$price,
group=interaction(plot_data$brand, plot_data$data_date),
fill=interaction(plot_data$brand,plot_data$data_date),
color =interaction(plot_data$brand,plot_data$data_date)))+
geom_line()+ geom_point() +
facet_grid(.~plot_data$brand)+
ggtitle(car_brands[i])
p_list[[i]] = p1
}
library(gridExtra)
grid.arrange(p_list, ncol=2)
Error in gList(list(list(data = list(brand = c(1L, 1L, 1L, 1L, 1L, 1L, :
only 'grobs' allowed in "gList"
更新
grid.arrange(grobs=p_list, ncol=2)
解决了错误,但循环方法仍存在两个问题:
1。图表仍然难以阅读
2.正在打印相同的图表次数(循环的问题是什么?我无法弄清楚它为什么不起作用)
有没有更好的方法来创建这个任务?
答案 0 :(得分:1)
考虑by
而不是for
循环,因为它将指定因子的数据帧切割为数据帧列表,以用于ggplot
等任何所需操作。同时考虑减少图形数量以提高可读性,甚至调整图例和轴如下所示:
p_list <- by(cars, cars$brand, function(b) {
brand_date <- interaction(b$brand, b$data_date)
p <- ggplot(data=b, aes(x=b$year, y=b$price,
group = brand_date,
fill = brand_date,
color = brand_date)) +
geom_line() + geom_point() +
facet_grid(.~b$brand) + labs(x="Year", y="Price") +
theme(legend.position="bottom") +
ggtitle(max(as.character(b$brand)))
})
# VERY LARGE PLOT
grid.arrange(grobs=p_list, ncol=2)
# FIRST 6 GRAPHS FOR BETTER READABILITY
grid.arrange(grobs=p_list[1:6], ncol=2)
答案 1 :(得分:0)
我在2.循环方法中发现了错误
需要var sharedApplication = utils.ios.getter(UIApplication, UIApplication.sharedApplication);
var overlay = UIView.alloc().initWithFrame({
origin : {
x: 0,
y: 44,
},
size: {
height: 100,
width: platform.screen.mainScreen.widthPixels
}
});
overlay.backgroundColor = UIColor.blackColor;
overlay.alpha = .6;
sharedApplication.keyWindow.rootViewController.presentedViewController.cameraOverlayView = overlay;
而不是aes_string()