有没有办法geom_bar()在下面的时间序列示例中丢失数据的情况下设置恒定宽度?我试过设置width在aes()没有运气.在代码示例下方的图中比较5月'11至6月'11的条形宽度.
colours <- c("#FF0000", "#33CC33", "#CCCCCC", "#FFA500", "#000000" )
iris$Month <- rep(seq(from=as.Date("2011-01-01"), to=as.Date("2011-10-01"), by="month"), 15)
colours <- c("#FF0000", "#33CC33", "#CCCCCC", "#FFA500", "#000000" )
iris$Month <- rep(seq(from=as.Date("2011-01-01"), to=as.Date("2011-10-01"), by="month"), 15)
d<-aggregate(iris$Sepal.Length, by=list(iris$Month, iris$Species), sum)
d$quota<-seq(from=2000, to=60000, by=2000)
colnames(d) <- c("Month", "Species", "Sepal.Width", "Quota")
d$Sepal.Width<-d$Sepal.Width * 1000
g1 <- ggplot(data=d, aes(x=Month, y=Quota, color="Quota")) + geom_line(size=1)
g1 + geom_bar(data=d[c(-1:-5),], aes(x=Month, y=Sepal.Width, width=10, group=Species, fill=Species), stat="identity", position="dodge") + scale_fill_manual(values=colours)
Run Code Online (Sandbox Code Playgroud)

我正在尝试在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)