我有一个包含两组的条形图,其中y轴=赢得的美元& x轴的宽度=销售的#单位。以下示例数据:
test<- structure(list(Person = c("Bob", "Bob", "Bob", "Bob", "Bob",
"Jim", "Jim", "Jim", "Jim", "Jim"), Car = c("Wombat", "Beetle",
"Impala", "Carrera", "Sienna", "Wombat", "Beetle", "Impala",
"Carrera", "Sienna"), tot = c(75090, 229994, 1229347, 247052,
1148873, 41114, 2430, 430423, 629812, 30442), freq = c(5L, 620L,
1324L, 219L, 550L, 36L, 1L, 213L, 195L, 2L)), .Names = c("Person",
"Car", "tot", "freq"), row.names = c(NA, 10L), class = "data.frame")
# Print bar chart.
ggplot()+
geom_bar(data=test,aes(x=reorder(Car,tot,function(x) -sum(x)),
y=as.numeric(tot)/1000,width=freq/1000,fill=Person),
stat='identity',position='identity')
我想对此图表执行以下两项操作,但遇到了障碍:
A)对于每个汽车类别,我希望人员彼此相邻排列,而不是彼此重叠。 ggplot说我不能position = 'dodge'
宽度不等。
B)似乎Car类别之间的间距是根据宽度最大的条形设置的。是否可以以width * .05
之类的方式改变间距?例如,我希望Sienna
,Carrera
和&amp;之间的空间更窄。 Beetle
。
答案 0 :(得分:1)
分割这些图表可能是个更好的主意。首先,你所有的问题都将由他们自己解决。其次,您不会在同一轴上混合使用不同的变量(在您的示例中销售的单位和汽车类别),从而避免不良做法。
如果你坚持以自己的方式策划事情,那么,我没有想到的快速方法:ggplot不鼓励其“非常规”使用。这是最着名的例子:Plot with 2 y axes, one y axis on the left, and another y axis on the right
library(gridExtra)
p1 <- ggplot()+
geom_bar(data=test,aes(x=reorder(Car,tot,function(x) -sum(x)),
y=tot/1000,fill=Person),
stat='identity',position='dodge')
p2 <- ggplot()+
geom_bar(data=test,aes(x=reorder(Car,tot,function(x) -sum(x)),
y=freq/1000,fill=Person),
stat='identity',position='dodge')
grid.arrange(p1, p2)