【问题标题】:Kite diagram tidyr风筝图 tidyr
【发布时间】:2021-08-24 07:32:46
【问题描述】:

我正在关注以前的线程(不确定是否不适合在 2020 年发布问题)并且代码生成了一个风筝图,但是,当使用我的数据时,轴被交换并且我想要的值因为 x 轴也包含在错误的组中。我希望 x-acis 为样方数,y 轴为物种。

上一个帖子:Kite Diagram in R

我的数据是这样的

structure(list(quadrat_number = 0:87, Ulva.sp. = c(12L, 32L, 
24L, 28L, 48L, 16L, 80L, 24L, 80L, 100L, 16L, 32L, 40L, 40L, 
68L, 56L, 28L, 32L, 20L, 8L, 24L, 12L, 0L, 20L, 56L, 32L, 72L, 
48L, 76L, 68L, 20L, 88L, 88L, 0L, 56L, 12L, 12L, 32L, 100L, 28L, 
0L, 0L, 4L, 44L, 80L, 100L, 100L, 0L, 88L, 96L, 100L, 0L, 0L, 
0L, 0L, 0L, 0L, 32L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L), Hormosira = c(0L, 72L, 24L, 32L, 0L, 0L, 52L, 
8L, 24L, 80L, 4L, 16L, 12L, 16L, 60L, 16L, 12L, 0L, 0L, 0L, 32L, 
8L, 0L, 64L, 0L, 8L, 24L, 0L, 0L, 0L, 4L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L), Bostrychia = c(92L, 0L, 0L, 40L, 0L, 96L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 12L, 0L, 76L, 0L, 100L, 48L, 
88L, 100L, 28L, 0L, 28L, 0L, 16L, 0L, 0L, 0L, 52L, 92L, 52L, 
88L, 96L, 20L, 44L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 24L, 
0L, 4L, 36L, 4L, 0L, 4L, 84L, 100L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 36L, 52L, 20L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Corallina.crustose = c(0L, 
4L, 4L, 4L, 0L, 0L, 0L, 0L, 0L, 100L, 8L, 0L, 56L, 0L, 88L, 0L, 
40L, 0L, 28L, 0L, 28L, 64L, 12L, 0L, 76L, 0L, 20L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 4L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Jania = c(0L, 0L, 0L, 
0L, 0L, 0L, 0L, 100L, 0L, 0L, 0L, 32L, 0L, 28L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 28L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L), Pyropia.cinnamomea = c(0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 12L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 8L, 20L, 52L, 0L, 
4L, 0L, 0L, 24L, 40L, 12L)), class = "data.frame", row.names = c(NA, 
-88L))

我按照另一个线程上的代码。

library(plotrix)
kiteChart(dataprune)

library(dplyr)
library(tidyr)
dataprune <- as.data.frame(dataprune) %>% mutate(species = rownames(dataprune)) %>%
  pivot_longer(-species, names_to = "X_var", values_to = "values") %>%
  mutate(species = factor(species, levels = unique(species))) %>%
  mutate(X_var = factor(X_var, levels = unique(X_var))) %>%
  mutate(NewY = as.numeric(species)*2) %>%
  mutate(normval = values / max(values))  %>%
  mutate(NewX = as.numeric(X_var))  

ggplot(dataprune, aes(x = NewX, fill = species))+
  geom_ribbon(aes(ymin = NewY-normval, ymax = NewY+normval))+
  scale_y_continuous(breaks = unique(dataprune$NewY), labels = levels(dataprune$species))+
  scale_x_continuous(breaks = unique(dataprune$NewX), labels = levels(dataprune$X_var), name = "")

这产生了这个图表 not correct kite diagram 在另一个线程上,他们得到了这样的图表。 ideal graph

我认为问题在于变量的创建,但我不确定要做什么或如何排列我的数据,以便它可以在这个框架中工作。

如果不清楚,请告诉我。非常感谢

【问题讨论】:

  • 您能检查一下您的数据样本吗?
  • 你到底是什么意思?我应该截屏我的数据集吗?对不起
  • 不要截屏,阅读 R 常见问题解答以获得在堆栈上共享数据的好方法:stackoverflow.com/tags/r/info
  • 抱歉,已修改。感谢您为我指明方向!

标签: r ggplot2 diagram


【解决方案1】:

问题是kitePlot() 的数据格式错误。您需要将 y 轴变量设为行名,将 x 轴变量设为列名。

这是tidyr 的一种方法:

library(tidyverse)
library(plotrix)
dataprune %>%
   pivot_longer(-quadrat_number, names_to = "organism") %>%
   pivot_wider(names_from = quadrat_number, values_from = value) %>%
   column_to_rownames("organism") -> reshaped.dataprune

reshaped.dataprune[,1:5]
#                    0  1  2  3  4
#Ulva.sp.           12 32 24 28 48
#Hormosira           0 72 24 32  0
#Bostrychia         92  0  0 40  0
#Corallina.crustose  0  4  4  4  0
#Jania               0  0  0  0  0
#Pyropia.cinnamomea  0  0  0  0  0

kiteChart(reshaped.dataprune)

【讨论】:

  • 感谢您的帮助和您的时间!代码有效,感谢您的解释
猜你喜欢
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 2021-07-10
  • 2017-09-02
  • 2021-05-21
相关资源
最近更新 更多