R ggplot2

时间:2017-08-15 16:30:29

标签: r ggplot2 axis-labels stacked-chart stackedbarseries

我正在尝试为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)))

1 个答案:

答案 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")

enter image description here