标签: facet-grid

geom_smooth 与 facet_grid 和不同的拟合函数

首先,为这个例子道歉,但我找不到更好的数据集来证明这个问题。希望,这就足够了。假设我正在尝试从mtcars绘制 mpg 与位移的数据集中制作一个传动方面的网格(自动与手动)和齿轮数,如下所示:

# Load library
library(ggplot2)

# Load data
data(mtcars)

# Plot data
p <- ggplot(mtcars,aes(x = disp, y = mpg)) + geom_point() + facet_grid(gear ~ am)
p <- p + geom_smooth()
print(p)
Run Code Online (Sandbox Code Playgroud)

这使,

在此处输入图片说明

注意,我添加了一条趋势线geom_smooth,它默认使用黄土曲线。我可以拟合用户定义的函数而不是nls用于该方法的黄土曲线 ,然后陈述一个公式,这很棒。但是是否可以为每个方面拟合不同的用户指定曲线?例如,左上角的线性回归和右下角的衰减指数。这可能吗?还是我用锤子打螺丝?

编辑此处给出了自定义(即用户定义)拟合函数的解决方案。

r ggplot2 facet-grid

6
推荐指数
1
解决办法
3010
查看次数

编辑刻面/条带与绘图之间的距离

例如,

library(ggplot2)
ggplot(mpg, aes(displ, cty)) + geom_point() + facet_grid(cols = vars(drv))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 如何更改条带和主图之间的距离?(例如,在条带和主图之间创建一个间隙。)
但我不需要更改条带大小(与此编辑条带大小 ggplot2 不同)。

r ggplot2 facet-wrap facet-grid

6
推荐指数
1
解决办法
703
查看次数

在ggplot2中一起使用facet标签和strip标签

我想使用ggplot2's创建一个图形facet_grid,如下所示:

# Load ggplot2 library for plotting
library(ggplot2)

# Plot dummy data
p <- ggplot(mtcars, aes(mpg, wt)) 
p <- p + geom_point() 
p <- p + facet_grid(gear ~ cyl)
print(p)
Run Code Online (Sandbox Code Playgroud)

这很好,但由于它出现在期刊文章中,因此每个面板也需要标有 a、b、c 等。该包egg有一个很好的函数调用tag_facet,其用法如下:

# Load egg library for tagging
library(egg)
#> Warning: package 'egg' was built under R version 3.5.3
#> Loading required package: gridExtra

# Same plot but with tags for each facet
p <- ggplot(mtcars, aes(mpg, wt)) 
p <- p …
Run Code Online (Sandbox Code Playgroud)

r facet ggplot2 facet-grid

6
推荐指数
3
解决办法
1426
查看次数

R ggplot2 facet_grid具有3个或更多变量的"分层"格式

当我在我的一个维度上有多个变量时,我试图获得一个很好的显示,这样我facet_grid就不会重复每个列(或行)的所有变量的名称,而是在子框上有一个合并的框.使用R中的默认数据集(基于R Cookbook)的具体示例:

library(reshape2)
sp <- ggplot(tips, aes(x=total_bill, y=tip/total_bill)) +
      geom_point(shape=1) +
      facet_grid(smoker ~ sex+day)
sp
Run Code Online (Sandbox Code Playgroud)

这将返回类似于此图的顶部部分,其中Female/Male在每列的顶部重复.是否有一种方法(在R中)合并所有性别块以获得类似我上传的图的底部部分?(我和Gimp做了这个,不用说它不是一个理想的选择)

我查阅了文档,facet_grid感觉解决方案就是创建一个新的贴标机功能,但我对R来说太新了,无法继续使用它.我已经搜索了一下,看看是否有人已经解决了这个问题,但似乎没有找到任何答案.

有没有人知道已经为此目的创建的自定义贴标机功能,或者是否有人知道如何创建这样的自定义贴标机功能?那真是太神奇了.

r ggplot2 facet-grid

5
推荐指数
0
解决办法
860
查看次数

ggplot2:为条形图的分面布局中的行指定不同的比例

我的数据在包中ggplot2通过具有多个(~10)个面的条形图进行可视化。我想首先将这些方面分成几行。我可以使用函数facet_grid()facet_wrap()来实现此目的。在此处的最小示例数据中,我在两行 (4x2) 中构建了 8 个面。但是,我需要调整不同方面的比例,即:第一行包含小比例的数据,第二行的值更大。因此,我需要对第一行中的所有数据使用相同的比例,以便沿行比较它们,并为第二行使用另一个比例。

这是最小的示例和可能的解决方案。

#loading necessary libraries and example data
library(dplyr)
library(tidyr)
library(ggplot2)

trial.facets<-read.csv(text="period,xx,yy
A,2,3
B,1.5,2.5
C,3.2,0.5
D,2.5,1.5
E,11,13
F,16,14
G,8,5
H,5,4")

#arranging data to long format with omission of the "period" variable
trial.facets.tidied<-trial.facets %>% gather(key=newvar,value=newvalue,-period)
Run Code Online (Sandbox Code Playgroud)

现在正在策划自己:

#First variant
ggplot(trial.facets.tidied,aes(x=newvar,y=newvalue,position="dodge"))+geom_bar(stat ="identity") +facet_grid(.~period)

#Second variant:
ggplot(trial.facets.tidied,aes(x=newvar,y=newvalue,position="dodge"))+geom_bar(stat ="identity") +facet_wrap(~period,nrow=2,scales="free")
Run Code Online (Sandbox Code Playgroud)

第一个和第二个变体的结果如下:

在此输入图像描述

在这两个示例中,我们要么对所有图形使用自由比例,要么对所有图形使用固定比例。同时,第一行(前 4 个面)需要稍微缩放到 5,第二行需要缩放到 15。

作为使用facet_grid()函数的解决方案,我可以添加一个假变量“row”,它指定相应的字母应该属于哪一行。新数据集 Trial.facets.row(仅显示三行)如下所示:

period,xx,yy,row
C,3.2,0.5,1
D,2.5,1.5,1
E,11,13,2
Run Code Online (Sandbox Code Playgroud)

然后我可以将相同的重新排列为长格式,省略变量“句​​点”和“行”:

trial.facets.tidied.2<-trial.facets.row %>% gather(key=newvar,value=newvalue,-period,-row)
Run Code Online (Sandbox Code Playgroud)

然后,我沿着变量“行”和“周期”排列面,希望使用该选项scales="free_y"仅跨行调整比例:

ggplot(trial.facets.tidied.2,aes(x=newvar,y=newvalue,position="dodge"))+geom_bar(stat ="identity") +facet_grid(row~period,scales="free_y")
Run Code Online (Sandbox Code Playgroud)

并且 …

r facet ggplot2 facet-wrap facet-grid

5
推荐指数
1
解决办法
7455
查看次数

ggplot2 使用 ...prop... 并按另一个类别对条形图进行分组时出现问题

StudentData <- data.frame(gender = sample( c("male","female"), 100, replace=TRUE),
              degree = sample( c("Associates", "Masters", "PhD"), 100, replace=TRUE),
              category = sample( c("Audit", "Credit"), 100, replace=TRUE))
Run Code Online (Sandbox Code Playgroud)

在下面的数据集中,我尝试创建一个条形图,绘制具有副学士学位、硕士学位或博士学位的样本的百分比,按性别分隔(通过使用 facet_grid() 完成)。这是我到目前为止生成的:

StudentData %>% ggplot(., aes(x=degree, group=gender)) + 
            geom_bar(aes(y=..prop..), stat="count", position=position_dodge()) +
            geom_text(aes(label=scales::percent(round(..prop..,2)), 
            y=..prop..), stat="count", vjust=-.5) +
            scale_y_continuous(limits=c(0,1),labels = scales::percent) +
            ylab("Percent of Sample") +
            facet_grid(~gender)
Run Code Online (Sandbox Code Playgroud)

但是,我还想将每个图表上的“审计”和“信用”组之间的差异显示为并排条形。然而,当我将“fill=category”添加到 ggplot 的美学中时,没有任何变化:

StudentData %>% ggplot(., aes(x=degree, group=gender, fill=category)) + 
            geom_bar(aes(y=..prop..), stat="count", position=position_dodge()) +
            geom_text(aes(label=scales::percent(round(..prop..,2)), 
            y=..prop..), stat="count", vjust=-.5) +
            scale_y_continuous(limits=c(0,1),labels = scales::percent) +
            ylab("Percent of Sample") +
            facet_grid(~gender)
Run Code Online (Sandbox Code Playgroud)

我意识到这通常是使用完成的geom_bar(stat="identity", …

r ggplot2 geom-bar facet-grid

5
推荐指数
1
解决办法
1万
查看次数

在函数 -ggplot 中将参数传递给构面网格

我正在尝试编写一个函数来在网格中绘制图形。我正在使用 ggplot 和构面网格。我无法传递有关方面网格的论点。我想知道是否有人能指出我正确的方向。

数据示例:

 Year = as.factor(rep(c("01", "02"), each = 4, times = 1))
 Group = as.factor(rep(c("G1", "G2"), each = 2, times = 2))
 Gender = as.factor(rep(c("Male", "Female"),   times = 4))
 Percentage = as.integer(c("80","20","50","50","45","55","15","85"))
 df1 = data.frame (Year, Group, Gender, Percentage)
Run Code Online (Sandbox Code Playgroud)

不带函数的网格图的代码是:

p = ggplot(data=df1, aes(x=Year, y=Percentage, fill = Gender)) + geom_bar(stat = "identity")
p = p +  facet_grid(~ Group, scales = 'free')  
p
Run Code Online (Sandbox Code Playgroud)

这会产生像我想做的那样的情节。但是,当我将其放入函数中时:

MyGridPlot <- function (df, x_axis, y_axis, bar_fill, fgrid){
p = ggplot(data=df1, aes(x=x_axis, y=y_axis, fill = …
Run Code Online (Sandbox Code Playgroud)

r function facet ggplot2 facet-grid

5
推荐指数
1
解决办法
1488
查看次数

去掉 facet_grid 第一行的空面板

facet_grid例如,我试图用来布置面板,

library(tidyverse)
library(lubridate)
economics %>%
  filter(date >= ymd(19680101)) %>% 
  mutate(
    year = year(date),
    month = month(date),
    decade = floor(year/10) * 10,
    single = year - decade,
    decade = paste0(decade, "s")
  ) %>% 
  ggplot(aes(month, uempmed)) +
  geom_point() +
  facet_grid(decade ~ single)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我的问题是,我怎样才能乘坐前 7 个面板(和最后 4 个),让它们完全空白

r ggplot2 facet-grid

5
推荐指数
1
解决办法
254
查看次数

如何在 R 中为 ggplot 的每个方面添加 R2?

有没有办法来改变首先从属性标签1:3喜欢的东西c(good, bad, ugly)。另外,我想R2为每个方面增加价值。下面是我的代码 - 我尝试了一些东西但没有成功。

DF = data.frame(SUB = rep(1:3, each = 100), Ob = runif(300, 50,100), S1 = runif(300, 75,95), S2 = runif(300, 40,90),
                S3 = runif(300, 35,80),S4 = runif(300, 55,100))
FakeData = gather(DF, key = "Variable", value = "Value", -c(SUB,Ob))

ggplot(FakeData, aes(x = Ob, y = Value))+
  geom_point()+ geom_smooth(method="lm") + facet_grid(Variable ~ SUB,  scales = "free_y")+
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

这是我使用上述代码得到的图。 在此处输入图片说明 我尝试了下面的代码来更改 facet_label 但它没有用

ggplot(FakeData, SUB = factor(SUB, levels = c("Good", "Bad","Ugly")), aes(x = Ob, …
Run Code Online (Sandbox Code Playgroud)

r scatter-plot linear-regression ggplot2 facet-grid

5
推荐指数
2
解决办法
1388
查看次数

绘制垂直堆叠的图形时,如何将facet_grid中的条带放置在图的顶部 - 类似于facet_wrap中的position.strip =“top”?

使用facet_grid(),在绘制垂直堆叠在单列中的图时,如何将组名称(即灰色条带)放置在图的顶部?

根据我的尝试,当使用 垂直堆叠图时facet_grid(),您不能将条带放在图表的顶部或底部;您只能使用参数将条带放置在图的右侧或左侧switch = c("y", "x", "both")

我知道facet_wrap()(并且facet_col()来自 ggforce)可以使用参数将条带放置在任何位置strip.position = c("top", "bottom", "left", "right"),无论图形如何绘制:垂直或水平。我曾经facet_wrap()生成过下面的图 1(代码位于可复制代码部分)。

但是,我希望能够facet_grid()不使用facet_wrap来生成下面的图(条带位于“顶部”)。

图 1:我希望能够使用facet_grid()

图。1

理想情况下,如果可以扩展 switch 参数或者strip.position可以将参数添加到facet_grid(),以便能够将条带放在顶部,那就太好了。我尝试自己尝试更改源代码和facet_grid()函数facet_wrap(),但无法弄清楚。

我不简单地使用facet_wrap()函数的原因是因为不幸的是它没有我的应用程序中space="free"可用facet_grid()且必不可少的参数。

下面是一个可重现的示例,稍作修改后,布兰登·贝特尔森 (Brandon Bertelsen) 的答案的代码就在这里

可重现的代码:

数据:

dat <- data.frame(value=runif(30)*10,
                  grouping=c(rep("Group 1",10),
                             rep("Group 2",10),
                             rep("Group 3",10)),
                  letters=rep(LETTERS[1:10], 3)
Run Code Online (Sandbox Code Playgroud)

用于facet_wrap在垂直绘制图形时将条带置于顶部:

ggplot(dat, aes(letters,value, label = letters)) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 facet-wrap facet-grid

5
推荐指数
1
解决办法
2804
查看次数