在ggplot2中更改离散x动物园比例

时间:2015-08-19 15:02:22

标签: r ggplot2 axis-labels

我有这个data.frame:

data<-structure(list(MESANIO = structure(c(2008.25, 2008.41666666667, 
2008.58333333333, 2008.66666666667, 2008.75, 2008.83333333333, 
2008.91666666667, 2009, 2009.08333333333, 2009.16666666667, 2009.25, 
2009.33333333333, 2009.41666666667, 2009.5, 2009.58333333333, 
2009.66666666667, 2009.75, 2009.83333333333, 2009.91666666667, 
2010, 2010.08333333333, 2010.16666666667, 2010.25, 2010.33333333333, 
2010.41666666667, 2010.5, 2010.58333333333, 2010.66666666667, 
2010.75, 2010.83333333333, 2010.91666666667, 2011, 2011.08333333333, 
2011.16666666667, 2011.25, 2011.33333333333, 2011.41666666667, 
2011.5, 2011.58333333333, 2011.66666666667, 2011.75, 2011.83333333333, 
2011.91666666667, 2012, 2012.08333333333, 2012.16666666667, 2012.25, 
2012.33333333333, 2012.41666666667, 2012.5, 2012.58333333333, 
2012.66666666667, 2012.75, 2012.83333333333, 2012.91666666667, 
2013, 2013.08333333333, 2013.16666666667, 2013.25, 2013.33333333333, 
2013.41666666667, 2013.5, 2013.5, 2013.58333333333, 2013.58333333333, 
2013.66666666667, 2013.66666666667, 2013.75, 2013.75, 2013.83333333333, 
2013.83333333333, 2013.91666666667, 2013.91666666667, 2014, 2014, 
2014.08333333333, 2014.08333333333, 2014.16666666667, 2014.16666666667, 
2014.25, 2014.25, 2014.33333333333, 2014.33333333333, 2014.41666666667, 
2014.41666666667, 2014.5, 2014.5, 2014.5, 2014.58333333333, 2014.58333333333, 
2014.58333333333, 2014.66666666667, 2014.66666666667, 2014.66666666667, 
2014.75, 2014.75, 2014.75, 2014.83333333333, 2014.83333333333, 
2014.83333333333, 2014.91666666667, 2014.91666666667, 2014.91666666667, 
2015, 2015, 2015, 2015, 2015.08333333333, 2015.08333333333, 2015.08333333333, 
2015.08333333333, 2015.16666666667, 2015.16666666667, 2015.16666666667, 
2015.16666666667, 2015.25, 2015.25, 2015.25, 2015.25, 2015.33333333333, 
2015.33333333333, 2015.33333333333, 2015.33333333333, 2015.41666666667, 
2015.41666666667, 2015.41666666667, 2015.41666666667, 2015.5, 
2015.5, 2015.5, 2015.5), class = "yearmon"), MesesRegistrado = c("4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"4. Más de 24", "4. Más de 24", "4. Más de 24", "4. Más de 24", 
"3. Más de 12", "4. Más de 24", "3. Más de 12", "4. Más de 24", 
"3. Más de 12", "4. Más de 24", "3. Más de 12", "4. Más de 24", 
"3. Más de 12", "4. Más de 24", "3. Más de 12", "4. Más de 24", 
"3. Más de 12", "4. Más de 24", "3. Más de 12", "4. Más de 24", 
"3. Más de 12", "4. Más de 24", "3. Más de 12", "4. Más de 24", 
"3. Más de 12", "4. Más de 24", "3. Más de 12", "4. Más de 24", 
"2. Más de 6", "3. Más de 12", "4. Más de 24", "2. Más de 6", 
"3. Más de 12", "4. Más de 24", "2. Más de 6", "3. Más de 12", 
"4. Más de 24", "2. Más de 6", "3. Más de 12", "4. Más de 24", 
"2. Más de 6", "3. Más de 12", "4. Más de 24", "2. Más de 6", 
"3. Más de 12", "4. Más de 24", "1. Menos de 6", "2. Más de 6", 
"3. Más de 12", "4. Más de 24", "1. Menos de 6", "2. Más de 6", 
"3. Más de 12", "4. Más de 24", "1. Menos de 6", "2. Más de 6", 
"3. Más de 12", "4. Más de 24", "1. Menos de 6", "2. Más de 6", 
"3. Más de 12", "4. Más de 24", "1. Menos de 6", "2. Más de 6", 
"3. Más de 12", "4. Más de 24", "1. Menos de 6", "2. Más de 6", 
"3. Más de 12", "4. Más de 24", "1. Menos de 6", "2. Más de 6", 
"3. Más de 12", "4. Más de 24"), Clientes = c(1L, 1L, 1L, 3L, 
110L, 238L, 270L, 300L, 309L, 321L, 295L, 345L, 373L, 376L, 409L, 
449L, 485L, 480L, 518L, 595L, 604L, 659L, 639L, 722L, 698L, 750L, 
775L, 802L, 868L, 894L, 974L, 1002L, 971L, 1060L, 1037L, 1047L, 
1089L, 1112L, 1155L, 1182L, 1226L, 1292L, 1375L, 1374L, 1416L, 
1457L, 1445L, 1451L, 1407L, 1467L, 1533L, 1574L, 1607L, 1595L, 
1716L, 1767L, 1719L, 1781L, 1807L, 1830L, 1822L, 17L, 1907L, 
82L, 1880L, 128L, 1912L, 173L, 1891L, 219L, 1888L, 280L, 1964L, 
337L, 1965L, 369L, 1946L, 421L, 1938L, 487L, 1945L, 556L, 1946L, 
641L, 1942L, 26L, 662L, 1948L, 117L, 598L, 1945L, 190L, 652L, 
1960L, 255L, 632L, 2023L, 321L, 627L, 2056L, 422L, 642L, 2099L, 
57L, 451L, 660L, 2139L, 182L, 410L, 647L, 2101L, 292L, 421L, 
675L, 2175L, 752L, 428L, 654L, 2172L, 995L, 435L, 690L, 2265L, 
1756L, 456L, 697L, 2285L, 2693L, 462L, 705L, 2382L)), .Names = c("MESANIO", 
"MesesRegistrado", "Clientes"), row.names = c(NA, -131L), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), vars = list("MESANIO"), drop = TRUE)

使用此数据我使用ggplot()生成以下内容:

g_evtrafico<-ggplot(data, 
                    aes(x = as.factor(MESANIO), 
                        y = Clientes,
                        group = 1))+
  geom_bar(stat = "identity")+
  facet_grid(MesesRegistrado ~ .)+
  stat_smooth(method="lm", se=FALSE)+
  labs(title = "Flujo de Clientes", x = "Fecha", y = "Clientes")

输出如下:

enter image description here

我试图消除(以编程方式,因为这是在rmarkdown文档中)x轴标签干扰正确读取图形。理想情况下,该函数将根据数据长度“决定”中断。在这种情况下,例如,我只需要年份(列MESANIO是一个常年动物园对象)。

我尝试添加scale_x_discrete()但是即使我手动设置了泛型中断也没有显示。我猜这是由于方面,但不确定。

2 个答案:

答案 0 :(得分:1)

除非您有充分的理由使用yearmon将类factor的x值转换为离散比例,否则我认为您应该按原样保留它们并使用zoo::scale_x_yearmon:< / p>

library(zoo)
ggplot(data, aes(x = MESANIO, y = Clientes) +
  geom_bar(stat = "identity")+
  facet_grid(MesesRegistrado ~ .) +
  scale_x_yearmon()

enter image description here

您可以使用nbreaksformat参数来进一步微调外观。

答案 1 :(得分:0)

您可以尝试使用pretty_breaks包中的scales功能:

...
g_evtrafico <- ggplot(data, aes(x = as.factor(MESANIO), y = Clientes, group = 1)) +
  geom_bar(stat = "identity") +
  scale_x_discrete(breaks=pretty_breaks(n=10)) +
  facet_grid(MesesRegistrado ~ .) +
  stat_smooth(method="lm", se=FALSE) +
  labs(title = "Flujo de Clientes", x = "Fecha", y = "Clientes")
...