2012-07-11 140 views
2

我已经搜索了关于此主题的其他帖子,但无法找出我的问题。我有关于巴西政府机构的预算数据,并对机构类型进行了分类。为了制造我的情节,我这样做:ggplot2带文字标签facet_wrap

g <- ggplot(data=totalex.df, aes(x=year, y=totalex.billions)) 

g + 
geom_line(aes(colour=factor(agency.type))) + 
facet_wrap(agency.type ~ unit, ncol=6) + 
opts(strip.text.x = theme_text(size=2)) + 
opts(axis.text.x=theme_text(size=4)) + 
opts(legend.position="none") + 
scale_y_sqrt("total expenditure (billions)") 

我的问题是,我的小标签现在包含两条信息:机构类型,与上面的代码产生的unit-- this is a pdf of the graph的名称。我只希望它包含单位的名称。但是,如果我从facet_wrap命令中删除agency.type,则ggplot会丢失代理的顺序。

dput(totalex.df)输出是很长,但在这里它是第100个观测

> dput(totalex.df.short) 
structure(list(year = c(2006, 2006, 2006, 2006, 2006, 2006, 2006, 
2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 
2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 
2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 
2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 
2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 
2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2007, 2007, 
2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 
2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 
2007, 2007, 2007, 2007, 2007), totalex = c(312685301, 46492724, 
85210069, 1478565787, 193941282, 260659307, 8327549603, 0, 18474604, 
91006939, 53538760, 91800981, 402711174, 1290377603, 978348209, 
48360776, 24676283, 89820385, 1038592122, 5364674136, 127383506, 
7552311, 3847705355, 232732854, 34317692, 351714802, 156996087, 
104782402, 0, 47741444, 475303761, 229743044, 102577783, 19106706, 
78619935, 0, 730381485, 998733938, 110785185, 37114540, 108530853, 
0, 0, 0, 2660417864, 169144966, 104350391, 1038914804, 336660855, 
11995616, 0, 0, 9085111, 0, 5281402, 138708048, 11283655, 478421026, 
221976619, 95680527, 8270558, 890375094, 0, 156563720, 198830207, 
286909569, 5525428151, 734738984, 218905808, 1120014693, 859180, 
359873525, 50214197, 95572929, 1628550454, 227051722, 286610734, 
8868199792, 17388668, 19551190, 101047436, 58123546, 101878908, 
423760647, 1019623567, 1061465081, 49559379, 24278026, 110344326, 
1145862548, 7610896352, 163919333, 8376104, 4355447941, 282679957, 
45506963, 392551882, 208594544, 122420822, 0), agency.type = structure(c(NA, 
NA, NA, 3L, 1L, 1L, 7L, 1L, 1L, 1L, 1L, 1L, 4L, 1L, 1L, 1L, 1L, 
3L, 1L, 6L, 1L, 1L, 7L, 1L, 3L, 3L, 1L, 3L, 1L, 1L, 1L, 3L, 3L, 
1L, 3L, 1L, 1L, 1L, 3L, 3L, 3L, 1L, 5L, 3L, 1L, 5L, 3L, 1L, 1L, 
1L, 1L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 4L, 1L, 1L, 2L, 
1L, 1L, 3L, 1L, 1L, 3L, NA, NA, NA, 3L, 1L, 1L, 7L, 1L, 1L, 1L, 
1L, 1L, 4L, 1L, 1L, 1L, 1L, 3L, 1L, 6L, 1L, 1L, 7L, 1L, 3L, 3L, 
1L, 3L, 1L), .Label = c("Delivery", "Guidance for policy formulation/Research", 
"Regulatory", "Regulatory/Delivery", "Regulatory/Delivery", 
"Transfer/delivery", "Transfer/Regulatory/Deliver"), class = "factor"), 
    unit = structure(c(29L, 28L, 27L, 17L, 21L, 66L, 55L, 5L, 
    69L, 25L, 33L, 36L, 44L, 45L, 9L, 34L, 68L, 13L, 6L, 61L, 
    53L, 65L, 51L, 31L, 41L, 39L, 37L, 49L, 22L, 58L, 47L, 71L, 
    40L, 60L, 19L, 18L, 64L, 10L, 62L, 59L, 42L, 7L, 11L, 4L, 
    52L, 32L, 38L, 8L, 54L, 20L, 12L, 24L, 1L, 63L, 3L, 16L, 
    57L, 70L, 43L, 15L, 2L, 46L, 30L, 35L, 56L, 23L, 48L, 26L, 
    14L, 50L, 67L, 29L, 28L, 27L, 17L, 21L, 66L, 55L, 5L, 69L, 
    25L, 33L, 36L, 44L, 45L, 9L, 34L, 68L, 13L, 6L, 61L, 53L, 
    65L, 51L, 31L, 41L, 39L, 37L, 49L, 22L), .Label = c("Administrative Council of Economic Defense (CADE)        ", 
    "Air Force Real Estate Funding Agency (CFIAE)         ", 
    "Alexandre Gusmao Foundation (FUNAG)           ", 
    "Amazon Development Superintendency (SUDAM)          ", 
    "Applied Economic Research Institute (IPEA)          ", 
    "Brazilian Agricultural Research Corporation (EMBRAPA)       ", 
    "Brazilian Communication Company (EBC)           ", 
    "Brazilian Company of Urban Railway (CBTU)          ", 
    "Brazilian Institute of Environment and Renewable Natural Resources (IBAMA)  ", 
    "Brazilian Institute of Geography and Statistics (IBGE)       ", 
    "Brazilian Institute of Museums (IBRAM)           ", 
    "Brazilian Military Material Industry (IMBEL)         ", 
    "Brazilian Securities Comission (CVM)           ", 
    "Brazilian Space Agency (AEB)             ", 
    "Brazilian Tourism Company (EMBRATUR)           ", 
    "Brazilian Urban Railway (TRENSUBR)            ", 
    "Central Bank (BACEN)               ", 
    "Chico Mendes Institute (ICMBio)            ", 
    "Civil Aviation National Agency (ANAC)           ", 
    "Cultural Foundation Palmares             ", 
    "Dom Pedro II School               ", 
    "Energy Research Company (EPE)             ", 
    "Engineering, Construction and Railway (VALEC)         ", 
    "Excellence center in advanced electronic technology (CEITEC)     ", 
    "Federal Centre of Educational Technology Celso Suckow da Fonseca (CEFET-RJ) ", 
    "Graduate students improvement coordination (CAPES)        ", 
    "Hospital Cristo Redentor S.A.             ", 
    "Hospital F\x90mina S.A               ", 
    "Hospital Nossa Senhora da Concei\x8d\x8bo S.A          ", 
    "Housing Building Fund for Mariners (CCCPMC)         ", 
    "Indigenous National Foundation (FUNAI)           ", 
    "Institute of the Historical and Artistic National Heritage (IPHAN)    ", 
    "Joaquim Nabuco Foundation              ", 
    "Jorge Duprat Figueiredo Foundation (FUNDACENTRO)        ", 
    "Manaus Free Trade Zone Superintendency (SUFRAMA)        ", 
    "Minas Gerais Federal Centre of Educational Technology (CEFET-MG)    ", 
    "Mineral Resources Research Institute (CPRM)         ", 
    "National Agency of Land Transport (ANTT)          ", 
    "National Agency of Sanitary Supervision (ANVISA)        ", 
    "National Agency of Supplementary Health (ANS)         ", 
    "National Agency of Water Transport (ANTAQ)         ", 
    "National Agency of Electrical Energy (ANEEL)         ", 
    "National Agency of Oil, Natural Gas and Biofuel (ANP)       ", 
    "National Commission of Nuclear Energy (CNEN)         ", 
    "National Company of Food Supply (CONAB)          ", 
    "National Council of Scientific and Technological Development (CNPq)   ", 
    "National Department of Draught Prevention (DNOCS)        ", 
    "National Department of Infrasctructure Transport (DNIT)      ", 
    "National Department of Mineral Production (DNPM)        ", 
    "National Development Trust (FND)            ", 
    "National Health Foundation (FUNASA)           ", 
    "National Institute of Colonization and Land Reform (INCRA)      ", 
    "National Institute of Industrial Property (INPI)        ", 
    "National Institute of Metrology, Normalization and Industrial Quality (Inmetro)", 
    "National Institute of Social Security (INSS)         ", 
    "National Institute of Studies and Educational Research Anisio Teixeira (INEP) ", 
    "National Institute of Technology Information (ITI)        ", 
    "National Library Foundation             ", 
    "National Movies Agency (ANCINE)            ", 
    "National School of Public Administration Foundation (ENAP)      ", 
    "National Trust of Education Development (FNDE)         ", 
    "National Water Agency (ANA)             ", 
    "Northeast Development Superintendency (SUDENE)         ", 
    "Oswaldo Cruz Foundation (FIOCRUZ)            ", 
    "Ozorio Foundation                ", 
    "Porto Alegre Clinic Hospital             ", 
    "Private Insurance Superintendency (SUSEP)          ", 
    "Rio de Janeiro Botanical Gardens Research Institute       ", 
    "Rui Barbosa House Foundation             ", 
    "Sao Francisco and Parnaiba Valleys Development Company (CODEVASF)    ", 
    "Telecom National Agency (ANATEL)            " 
    ), class = "factor")), .Names = c("year", "totalex", "agency.type", 
"unit"), row.names = c(NA, 100L), class = "data.frame") 
+0

'facet_grid'具有'labeller'参数,您可以使用它来更改标签 – James 2012-07-12 09:15:56

+0

嗨,詹姆斯。我知道'labeller'的参数,但无法弄清楚它是如何工作的。有关于stackoverflow的一些讨论,例如[这里](http://stackoverflow.com/questions/10151123/how-to-specify-columns-in-facet-grid-or-how-to-change-labels-in -facet-wrap)和[这里](http://stackoverflow.com/questions/3472980/ggplot-how-to-change-facet-labels?rq = 1)但没有直接相关的东西。 – user1519289 2012-07-12 13:36:52

+0

它需要一个2个参数(变量,值)的函数,它将返回一个等于facet数量的向量。默认值是'label_value'。你可以提供一个匿名函数,返回你想要的标签列表并忽略参数。 – James 2012-07-12 13:45:33

回答

-2

如果你给我们一些数据,所以它的重现性好,会有所帮助。如果不太长,你可以在dput(totalex.df)的输出中加上你的问题吗?

你想为每个unit一个方面?或者你想为每个组合unit & agency.type打分?

如果只是unit,试试这个:

facet_wrap(~ unit, ncol=6)

如果它的这两个,试试这个:

facet_grid(agency.type ~ unit, ncol=6)

仅供参考 - 为了更好地了解如何使用facet_wrap和facet_grid函数,请看这里的Hadley文档:

http://had.co.nz/ggplot2/facet_wrap.html

+0

感谢您对Tommy的关注。我想要的是每个单元的一个方面,但是按照agency.type来定义方面。我已经在 – user1519289 2012-07-12 10:44:02

2

与我最初的想法相反,我不认为labeller会帮助你,因为它只适用于facet_grid而不是facet_wrap。相反,我认为这个问题可以以更简单的方式处理。这些构面的顺序由因子水平的顺序控制,因此重新排列unit的级别以使它们按agency.type分组应该足够。

agency.unit <- unique(totalex.df[c("agency.type", "unit")]) 

totalex.df$unit <- factor(totalex.df$unit, 
    levels = agency.unit[order(agency.unit$agency.type, 
          agency.unit$unit), "unit"]) 

然后你的facet_wrap应该不需要agency.type在里面。

facet_wrap(~ unit, ncol=6) 

总数:

ggplot(data=totalex.df, aes(x=year, y=totalex)) + 
    geom_line(aes(colour=factor(agency.type))) + 
    facet_wrap(~ unit, ncol=6) + 
    opts(strip.text.x = theme_text(size=2)) + 
    opts(axis.text.x=theme_text(size=4)) + 
    opts(legend.position="none") + 
    scale_y_sqrt("total expenditure (billions)") 

enter image description here

即使它是不可能在此阅读,第一个单元是 “空军房地产基金资助机构(CFIAE)”,其次是“ Alexandre Gusmao基金会(FUNAG)“,”应用经济研究所(IPEA)“等。

+0

之上添加了'dput(totalex.df)'我认为这不是正确的Brian(或者我在其他地方出错了)。我用线颜色表示不同类型的代理,使用'geom_line(aes(color = factor(agency.type)))''。所以如果我们有我们想要的东西,那么所有相同颜色的线条都会被组合在一起。我认为问题是我们有71个独特的机构,因此有71个因素,但只有7个层次(如果这是有道理的话)。 – user1519289 2012-07-16 12:26:21

+0

顺便提一下,ggplot2帮助文件指出了一种叫做“aes_group_order”的东西。通过帮助文件的阅读使我认为我应该能够做到像'facet_wrap(〜unit,ncol = 6,aes(order = agency.type))'这样就能解决我的问题。但似乎没有。 – user1519289 2012-07-16 12:33:26

+0

具体来说,它给出的错误是'nrow * ncol中的错误:二元运算符的非数值参数'。 – user1519289 2012-07-16 12:48:14