我正在尝试在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画一个盒子和胡须图.我的代码如下.目前,由于我只在两个站点中的一个站点中有两个月的数据,因此该站点的栏数较宽(因为月份的第三个级别被删除).
相反,我想为站点提供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) 我想绘制具有相同宽度的条形图.这是我的最小示例代码:
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) 我正在制作一个条形图,显示返回嵌套的不同类型的猎物的百分比。
我的数据如下:
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) 我有一个类似的问题,以前针对条形图讨论过,但缺少框形图的解决方案:如果缺少数据,则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) 这是我的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 …