To fix this, you can tweak the plot.igraph function a plot.igraph . To do this, you can experiment with trace(plot.igraph,edit=TRUE) and change the function code.
A few tips to get what you want: For labels, line 319 of the function:
y <- layout[, 2] + label.dist * sin(-label.degree) * (vertex.size + 6 * 8 * log10(nchar(labels) + 1))/200
So, placing the y labels is proportional to the number of label characters, just delete log10(nchar(labels) + 1) and the labels will remain at the same level.
For size problems, if you want to keep rescale , the y position of the chart is determined by line 55
layout <- layout.norm(layout, -1, 1, -1, 1)
You can change the third number to whatever you want, and the graph will be higher (for example, layout <- layout.norm(layout, -1, 1, 0, 1) will center the vertexes on 0). You can also change the margins by changing the layout <- layout.norm(layout, -1, 1, 0, 1) will center the vertexes on 0). You can also change the margins by changing the par`. You can, for example, do:
oldMargins<-par("mar") par(mar=c(10,4,4,4))
and after the graph par(mar=oldMargins)
This is the graph that I get with this code after settings:

I left the axes to simplify the setup and remove the pies, because there was no value in your message.
oldMargins<-par("mar") par(mar=c(10,4,4,4)) plot(g1, layout=layout.grid(g1, width=4), vertex.pie.color=list(heat.colors(4)), edge.curved=TRUE, vertex.label=c("A", "AA", "AAAA", "AAAAAA"), vertex.size=20, vertex.label.dist=1, vertex.label.degree=pi/2, edge.label=1:5,axes=TRUE, ylim=c(-0.5,0.5),xlim=c(-1,1)) par(mar=oldMargins)
When you restart R, any changes made to the function will be deleted, or you can use untrace to return to the original function. You can see this post for more information.