Tag: ggplot2

如何使用grid.arrange来安排任意数量的ggplots?

这是交叉发布在ggplot2谷歌组 我的情况是,我正在处理一个输出任意数量的图的函数 (取决于用户提供的input数据)。 函数返回一个n个地块的列表,我想把这些地块放在2 x 2的地层中。 我正在同时遇到以下问题: 我怎样才能让灵活性交给任意数量的地块呢? 我怎样才能指定我想要他们摆放2 x 2 我目前的策略使用gridExtra包中的gridExtra 。 这可能不是最佳的,特别是因为,这是关键, 它完全不起作用 。 这是我评论的示例代码,试验了三个图: library(ggplot2) library(gridExtra) x <- qplot(mpg, disp, data = mtcars) y <- qplot(hp, wt, data = mtcars) z <- qplot(qsec, wt, data = mtcars) # A normal, plain-jane call to grid.arrange is fine for displaying all my plots grid.arrange(x, […]

反向堆积的酒吧顺序

我正在用ggplot创build一个堆积条形图,如下所示: plot_df <- df[!is.na(df$levels), ] ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill") 这给了我这样的东西: 我如何反转堆叠的酒吧本身的顺序,使1级在底部,5级在每个酒吧的顶部? 我已经看到了这方面的一些问题(例如, 如何控制使用ggplot2上的标识的堆叠条形图的sorting ),而常见的解决scheme似乎是按照该级别对数据框进行重新sorting,因为ggplot正在使用确定顺序 所以我尝试使用dplyr重新sorting: plot_df <- df[!is.na(df$levels), ] %>% arrange(desc(levels)) 不过,情节也是一样的。 无论我按升序还是降序排列,似乎都没有什么差别 这是一个可重现的例子: group <- c(1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4) levels <- c("1","1","1","1","2","2","2","2","3","3","3","3","4","4","4","4","5","5","5","5","1","1","1","1") plot_df <- data.frame(group, levels) ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")

你如何订购ggplot2 geom_bar中的填充颜色

我正在调用ggplot函数 ggplot(data,aes(x,y,fill=category)+geom_bar(stat="identity") 其结果是一个带有与各种颜色相对应的各种颜色的酒吧的条形图。 然而,从酒吧到酒吧的颜色sorting并不一致。 说有粉红色,绿色和蓝色。 一些酒吧从底部到顶部变成粉红色,绿色,蓝色,一些变成绿色,粉红色,蓝色。 我没有看到任何明显的模式。 这些订单是如何select的? 我怎样才能改变它? 至less,我怎样才能让ggplotselect一致的顺序? (x,y和类别)的类别分别是(整数,数字和因子)。 如果我把类别作为一个有序因子,它不会改变这种行为。 有谁知道如何解决这个问题? 可重复的例子: dput(data) structure(list(mon = c(9L, 10L, 11L, 10L, 8L, 7L, 7L, 11L, 9L, 10L, 12L, 11L, 7L, 12L, 8L, 12L, 9L, 7L, 9L, 10L, 10L, 8L, 12L, 7L, 11L, 10L, 8L, 7L, 11L, 12L, 12L, 9L, 9L, 7L, 7L, 12L, 12L, 9L, […]

在R中使用ggplot2,我如何在不同区域使graphics的背景变成不同的颜色?

我使用ggplot2软件包在R中制作一个简单的条形图。 我不想将灰色的默认值分成五个区域,每个区域都是不同的(但是同样是低调的)颜色。 我如何做到这一点? 更具体地说,我想要五个颜色区域从0-25,25-45,45-65,65-85和85-100运行,其中颜色代表劣于青铜,青铜,银,金和铂分别。 一个配色scheme的build议也非常欢迎。 感谢您的帮助。

R + ggplot:绘制多个页面

我试图写一个函数,绘制一个ggplot facet_wrap图在多个页面。 这只是一个黑客,因为这个function似乎是在ggplot2function待办事项列表。 我做了一些小的计算,以find我需要的页数,我的data.frame的行数, data.frame需要我等。我非常有信心,这一切工作。 pdf(filename) for (i in seq(num_pages)){ slice = seq(((i-1)*num_rows)+1,(i*num_rows)) slice = slice[!(slice > nrow(df.merged))] df.segment=df.merged[slice,] p <- ggplot(df.segment, aes(y=mean,x=phenotype)) p <- p + geom_bar(stat="identity",fill="white",colour="black") p + facet_wrap("ID",scales="free_y",ncol=n_facets,nrow=n_facets) } dev.off() 我的问题是,通过在pdf()和dev.off()函数之间将它们全部封装在for循环中,for循环似乎并不等待ggplot完成它的工作,非常快速地通过其循环并输出无效的PDF。 如果我设置i = 1 ,启动pdf() ,在for循环中运行上面的代码,然后设置i=2 ,然后运行代码,等等,直到我感到无聊( i=3 ),然后closures设备由此产生的PDF是辉煌的。 有没有一种方法,我可以让循环等待最后一行完成绘图,然后再进入下一个迭代?

ggmap错误:GeomRasterAnn是用不兼容的ggproto版本构build的

我正在使用ggmap,并得到下面的错误: Error: GeomRasterAnn was built with an incompatible version of ggproto. Please reinstall the package that provides this extension. 我已经安装了ggmap(2.6.1)和ggplot2(2.2.0)的最新版本,但仍然有同样的错误。

在一张图中绘制多条线

尝试使用ggplot将多行图表绘制成一个图表,但不知道如何使用我的数据集。 不确定是否需要更改数据结构(转置?) 数据看起来像这样: Company 2011 2013 Company1 300 350 Company2 320 430 Company3 310 420 我也试过换位: Year Company1 Company2 Company3 2011 300 320 310 2013 350 430 420 为此,我可以绘制一个值的使用; ggplot(data=df, aes(x=Year, y=Company1)) + geom_line(colour="red") + geom_point(colour="red", size=4, shape=21, fill="white") 但是我不知道如何组合所有的公司,因为我再也没有一个对象“公司”了。 有什么build议么?

如何在ggplot中独立定位两个图例

标题很好涵盖它。 我有两个关于尺寸和颜色的传说,希望在图的上面和上面有一个。 这是可能的,如果是的话,如何 TIA

如何通过一个因子子集数据框并为每个子集重复一个绘图?

我是R新手。如果这个问题有明显的答案,请原谅我,但是我一直没能find解决办法。 我有SAS的经验,可能只是以错误的方式思考这个问题。 我有一个来自数百个科目的重复测量的数据集,每个科目都有不同年龄的多个测量值。 每个主题由一个IDvariables标识。 我想每个单独的主题(ID)绘制每个测量(让我们说身体重量)由年龄。 我用ggplot2做这样的事情: ggplot(data = dataset, aes(x = AGE, y = WEIGHT )) + geom_line() + facet_wrap(~ID) 这适用于less量的主题,但不适用于整个数据集。 我也尝试过这样的事情: ggplot(data=data, aes(x = AGE,y = BW, group = ID, colour = ID)) + geom_line() 这也适用于less数科目,但数百个科目无法阅读。 我试图使用这样的代码子集: temp <- split(dataset,dataset$ID) 但我不确定如何使用最终的数据集。 或者也许有一种方法可以简单地调整facet_wrap,以便创build单个图块? 谢谢!

在绘制世界地图时使用与主要子午线不同的中心

我将maps包中的世界地图覆盖到ggplot2栅格几何上。 然而,这个栅格并不是以主子午线(0度)为中心,而是在180度(大致白令海和太平洋)。 以下代码获取地图并重新映射180度地图: require(maps) world_map = data.frame(map(plot=FALSE)[c("x","y")]) names(world_map) = c("lon","lat") world_map = within(world_map, { lon = ifelse(lon < 0, lon + 360, lon) }) ggplot(aes(x = lon, y = lat), data = world_map) + geom_path() 产生以下输出: 非常明显,在主子午线的一端或另一端的多边形之间画线。 我目前的解决方法是用NA代替接近主子午线的点,用下面的withinreplace上面的内容: world_map = within(world_map, { lon = ifelse(lon < 0, lon + 360, lon) lon = ifelse((lon < […]