我正在尝试为ggplot2中的有序堆叠条形图创建自定义标签。
我的花园里有六种不同的动物 - 海狸,大象,袋鼠,老鼠,龙和奇瓦瓦。
我让他们每次都给我唱两次,一次是在他们开心的时候,一次是在他们伤心的时候。我记录了他们每次唱歌的时间。
我想策划动物'叠加条形图中的总唱歌时间,其中一个堆叠条对应于一只动物,并且堆叠条的每个组件对应于动物的心情,但我想按照动物的大小订购堆积的条,动物的名字显示在下面酒吧。
为了做到这一点,我在数据框中创建了一个列,它将大小顺序信息与动物因子结合起来(例如" 1.mouse"等)。这允许条形按大小顺序显示。然后我尝试使用'substring'提取与x标签名称对应的字母(以便它显示为例如"鼠标"等)。这不起作用。
如果我只是使用'animal'来标记轴,那么ggplot会用按字母顺序列出的动物名称标记条形图。我也尝试过使用'order'功能。
我查看了堆栈溢出和其他网站,无法在其他地方找到确切的问题。
非常感谢我和我的动物园!
animal<-rep(c("beaver","elephant","kangaroo","mouse","dragon","chihuahua"),2)
size_order<-rep(c(3,5,4,1,6,2),2)
mood<-c((rep("happy",6)),rep("sad",6))
singing_time<-as.numeric(rnorm(12, 5, 2))
ordered_animal<-paste(size_order,animal,sep = ".")
singing_data<-as.data.frame(cbind(mood,singing_time,ordered_animal))
ggplot(singing_data, aes(x = ordered_animal, y = singing_time, fill = mood, label = singing_time)) +
geom_bar(stat = "identity") +
scale_x_discrete(labels = levels(substring(as.factor(ordered_animal),3,10)))
答案 0 :(得分:0)
部分问题是您使用cbind
会将不同的数据类型(数字,因子)强制转换为单个数据类型(数字)的矩阵。尝试使用向量参数的data.frame
构造函数。
您不需要将数字放入因子级别,并且您不需要&#34;有序因子&#34; (这对回归和其他建模很有用,但这里不需要)。只需使用levels=
的常规因子来处理显示顺序。
您的另一个问题是您的动物尺寸顺序不对,因此示例结果看起来并不正确。
animal_items <- c("beaver","elephant","kangaroo","mouse","dragon","chihuahua")
corrected_size_order<-c(4,6,1,3,2,5) # applies to animal_items
animal<-rep(animal_items,2)
ordered_animal <- factor(animal, levels=animal[corrected_size_order])
mood<-c((rep("happy",6)),rep("sad",6))
singing_time<-as.numeric(rnorm(12, 5, 2))
singing_data<-data.frame(mood,singing_time,ordered_animal)
ggplot(singing_data, aes(x = ordered_animal, y = singing_time, fill = mood, label = singing_time)) +
geom_bar(stat = "identity")