我正在尝试使用R中的ggplot绘制图形。这是我的代码:
library(reshape2)
library(ggplot2)
dfw <- read.table(header=T, text='
Length L1 L2
200:399 27665 28483
400:599 9232 11856
600:799 3347 4072
800:999 1923 2112
1000:1199 1322 1511
1200:1399 955 1118
1400:1599 693 850
1600:1799 496 640
1800:1999 332 463
2000:2199 219 306
2200:2399 142 212
2400:2599 73 134
2600:2799 65 121
2800:2999 39 87
3000:3199 19 57
3200:3399 20 31
3400:3599 14 37
3600:3799 4 22
3800:3999 2 17
4000:9599 8 53
')
data.long <- melt(data = dfw, id.var = "Length",
measure.vars = c("L1", "L2"), variable.name = "Condition")
ggplot(data=data.long, aes(x=Length, y=value, fill=Condition)) +
geom_bar(stat="identity", position=position_dodge(width = 1),
colour="black", na.rm = TRUE, width = 0.5) +
scale_x_discrete(limits = data.long$Length) +
theme(axis.title.x = element_text(face="bold", colour="#990000", size=20),
axis.text.x = element_text(angle=90, vjust=2, size=16))
我的问题是无论我尝试什么,我无法摆脱绘图区域的额外空间。任何建议将不胜感激。
答案 0 :(得分:2)
代码中的主要问题是变量Length
中的级别顺序错误。
您可以使用函数factor()
和参数levels=dfw$Length
来修复它(因为您的原始数据框具有正确的顺序)。
data.long$Length<-factor(data.long$Length,levels=dfw$Length)
现在您无需使用scale_x_discrete()
来设置限制。
ggplot(data=data.long, aes(x=Length, y=value, fill=Condition)) +
geom_bar(stat="identity", position=position_dodge(width = 1), colour="black", na.rm = TRUE, width = 0.5) +
theme(axis.title.x = element_text(face="bold", colour="#990000", size=20),
axis.text.x = element_text(angle=90, vjust=2, size=16))
答案 1 :(得分:1)
删除此scale_x_discrete(limits = data.long$Length)
并再次尝试希望此操作
编辑:如果你有scale_y_discrete(limits = data.long$Length)