我的数据框只有要创建为小提琴图的列,但未指定y值。
每个列是一个不同的数据子集,显示平均演化速率(因此,实际上应自动创建y列)。几乎所有使用ggplot的示例都使用car数据集,您可以在其中指定数据框中已存在的x列和y列。
我的数据框示例:
Species Zone1 Zone2 Zone3 Zone4
cf 0.0045 0.040 0.054 0.089
cx 0.12 0.145 0.098 0.095
cy 0.044 0.067 0.051 0.077
我想制作小提琴图,其中x轴具有Zone1,Zone2,Zone3和Zone4,而y轴只是进化速率值。
我可以使用vioplot软件包来执行此操作,但是我想保留脚本使用tidyverse和ggplot,因为我喜欢它的更多功能。但是我无法弄清楚如何转换数据以显示所需的数据。
我尝试过:
ggplot(my_data, aes(x=c(Zone1, Zone2, Zone3, Zone4),
y=c(Zone1, Zone2, Zone3, Zone4)) + geom_violin()
但这有太多参数...不确定y变量该怎么做。
答案 0 :(得分:2)
您可以将数据从宽格式(tidyr::gather()
)转换为与ggplot2
一起使用
library(tidyverse)
df <- read.table(text = "Species Zone1 Zone2 Zone3 Zone4
cf 0.0045 0.040 0.054 0.089
cx 0.12 0.145 0.098 0.095
cy 0.044 0.067 0.051 0.077",
header = TRUE, stringsAsFactors = FALSE)
df_long <- df %>%
gather(key = "Zone", value = "Rate", -Species)
df_long
#> Species Zone Rate
#> 1 cf Zone1 0.0045
#> 2 cx Zone1 0.1200
#> 3 cy Zone1 0.0440
#> 4 cf Zone2 0.0400
#> 5 cx Zone2 0.1450
#> 6 cy Zone2 0.0670
#> 7 cf Zone3 0.0540
#> 8 cx Zone3 0.0980
#> 9 cy Zone3 0.0510
#> 10 cf Zone4 0.0890
#> 11 cx Zone4 0.0950
#> 12 cy Zone4 0.0770
ggplot(df_long, aes(x = Zone, y = Rate)) +
geom_violin(trim = FALSE)
ggplot(df_long, aes(x = Zone, y = Rate)) +
geom_violin(trim = TRUE)
由reprex package(v0.3.0)于2019-07-16创建