R 在facetting上分组选择变量
给定一个数据帧df,如下所示R 在facetting上分组选择变量,r,ggplot2,R,Ggplot2,给定一个数据帧df,如下所示 text <- " CAR_MODEL,ENGINE_VENDOR,var,value,label Toyota Corolla,FIAT,Three_Family_Pct,33.98,33.98 Nissan Sunny,PRATNEY,Three_Family_Pct,29.84,29.84 Renault Duster,FIAT,Three_Family_Pct,27.86,27.86 Suzuki Ciaz,FIAT,Three_Family_Pct,
text <- "
CAR_MODEL,ENGINE_VENDOR,var,value,label
Toyota Corolla,FIAT,Three_Family_Pct,33.98,33.98
Nissan Sunny,PRATNEY,Three_Family_Pct,29.84,29.84
Renault Duster,FIAT,Three_Family_Pct,27.86,27.86
Suzuki Ciaz,FIAT,Three_Family_Pct,26.6,26.6
Renault Duster,FIAT,Single_Family_Pct,0,0
Toyota Corolla,FIAT,Single_Family_Pct,0,0
Nissan Sunny,PRATNEY,Single_Family_Pct,0,0
Suzuki Ciaz,FIAT,Single_Family_Pct,0,0
Suzuki Ciaz,FIAT,Two_Family_Pct,42.37,42.37
Renault Duster,FIAT,Two_Family_Pct,41.53,41.53
Toyota Corolla,FIAT,Two_Family_Pct,36.31,36.31
Nissan Sunny,PRATNEY,Two_Family_Pct,32.27,32.27
Nissan Sunny,PRATNEY,Four_Family_Pct,37.89,37.89
Suzuki Ciaz,FIAT,Four_Family_Pct,31.03,31.03
Renault Duster,FIAT,Four_Family_Pct,30.61,30.61
Toyota Corolla,FIAT,Four_Family_Pct,29.71,29.71
Nissan Sunny,PRATNEY,Mileage,12688.5,12688
Suzuki Ciaz,FIAT,Mileage,11989,11989
Renault Duster,FIAT,Mileage,11132.5,11132
Toyota Corolla,FIAT,Mileage,10357,10357
"
df <- read.table(textConnection(text), sep=",", header = T)
我得到了上面这样的图表。不过,我希望图表中有两处变化
里程
作为最底部的绘图var
sFour\u Family\u Pct
、Three\u Family\u Pct
、Two\u Family\u Pct
、Single\u Family\u Pct
,需要以聚集条形图的形式绘制,因为它们属于相同的逻辑属性-它们显示了族类型的百分比@PoGibas-添加了一个用于参考的表示(在excel中制作)-X轴标签需要在那里 像这样的事
library(tidyverse)
p1 <- df %>%
mutate(var2=ifelse(var =="Mileage", "Mileage","Family types")) %>%
mutate(var=factor(var, levels = levels(df$var)[c(1,3:5,2)])) %>%
mutate(label2=ifelse(var =="Mileage", scales::comma(label,digits = 0),paste0(label,"%"))) %>%
ggplot(aes(x=CAR_MODEL, y=value, fill=var, label = label2))+
geom_col(aes(col=ENGINE_VENDOR),position = position_dodge(width = 0.9), size=1.2) +
geom_label(position = position_dodge(width = 0.9) ,show.legend = F)+
scale_color_manual(values = c(1,2))+
theme(legend.position="top")
# and the plot using wrap
p1 + facet_wrap( ~ var2, scales = "free_y", ncol = 1)
对于网格方法,我将删除aes(col=ENGINE\u VENDOR)
参数 像这样的
library(tidyverse)
p1 <- df %>%
mutate(var2=ifelse(var =="Mileage", "Mileage","Family types")) %>%
mutate(var=factor(var, levels = levels(df$var)[c(1,3:5,2)])) %>%
mutate(label2=ifelse(var =="Mileage", scales::comma(label,digits = 0),paste0(label,"%"))) %>%
ggplot(aes(x=CAR_MODEL, y=value, fill=var, label = label2))+
geom_col(aes(col=ENGINE_VENDOR),position = position_dodge(width = 0.9), size=1.2) +
geom_label(position = position_dodge(width = 0.9) ,show.legend = F)+
scale_color_manual(values = c(1,2))+
theme(legend.position="top")
# and the plot using wrap
p1 + facet_wrap( ~ var2, scales = "free_y", ncol = 1)
对于网格方法,我将删除
aes(col=ENGINE\u VENDOR)
参数 不是一个完美的解决方案,但会显示所有需要的信息:
library(ggplot2)
ggplot(df, aes(CAR_MODEL, value)) +
geom_rect(aes(xmin = CAR_MODEL, xmax = CAR_MODEL,
ymin = -Inf, ymax = Inf,
color = ENGINE_VENDOR),
size = 60) +
geom_bar(data = subset(df, var != "Mileage"),
aes(fill = var),
stat = "identity", position = "dodge", width = 0.6) +
geom_bar(data = subset(df, var == "Mileage"),
stat = "identity", width = 0.2, fill = "grey20") +
facet_wrap(~ var == "Mileage", ncol = 1, scales = "free") +
labs(x = NULL,
y = NULL,
fill = NULL,
color = NULL) +
scale_fill_brewer(palette = "Accent") +
scale_color_brewer(palette = "Paired") +
theme_classic() +
theme(strip.background = element_blank(),
strip.text.x = element_blank(),
axis.ticks.x = element_blank(),
legend.position = "top") +
guides(colour = guide_legend(override.aes = list(fill = brewer.pal(2, "Paired")[1:2],
size = 1)))
使用
facet\u wrap
查看里程/非里程信息,使用geom\u rect
查看发动机信息。不是完美的解决方案,但会显示所有需要的信息:
library(ggplot2)
ggplot(df, aes(CAR_MODEL, value)) +
geom_rect(aes(xmin = CAR_MODEL, xmax = CAR_MODEL,
ymin = -Inf, ymax = Inf,
color = ENGINE_VENDOR),
size = 60) +
geom_bar(data = subset(df, var != "Mileage"),
aes(fill = var),
stat = "identity", position = "dodge", width = 0.6) +
geom_bar(data = subset(df, var == "Mileage"),
stat = "identity", width = 0.2, fill = "grey20") +
facet_wrap(~ var == "Mileage", ncol = 1, scales = "free") +
labs(x = NULL,
y = NULL,
fill = NULL,
color = NULL) +
scale_fill_brewer(palette = "Accent") +
scale_color_brewer(palette = "Paired") +
theme_classic() +
theme(strip.background = element_blank(),
strip.text.x = element_blank(),
axis.ticks.x = element_blank(),
legend.position = "top") +
guides(colour = guide_legend(override.aes = list(fill = brewer.pal(2, "Paired")[1:2],
size = 1)))
使用
facet\u wrap
查看里程/非里程信息,使用geom\u rect
查看发动机信息。需要以聚集条形图的形式绘制:这会在需要填充堆叠条形图时更改整体图。您同意这样的解决方案吗?@PoGibas-在OPS中添加了一个表示以供参考,但该绘图中没有引擎信息。您希望如何显示它?填充已被使用。@PoGibas-需要引擎信息-但是必须有一种方法来指示条形图中的条形图。@user3206440聚集条形图中颜色的含义是什么?为什么会有8个条形图?需要以聚集条形图的形式绘制:当需要填充的堆叠条形图时,这会更改整体绘图。您同意这样的解决方案吗?@PoGibas-在OPS中添加了一个表示以供参考,但该绘图中没有引擎信息。您希望如何显示它?填充已被使用。@PoGibas-需要引擎信息-但是必须有一种方法来指示条形图中的条形图。@user3206440聚集条形图中颜色的含义是什么?为什么有8条?是的,这很接近-需要在顶部绘图中添加图例键,以便指示哪个条是什么。此外,发动机信息可能会添加到底部绘图中。是的,这已关闭-需要在顶部绘图中添加图例键,以便指示哪个栏是什么。发动机信息也可以添加到底部绘图中。是否可以将值标签添加到每个条形图?是否可以将值标签添加到每个条形图?