ggplot和R:缺少某些x值时,条形图和条形图宽度出现问题

ggplot和R:缺少某些x值时,条形图和条形图宽度出现问题,r,ggplot2,R,Ggplot2,我有一个特定的数据集,显示了两家公司4年的销售收入 year <- c(2009, 2011, 2012, 2009,2010, 2012) name <- c('A', 'A', 'A', 'B', 'B', 'B') sales <- c(500, 1000, 2000, 1500, 1000, 500) df.t <- data.frame(year, name, sales) 请注意,A公司2010年没有销售编号(该年没有销售),B公司2011年没有销售编号 我

我有一个特定的数据集,显示了两家公司4年的销售收入

year <- c(2009, 2011, 2012, 2009,2010, 2012)
name <- c('A', 'A', 'A', 'B', 'B', 'B')
sales <- c(500, 1000, 2000, 1500, 1000, 500)
df.t <- data.frame(year, name, sales)
请注意,A公司2010年没有销售编号(该年没有销售),B公司2011年没有销售编号

我想创建一个很好的条形图来显示这些数字

ggplot(data=df.t, aes(x=year, y=sales, fill=name)) + geom_bar(stat="identity", position="dodge")
但是,这会创建一个条形图,其中2010年和2011年的条形图宽度与其他年份的条形图宽度不同。

我想有一个柱状图,即使是在没有销售的年份。该条形图的高度为0


如何在不更改数据和添加零的情况下执行此操作?

您可以使用
facet\u grid

库(ggplot2)
年
我想有一个柱状图,即使是在没有销售的年份。该条形图的高度为0。如何在不更改数据和添加零的情况下执行此操作

通常很难生成不存在的
ggplot
plot数据。@Thomas K答案中的
facet
选项起作用,因为默认情况下,
x
y
的比例在每个facet中都是相同的,无论是否存在数据。然而,我认为加零是最好的方法,并不像你想象的那么难。只要加上零
tidyr::complete
使操作非常简单

library(tidyr)
ggplot(complete(df.t, year, name, fill = list(sales = 0)),
       aes(x=year, y=sales, fill=name)) + 
    geom_bar(stat="identity", position="dodge")

注意:这假设您的数据如下:

year <- c(2009, 2011, 2012, 2009,2010, 2012)
name <- c('A', 'A', 'A', 'B', 'B', 'B')
sales <- c(500, 1000, 2000, 1500, 1000, 500)
df.t <- data.frame(year, name, sales)

year如果您解决了这个问题,那么数据帧创建中的名称(
y
n
z
)与向量的名称(
year
name
sales
)匹配,并与绘图中的列名(包括
return
)匹配,那就太好了。谢谢您的评论。我已经修好了。数据框中的名称应与矢量名称匹配nowgeom_bar(stat=“identity”,show.legend=F)无法删除图例。必须使用+辅助线(填充=假)instead@AllYouCanEat86我使用的是dev版本<代码>辅助线(fill=F)
将在下一版本的
ggplot2
中被弃用。要安装dev版本,可以运行
install.packages(“devtools”);devtools::install_github(“hadley/ggplot2”)
year <- c(2009, 2011, 2012, 2009,2010, 2012)
name <- c('A', 'A', 'A', 'B', 'B', 'B')
sales <- c(500, 1000, 2000, 1500, 1000, 500)
df.t <- data.frame(year, name, sales)