相关疑难解决方法(0)

如何在没有数据的类别上强制执行ggplot的position_dodge?

我正在尝试在ggplot上使用position_dodge来获取共享相同类别(cat)的两个不同信号(ind)的箱线图.当存在具有一个信号的数据但不存在另一个信号的数据的类别时,具有数据的信号的箱图表覆盖所有水平间距,并且不尊重该特定类别的position_dodge指令.有没有办法让ggplot强制执行躲避规则?正如您在下面的示例中所看到的,信号x没有类别B的数据,因此它会丢失position_dodge保留的空间.我想避免这种情况.

提前致谢.

data<-data.frame(cat=c('A','A','A','A','B','B','A','A','A','A','B','B'), 
                 values=c(3,2,1,4,NA,NA,4,5,6,7,8,9), 
                 ind=c('x','x','x','x','x','x','y','y','y','y','y','y'))

print(ggplot() +
        scale_colour_hue(guide='none') +
      geom_boxplot(
           aes(x=as.factor(cat), y=values, 
               fill=ind), 
           position=position_dodge(width=.60), 
           data=data,
           outlier.size = 1.2,
           na.rm=T))
Run Code Online (Sandbox Code Playgroud)

原始问题的图形

进展更新

经过一些解决方法,我想出了我正在寻找的结果......(有点)

data            <- data.frame(
cat=c('A','A','A','A','B','B','A','A','A','A','B','B','B'), 
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9, 0), 
ind=c('x','x','x','x','x','x','y','y','y','y','y','y','x'))

p  <- ggplot() +
      scale_colour_hue(guide='none') +
      geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
      position=position_dodge(width=.60), 
      data=data,
      outlier.size = 1.2,
      na.rm=T) +
      geom_line(aes(x=x, y=y), 
                data=data.frame(x=c(0,3),y=rep(0,2)), 
                size = 1, 
                col='white')
print(p)
Run Code Online (Sandbox Code Playgroud)

解决方法与解决方法

有些人使用刻面来重新设想我想要的效果.Faceting并没有给我正在寻找的效果.我正在寻找的最终图表如下所示:

最终图表

如果您注意到,y = 10处的白色主刻度标记比其他刻度标记厚.这条较粗的线是大小= 1的geom_line,它隐藏了不需要的箱形图.

我希望我们能够更无缝地组合不同的geom对象.我把这报告为Hadley的github上的一个bug,但是Hadley说这就是position_dodge的设计行为.我想我正在以非标准的方式使用ggplot2,而解决方法是解决这些问题的方法.无论如何,我希望这有助于一些R人员进一步推动ggplot的功能.

r ggplot2

19
推荐指数
1
解决办法
7746
查看次数

在geom_boxplot中包含填充美学中使用的缺失因子级别的空间

我想在R画一个盒子和胡须图.我的代码如下.目前,由于我只在两个站点中的一个站点中有两个月的数据,因此该站点的栏数较宽(因为月份的第三个级别被删除).

相反,我想为站点提供A与站点相同的盒子模式B(即在右侧有空盒子的空间).drop=TRUE当我只有一个因素但似乎无法用"填充"因素做这件事时,我可以很容易地做到这一点.

Month=rep(c(rep(c("Jan","Feb"),2),"Mar"),10)
Site=rep(c(rep(c("A","B"),each=2),"B"),10)
factor(Month)
factor(Site)
set.seed(1114)
Height=rnorm(50)
Data=data.frame(Month,Site,Height)
plot = ggplot(Data, aes(Site, Height)) +
       geom_boxplot(aes(fill=Month, drop=TRUE), na.rm=FALSE)
plot
Run Code Online (Sandbox Code Playgroud)

r ggplot2 boxplot

17
推荐指数
2
解决办法
5809
查看次数

geom_bar中的条形宽度相同(position ="dodge")

我想绘制具有相同宽度的条形图.这是我的最小示例代码:

data <- data.frame(A = letters[1:17],
                   B = sample(1:500, 17),
                   C = c(rep(1, 5), rep(2, 6), rep(c(3,4,5), each = 2)))

ggplot(data,
       aes(x = C,  y = B, label = A,
           fill = A)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(position = position_dodge(width = 0.9), angle = 90)
Run Code Online (Sandbox Code Playgroud)

结果如上图所示: 在此输入图像描述

条的宽度取决于变量中给出的组中的观察数C.我想让每个酒吧都有相同的宽度.

facet_grid(~C)作品(条宽度相同)这不是我的意思:

ggplot(data,
       aes(x = C,  y = B, label = A,
           fill = A)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(position = position_dodge(width …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

更改ggplot上的geom_bar宽度

我正在制作一个条形图,显示返回嵌套的不同类型的猎物的百分比。

我的数据如下:

Prey <- c(rep("Bird", 12), rep("Lizard", 3), rep("Invertebrate", 406))  
Type <- c(rep("Unknown bird", 12), rep("Skink", 2), rep("Gecko", 1), 
          rep("Unknown Invertebrate", 170), rep("Beetle", 1), 
          rep("Caterpillar", 3), rep("Grasshopper", 3), rep("Huhu grub", 1),  
          rep("Moth", 34), rep("Praying mantis", 1), rep("Weta", 193))  
Preydata <- data.frame(Prey,Type)  

ggplot(Preydata, aes(x = Prey, y = (..count..)/sum(..count..))) +
                  scale_y_continuous(labels = percent_format()) + 
                  geom_bar(aes(fill = Type), position = "dodge")
Run Code Online (Sandbox Code Playgroud)

我的图形如下图所示。

在此处输入图片说明

我希望所有“类型”栏的宽度都相同,但是当我更改其下的宽度时geom_bar,只会更改“猎物”栏的宽度。当我尝试使用以下内容时:

ggplot(Preydata, aes(x = as.numeric(interaction(Prey, Type)), 
    y = (..count..)/sum(..count..))) + 
    scale_y_continuous(labels = percent_format()) + 
    geom_bar(aes(fill = Type), position …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

如果按组缺少数据,则方框图的宽度是否一致?

我有一个类似的问题,以前针对条形图讨论,但缺少框形图的解决方案:如果缺少数据,则geom_bar的宽度一致

我想按小组制作箱形图。但是,某些组的数据可能会丢失,从而导致具有丢失组的箱线图的宽度增加

我尝试指定geom_boxplot(width = value)或geom_boxplot(varwidth = F),但这不起作用。

另外,如Barplots示例所建议,我尝试NA为缺少的数据组添加值。Boxplot仅跳过缺少的数据,并扩展boxplot的宽度。我得到了警告:

Warning messages:
1: Removed 1 rows containing non-finite values (stat_boxplot). 
Run Code Online (Sandbox Code Playgroud)

虚拟示例:

# library
library(ggplot2)

# create a data frame
variety=rep(LETTERS[1:7], each=40)
treatment=rep(c("high","low"),each=20)
note=seq(1:280)+sample(1:150, 280, replace=T)

# put data together
data=data.frame(variety, treatment ,  note)

ggplot(data, aes(x=variety, y=note, fill=treatment)) + 
  geom_boxplot()
Run Code Online (Sandbox Code Playgroud)

如果每个组都有值,则箱线图具有相同的宽度:

箱线图具有相同的宽度,每个组都有值

删除1组的值:

# subset the data to have a missing data for group: …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 boxplot

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

在count = 0的情况下,如何使用geom_bar()去除ggplot2图的较宽条

这是我的data.frame():

df <- data.frame(Round = rep(c("A", "B", "C" ),150), Group = rep(c("UP", "DOWN"),75),Task = rep(c("T1", "T2", "T3", "T4", "T5"),30), V2 = sample(c(0,1,2), 50, replace = T), V1 = sample(c(0,1,2), 50, replace = T))
dfmelt <- melt(df)
Run Code Online (Sandbox Code Playgroud)

我想尝试这样的情节facet_grid:

b <- ggplot(data=dfmelt, aes(x=value, fill=variable))
b <- b + geom_bar(stat="count", position = "dodge", width = 0.9)
b <- b + facet_grid(Group ~ Task, scales = "free")
Run Code Online (Sandbox Code Playgroud)

,产生以下内容:

在此输入图像描述

我想摆脱更广泛的列,例如V1 at the position 0 of T1-UP,V1 at the …

r ggplot2 geom-bar

3
推荐指数
1
解决办法
424
查看次数

标签 统计

ggplot2 ×6

r ×6

boxplot ×2

geom-bar ×1