我试图告诉ggplot引用两个数据子集来为我的直方图条纹着色。如何指示AES中的填充功能根据数据来自哪个数据集为分数着色?
SW_WP_data=subset(sw_og, OG_CTYPE=="WP" & DSGSTTXT=="Designated" & OG_CLASS=="Pine")
ASP_WP_data=subset(sw_og, OG_CTYPE=="WP" & DSGSTTXT=="Designated" & OG_CLASS=="Pine" & NEWSUBSC=="ASP")
SW_ASP_WP=ggplot(data=SW_WP_data, aes(x=OGSCORE), fill=?) +
geom_histogram(binwidth=.6, alpha=.6, col="black") +
geom_histogram(data=ASP_WP_data, binwidth=.6, fill='red', col="black", alpha=.6)+
geom_vline(xintercept=33, linetype="dashed", colour="red")+
xlim(0,65)+
ylim(0,15)+
theme(plot.title = element_text(hjust=0.5))+
labs(title = "Statewide vs. ASP", y= "Count", x="Scores", caption = "2012 data")+
scale_fill_discrete(name="Data Extent", values=c("grey5", "red3"), labels=c("Statewide", "ASP"))
image link 显示了我正在尝试制作的内容,但有一个图例引用了来自两个不同数据框的分数。如何指示AES中的填充功能根据数据来自哪个数据集为分数着色?
答案 0 :(得分:0)
通常ggplot需要长格式的数据,因此您不需要像上面那样对数据帧进行子集化;你应该只为填充美学指定一个变量,因此只需要调用geom_histogram
一次。你没有包含数据,所以我用虹膜数据集做了一个模型。
修改以包含两个数据集:
假设您想将setosa虹膜与所有虹膜种类进行比较。我通常做的是制作我的子集,添加一个列来标记它,然后将它绑定回也有一个标志列的完整数据集。
setosa_only <- iris %>%
filter(Species == "setosa") %>%
mutate(flag = "setosa")
df <- iris %>%
mutate(flag = "all irises") %>%
bind_rows(setosa_only)
这样的事情应该得到你想要的东西:
ggplot(df, aes(x = Sepal.Length, fill = flag)) +
geom_histogram(position = "dodge") +
geom_vline(xintercept = 5, linetype = "dashed", color = "red") +
scale_fill_manual(values = c("grey5", "red3", "steelblue"))
加上任何铃声和放大器你想要的口哨。
有几点需要注意:
aes
。 scale_fill_manual
,而不是scale_fill_discrete
。 scale_*_manual
函数是具有values
参数的函数,您可以为其指定颜色,大小,形状等。position = "dodge"
添加到直方图中。那是因为你比较整体显示了一个子集,所以你要清楚你不是要在一个bin中添加irises的数量加上那个中的setosa irises的数量箱中。希望有所帮助!