Bioenergy and pollinators: can they coexist?

Bioenergy is an important component of sustainable energy production. Obtaining biofuels from native grasslands may provide a more ecologically sustainable alternative than traditional sources, such as corn. For example, we know that pollinators are much more abundant in native grasslands. But how will bees and their floral resources respond to disturbances, such as grassland harvesting, that are necessary for bioenergy production?

cropped-img_1194.jpgIn an upcoming issue of Ecological Applications, we describe the results of an experiment that tests this question. We found that harvesting had a positive effect on the grassland floral community. Harvesting opens space for new plant growth and knocks back competitively dominant species. The result is a greater abundance and diversity of floral resources for bees.


IMG_0398Although having more floral resources is typically good for bees, whether bees responded positively or negatively to harvesting depended on whether they nest above or below ground. The 80% of bee species that nest below ground in the soil (and thus safe from the harvester) tended to benefit from harvesting because they could take advantage of the more abundant resources. On the other hand, harvesting negatively affected the remaining 20% of bee species that nest above ground in e.g., hollow stems because their nests were destroyed in the process.

Our study supports the idea that bioenergy production from grasslands can promote pollinator conservation. However, steps will be needed to ensure the persistence of bee species that nest above ground.

This study was conducted in collaboration with colleagues in the labs of Claudio Gratton at the University of Wisconsin – Madison, Rufus Isaacs at Michigan State University, and the Great Lakes Bioenergy Research Center. Read more about our experiment here:

Spiesman, BJ, A Bennett, R Isaacs, and C Gratton. In press. Harvesting effects on wild bee communities in bioenergy grasslands depend on nesting guild. Ecological Applications doi: 10.1002/eap.1828

Visualizing plant-pollinator networks with R

The igraph package for R has some nice features for visualizing networks.


You can download a copy of the example data set here. Copy the matrix to your clipboard and then read in the data. Rows are plant species, columns are pollinators, and values are relative visitation rates.

net = read.table("clipboard", header=T, row.names=1)

First convert the network to an incidence matrix and then plot it.

i_net = graph_from_incidence_matrix(net, weight=T)


You can change the layout to a bipartite graph or circular.

plot(i_net, layout=layout.bipartite)


Enter help(layout) to see a bunch of other layouts. Changing the vertex (V) and edge (E) attributes can make these plots look a bit nicer.

V(i_net)$frame.color = "white"
V(i_net)$label = NA


We can change the size of the vertices to reflect things like each species’ relative abundance or degree centrality.

#For degree centrality:
deg = centr_degree(i_net, mode="all")
V(i_net)$size = 5*sqrt(deg$res)


You might have to play around with transformations to get the vertex size right. 5 * the square root of the degree values is shown here. You can also change the color of vertices to highlight plants and pollinators.

polcol = rep("gray50",dim(net)[2])
plantcol = rep("black",dim(net)[1])
clrs = rbind(as.matrix(plantcol),as.matrix(polcol))
V(i_net)$color = clrs


Next we can change the edge widths to reflect the weight of the interaction.

E(i_net)$width = E(i_net)$weight/15


Again, you might have to re-scale the weight values or you could get something that looks like this:


Vertex colors can also be changed to reflect different species that belong to the same module.

#Identify modules for plants and pollinators =
plantmod =$membership[1:dim(net)[1]]
pollmod =$membership[(dim(net)[1]+1):(length($membership))]

#Re-order the network matrix rows and columns by module ID
onet = net[order(plantmod),] 
onet = t(t(onet)[order(pollmod),])
i_net = graph_from_incidence_matrix(onet, weight=T)

#Add a color palette
com.mem = rbind(as.matrix(sort(plantmod)),as.matrix(sort(pollmod)))
colrs = wes_palette(name="Darjeeling", 

#Specify vertex and edge parameters
deg = centr_degree(i_net, mode="all")