R 简化绘制条形图并使条形图具有相同的宽度
以下是我的玩具示例:R 简化绘制条形图并使条形图具有相同的宽度,r,ggplot2,R,Ggplot2,以下是我的玩具示例: yvalue = c(.1, .2, .3, .2, .1, .2, .3, .1) df = data.frame(yvalue) df$name = c("a", "b", "c", "d", "e", "f", "g", "h") df$type = c("apple", "apple", "apple", "apple", "apple", "banana", "banana", "banana") ggplot(data = df) + geom_bar(aes(
yvalue = c(.1, .2, .3, .2, .1, .2, .3, .1)
df = data.frame(yvalue)
df$name = c("a", "b", "c", "d", "e", "f", "g", "h")
df$type = c("apple", "apple", "apple", "apple", "apple", "banana", "banana", "banana")
ggplot(data = df) + geom_bar(aes(y = yvalue, x=type, fill=name), stat = "identity", position = position_dodge())
以下是结果图表:
这种安排基本上就是我想要的,但我想在这里做三件我不知道该怎么做的事情:
yvalue = c(.1, .2, .3, .2, .1, .2, .3, .1)
df = data.frame(yvalue)
df$name = c("a", "b", "c", "d", "e", "f", "g", "h")
df$type = c("apple", "apple", "apple", "apple", "apple", "banana", "banana", "banana")
fulldat <- rbind(df, cbind(yvalue=NA,expand.grid(name=df$name,type=df$type)))
ggplot(data = fulldat) + geom_bar(aes(y = yvalue, x=type, fill=name),width=0.5,stat = "identity",position=position_dodge(0.9)) +
guides(fill=FALSE) + scale_fill_manual(values = rep("red",8))
yvalue=c(.1、.2、.3、.2、.1、.2、.3、.1)
df=数据帧(yvalue)
df$name=c(“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”)
df$type=c(“苹果”、“苹果”、“苹果”、“苹果”、“苹果”、“香蕉”、“香蕉”)
fulldat从定义中删除fill
时,您可以同时删除颜色和图例
您可以使用以下代码:我使用facets
在图片中保留“type”
ggplot(data = df) +
geom_bar(aes(y = yvalue, x=name), stat = "identity", position = position_dodge()) +
facet_wrap(~type) +
theme_classic()
请告诉我这是否是您想要的。这在颜色和图例方面都很好,但条的宽度不同:香蕉条比苹果条宽。还有一种方法可以在条形图之间添加一个小的分隔或边框吗?固定几何条形图的宽度是相当棘手的,它将根据每个因素级别内的特征数量来选择宽度。这(创建fulldat
)是一个黑客解决方案,因为您可以更改宽度/位置\u减淡宽度,以增加横杆之间的空间。我将此标记为答案,因为它是有效的,但我最终只是制作了两个不同的条形图,并将它们放在一个图像编辑器中,因为正如你所说的,这是相当粗糙的。这似乎是ggplot不打算做的事情之一。顺便问一下,你能给我解释一件事吗:为什么ggplot要求“fill=name”在那里,然后要求“scale\u fill\u manual()”使所有颜色都相同?当我在我的原始代码中简单地去掉“fill=name”时,我只得到两个巨大的条形图。您需要fill=name
来创建name变量的附加层,该层为名称添加不同的条形图。如果不添加它,则会得到两个blob,这两个blob只是每个类型的y值的总和。如果您添加'fill=name',但不添加scale\u fill\u manual
,您将获得一个可变颜色显示,如示例所示,但将其全部设置为红色,您将获得单一颜色(它需要与df行的nr相同的数量。我同意这是一个解决方法,显然没有办法在因子水平上固定宽度,这很麻烦!你到底想要实现什么?你想用你的图回答什么问题?我认为理解你想对你说什么会更有帮助。)你的图不仅仅是一段代码…@fasttouch:我想要一个条形图,可以直观地将两组或更多的数据分开(这里用苹果和香蕉表示),不是按颜色而是按位置,即使分组的值不相同,条的宽度也相同。这很有趣,但我不希望名称下的空格不重叠。