ggplot2条形图中的刻度标签

10

我有一个简单的数据框by_day,我想将其绘制出来:

 X weekday         variable value
0       0 Number_of_tweets  5820
1       1 Number_of_tweets  6965
2       2 Number_of_tweets  7415
3       3 Number_of_tweets  6800
4       4 Number_of_tweets  5819
5       5 Number_of_tweets  1753
6       6 Number_of_tweets  1137

我可以毫无问题地理解基本情节。

daily_plot <- ggplot(data=by_day, aes(x=by_day$weekday, y=by_day$value)) + 
  geom_bar(stat = "identity") 

当我尝试修改值标签时,问题就出现了。如果这样做,我会在x轴右侧出现额外的空间:

daily_plot + 
  scale_x_discrete("Day of the Week", breaks = c("0","1","2","3","4","5","6"), labels=c("Mon","Tues","Wed","Th","Fri","Sat","Sun"))

这里输入图片描述

如果我这样做,问题就是条形图和新标签被错位了。

daily_plot + 
  scale_x_discrete("Day of the Week", breaks = c("0","1","2","3","4","5","6"),    labels=c("Mon","Tues","Wed","Th","Fri","Sat","Sun"), limits=c("0","1","2","3","4","5","6")) + 
  theme(axis.title.x = element_text(vjust=-0.5), axis.title.y=element_text(vjust=0.1)) 

图片描述

我花了不少时间阅读ggplot2的文档,以及在StackOverflow上搜索,但都没有找到同样的问题。希望能得到帮助。

1个回答

19

尝试改用连续比例尺(因为您没有使用因子):

by_day <- data.frame(
  X=0:6,
  weekday=0:6,
  variable="Number_of_tweets",
  value=c(5820,6965,7415,6800,5819,1753,1137))

print(by_day)

##   X weekday         variable value
## 1 0       0 Number_of_tweets  5820
## 2 1       1 Number_of_tweets  6965
## 3 2       2 Number_of_tweets  7415
## 4 3       3 Number_of_tweets  6800
## 5 4       4 Number_of_tweets  5819
## 6 5       5 Number_of_tweets  1753
## 7 6       6 Number_of_tweets  1137

daily_plot <- ggplot(data=by_day, aes(x=weekday, y=value))
daily_plot <- daily_plot + geom_bar(stat = "identity") 
daily_plot <- daily_plot + scale_x_continuous(breaks=0:6,
                                              labels=c("Mon","Tue","Wed","Thu","Fri","Sat","Sun"))
print(daily_plot)

(根据评论者的建议,您可以并且应该只使用不带$的列名,我的group=是不必要的[这只是我的习惯)。

另外:

daily_plot <- ggplot(data=by_day, aes(x=factor(weekday), y=value))
daily_plot <- daily_plot + geom_bar(stat = "identity") 
daily_plot <- daily_plot + scale_x_discrete(breaks=0:6,
                                            labels=c("Mon","Tue","Wed","Thu","Fri","Sat","Sun"))
print(daily_plot)

运行正常(对于x使用scale_x_discrete,可以使用factor()


如果你能够 (1) 移除不必要的 group 美学映射,(2) 移除 aes 内部的 $ 使用,并包含一条说明注释,指出这种做法是 绝对不应该 的,以及 (3) 注意到如果在数据框中将 weekday 转换为因子/字符,那么 scale_x_discrete 将可以正常工作,那么我会给你点赞。 - joran
我只是简单地剪切和粘贴了一些原始的ggplot代码,这是我的错。等我一下... :-) 好了。 - hrbrmstr
没关系...我的意思是,我本来可以自己编辑的,但那样的编辑有点粗鲁。 :) - joran
知识转移从不粗鲁。同时,我也更新了factor()函数后的示例。谢谢。 - hrbrmstr
谢谢,hrbmastr和joran!我已经解决了我的问题,并学到了一些东西——非常感谢。 - Gregory Saxton
#棒极了!不幸的是,我们正在进行所有这些ggplot操作,而它正处于维护模式,并且所有新的开发都正在过渡到ggvis。值得庆幸的是,许多相同的原则和实践将很容易地过渡到ggvis中。 - hrbrmstr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接