R 指定图例列中的因子数

R 指定图例列中的因子数,r,ggplot2,R,Ggplot2,是否可以手动指示ggplot图例中每列显示的因子数? 这是一个可重复的示例,演示了我正在尝试做的事情: #loading libraries library(ggplot2) #Creating hypothetical dataframe services<-data.frame(study=c(0),category=c(0),subcategory=c(0)) services<-services[-1,] services[1:15,1]<-c(1:15) serv

是否可以手动指示ggplot图例中每列显示的因子数? 这是一个可重复的示例,演示了我正在尝试做的事情:

#loading libraries
library(ggplot2)

#Creating hypothetical dataframe
services<-data.frame(study=c(0),category=c(0),subcategory=c(0))
services<-services[-1,]
services[1:15,1]<-c(1:15)

services[1:4,2]<-c("Provisioning", "Regulating", "Suporting", "Cultural")
services[5:8,2]<-c("Provisioning", "Regulating", "Suporting", "Cultural")
services[9:10,2]<-c("Provisioning", "Regulating") 
services[11:15,2]<-c("Provisioning", "Regulating", "Suporting", "Cultural", "Provisioning")

services[1:4,3]<-c("Water supply", "Climate regulation", "Soil formation",      "Recreation")
services[5:8,3]<-c("Fisheries", "Water purification", "Habitat", "Recreation")
services[9:10,3]<-c("Water supply", "Flood regulation") 
services[11:15,3]<-c("Agriculture", "Water purification", "Soil formation", "Aesthetics", "Fisheries")

services

 #Manually re-ordering subcategory factors by larger categories and by number of occurences in the df (I am also looking for a better way to do this, as it must exist!!)
table(services$subcategory)
services$subcategory  <- factor(services$subcategory, 
                            levels=c(#Cultural services
                              "Recreation", "Aesthetics",
                              #Provisioning services
                              "Fisheries", "Water supply", "Agriculture",
                              #Regulating services
                              "Water purification", "Climate regulation","Flood regulation",
                              #Supporting services
                              "Soil formation", "Habitat"))


#Creating figure
ggplot(services, aes(category, fill=subcategory)) + geom_bar() + 
theme(legend.position="right") + 
guides(fill=guide_legend(ncol=4, title="Ecosystem Service Sub Categories"))+
 xlab("Ecosystem Service Type") +
 ylab("Number of times each ecosystem service was evaluated") 
#加载库
图书馆(GG2)
#创建假设数据帧

服务Ha!虽然哈德利确认ggplot2不可能在本地实现(见评论中的链接),但有一种非常老练的方法,它受到ggplot2中具有相关传说的最大美学数量的限制

我所做的是创建四个虚拟数据框,并在打印窗口外绘制四个不同的美学特征(大小、颜色、alpha、线型)。然后可以覆盖图例美学,使其看起来像填充颜色。关闭原始填充图例,瞧

我知道组的顺序和组内的顺序并不完全是你想要的,但它应该很容易随因子水平等而改变

原始绘图

新绘图

代码

#####################
#原始代码
#####################
#加载库
图书馆(GG2)
#创建假设数据帧

服务今天早上我遇到了一个类似的问题,于是想出了这个局部解决方案

ggplot(data = services,
       mapping = aes(x = category, fill = interaction(category, subcategory, sep = ', '))) +
  geom_bar() +
  guides(fill = guide_legend(title = 'Category and subcategory'))

已经阅读了
指南\u图例()
?是!我肯定已经看过了。尽管guide_legend()允许您调整图例的许多方面,例如行数和列数,但在这里您似乎无法调整每行或每列中显示的因子数。如果我错了,一定要解释!我很高兴能解决这个问题!公平地说,那么你也许可以从哈德利的推文中找到问题的答案:要获得更多帮助/override.aes()的示例,请查看这篇文章:嗯,还刚刚意识到,
show\u col(hue\u pal())
给了我错误的十六进制代码,用于管理服务的蓝色。手动重置所有颜色(无论如何你都应该这样做,因为色调是一个很难区分的调色板)将解决此问题。劳拉,非常感谢你花时间找到解决此问题的方法!我真的很喜欢你的方法!我想剩下的一个问题是,为我的真实数据集手动写出所有颜色和服务的想法并不特别吸引人,因为我的数据集要大得多。我真的认为是时候为ggplot2构建一个简单的扩展了,它可以简单、快速、轻松地解决这类问题。。。无论如何,再次谢谢你!