使用ggplot2中的scale_y_reverse()限制水平条形图中的Y轴

时间:2015-05-18 15:45:30

标签: r ggplot2

我用ggplot2中的共享轴绘制了两个水平条形图(感谢这个http://graphviz.org/)。该图显示了左侧巴西各州的生活指数以及右侧2013年和1980年之间的差异。

这是数据

esperanca_estados <- read.table(text = "
ID   Estado Total Diferenca
23     SC  78.1      11.5
28     DF  77.3      10.5
21     SP  77.2      11.3
19     ES  77.1      12.2
24     RS  76.9       9.1
18     MG  76.4      12.9
22     PR  76.2      12.1
20     RJ  75.2      11.1
12     RN  75.0      16.8
1      BR  74.9      12.4
25     MS  74.7      10.9
27     GO  73.7      11.4
26     MT  73.5      13.2
11     CE  73.2      14.2
7      AP  73.1      13.0
3      AC  72.9      12.6
17     BA  72.7      13.0
14     PE  72.6      15.9
8      TO  72.5       0.0
13     PB  72.3      15.3
16     SE  71.9      11.7
6      PA  71.5      10.6
4      AM  71.2      10.5
2      RO  70.7      10.8
5      RR  70.6      11.5
10     PI  70.5      11.9
15     AL  70.4      14.7
9      MA  69.7      12.2
", sep = "", header = TRUE)

我正在使用此代码:

library(ggplot2)
library(gridExtra)

plot_mid <- ggplot(esperanca_estados, aes(x=1,y=Estado))+
  geom_text(aes(label=Estado), size=3)+
  geom_segment(aes(x=0.94,xend=0.96,yend=Estado))+
  geom_segment(aes(x=1.04,xend=1.065,yend=Estado))+
  ggtitle("")+
  ylab(NULL)+
  scale_x_continuous(expand=c(0,0),limits=c(0.94,1.065))+
  theme(axis.title=element_blank(),
    panel.grid=element_blank(),
    axis.text.y=element_blank(),
    axis.ticks.y=element_blank(),
    panel.background=element_blank(),
    axis.text.x=element_text(color=NA),
    axis.ticks.x=element_line(color=NA),
    plot.margin = unit(c(1,-1,1,-1), "mm"))

plot1 <- ggplot(esperanca_estados, aes(x=Estado, y=Total))+
  geom_bar(stat = "identity", fill="cornflowerblue") + 
  ggtitle("Esperança de  Vida ao Nascer") +
  theme(axis.title.x = element_blank(), 
        axis.title.y = element_blank(), 
        axis.text.y = element_blank(), 
        axis.ticks.y = element_blank(), 
        plot.margin = unit(c(1,-1,1,0), "mm"),
        plot.title=element_text(size = 10))+
  scale_y_reverse() + coord_flip()


plot2 <- ggplot(esperanca_estados, aes(x=Estado, y=Diferenca))+
  geom_bar(stat = "identity", fill="cornflowerblue")+ 
  ggtitle("Diferença 2013-1980")+
  theme(axis.title.x = element_blank(), axis.title.y = element_blank(), 
        axis.text.y = element_blank(), axis.ticks.y = element_blank(),
        plot.margin = unit(c(1,0,1,-1), "mm"), plot.title=element_text(size = 10)) +
  coord_flip()

plot_esperanca <- grid.arrange(arrangeGrob(plot1,plot_mid,plot2,
    widths=c(4/9,1/9,4/9), ncol=3),
    main=textGrob("Gráfico 1: Esperança de Vida ao Nascer – Estados",  
    gp=gpar(fontsize=12, font=2)))

我得到的情节与此类似:post

左图中的Y轴从0到80),但是我想将它从40限制到80.我尝试的选项都没有用:

当我在plot1的代码末尾使用ylim(c(40,80))时,我得到一个从40到80的Y轴,但没有反转,并且图中没有条形。如果我使用ylim(c(80,40)),我得到几乎相同,在图中没有条形,但Y轴的顺序正确。

如果我使用&#34; scale_y_continuous(limits = c(40,80))&#34;在&#34; scale_y_reverse()&#34;之前,与第一个图相比没有任何反应,我收到警告信息:

In loop_apply(n, do.ply) : Stacking not well defined when ymin != 0

有人知道如何限制左图中的Y轴?

谢谢,拉斐尔。

0 个答案:

没有答案