GGplot:stat_summary中的行未显示

vkc1a9a2  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(106)

我试图有一个图表显示一条线连接每个变量中的每个组的点。然而,似乎ggplot拒绝渲染这条线,我不知道为什么。
代码如下:

ggplot(DF_Compound, aes(color=MainThemes, y=value, x=Variable)) +
  stat_summary(
    fun.y="mean",
    geom="point",
    size=2,
  ) +
  stat_summary(
    fun.y="mean",
    geom="Line",
    size=1,
  ) +
  ylim(0,9) +
  ylab("") +
  scale_y_continuous(breaks = c(1,2,3,4,5,6,7)) +
  theme_minimal() +
  scale_fill_discrete(guide = guide_legend()) +
  theme(legend.position="bottom")

这是输出:

这就是我想要的(当然每个主题都有一行):

(为图片上的草率商店道歉)
MainThemes和Variable都是factors(如果有区别的话)。如果我去掉这些点,坐标系就是空的。我是不是忽略了什么?我见过有人用这种方式添加线条,似乎很有效。
编辑:试图提供我弄清楚的数据,问题似乎是“变量”是一个因素。此数据集的工作原理:

structure(list(MainThemes = c("F", "F", "F", "F", "F", "F", "F", 
"F", "F", "F", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "G", "G", "G", 
"G", "G", "G", "G", "G", "G", "G", "E", "E", "E", "E", "E", "E", 
"E", "E", "E", "E", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "F", "F", "F", "F", "F", 
"F", "F", "F", "F", "F", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C"), Variable = c(9, 5, 8, 2, 3, 7, 10, 1, 6, 4, 9, 5, 
8, 2, 3, 7, 10, 1, 6, 4, 9, 5, 8, 2, 3, 7, 10, 1, 6, 4, 9, 5, 
8, 2, 3, 7, 10, 1, 6, 4, 9, 5, 8, 2, 3, 7, 10, 1, 6, 4, 9, 5, 
8, 2, 3, 7, 10, 1, 6, 4, 9, 5, 8, 2, 3, 7, 10, 1, 6, 4, 9, 5, 
8, 2, 3, 7, 10, 1, 6, 4, 9, 5, 8, 2, 3, 7, 10, 1, 6, 4, 9, 5, 
8, 2, 3, 7, 10, 1, 6, 4), value = c(3.33333333333333, 5.33333333333333, 
5, 3.33333333333333, 5.33333333333333, 5.33333333333333, 5.33333333333333, 
5.66666666666667, 4.66666666666667, 5.66666666666667, 1, 3.66666666666667, 
3.33333333333333, 4, 5.33333333333333, 4.66666666666667, 1.33333333333333, 
7, 6.66666666666667, 2, 4.33333333333333, 6.33333333333333, 1.66666666666667, 
2.66666666666667, 2, 3.66666666666667, 2, 6.33333333333333, 3.33333333333333, 
6, 2, 2, 2.33333333333333, 2, 4.66666666666667, 2.33333333333333, 
5.33333333333333, 3, 6, 6, 2, 2, 2.33333333333333, 2, 4.66666666666667, 
2.33333333333333, 5.33333333333333, 3, 6, 6, 2, 4, 3, 1.33333333333333, 
4, 4.33333333333333, 4, 4.66666666666667, 3, 4, 4, 4, 1, 4, 3, 
5, 5.33333333333333, 6, 4.33333333333333, 5.66666666666667, 5.33333333333333, 
6.66666666666667, 4, 5.33333333333333, 4.66666666666667, 6.33333333333333, 
4.66666666666667, 6.33333333333333, 6, 5.66666666666667, 7, 5, 
4.33333333333333, 1.33333333333333, 3.33333333333333, 7, 3.33333333333333, 
7, 5, 5.33333333333333, 4.66666666666667, 4.66666666666667, 4, 
2, 4.66666666666667, 1.66666666666667, 4.33333333333333, 6.33333333333333, 
6.33333333333333, 5.33333333333333)), row.names = c(NA, -100L
), class = c("tbl_df", "tbl", "data.frame"))

这一个没有:

Variables are vectors:
structure(list(MainThemes = c("F", "F", "F", "F", "F", "F", "F", 
"F", "F", "F", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "G", "G", "G", 
"G", "G", "G", "G", "G", "G", "G", "E", "E", "E", "E", "E", "E", 
"E", "E", "E", "E", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "F", "F", "F", "F", "F", 
"F", "F", "F", "F", "F", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C"), Variable = c("VI", "VE", "VH", "VB", "VC", "VG", "VJ", 
"VA", "VF", "VD", "VI", "VE", "VH", "VB", "VC", "VG", "VJ", "VA", 
"VF", "VD", "VI", "VE", "VH", "VB", "VC", "VG", "VJ", "VA", "VF", 
"VD", "VI", "VE", "VH", "VB", "VC", "VG", "VJ", "VA", "VF", "VD", 
"VI", "VE", "VH", "VB", "VC", "VG", "VJ", "VA", "VF", "VD", "VI", 
"VE", "VH", "VB", "VC", "VG", "VJ", "VA", "VF", "VD", "VI", "VE", 
"VH", "VB", "VC", "VG", "VJ", "VA", "VF", "VD", "VI", "VE", "VH", 
"VB", "VC", "VG", "VJ", "VA", "VF", "VD", "VI", "VE", "VH", "VB", 
"VC", "VG", "VJ", "VA", "VF", "VD", "VI", "VE", "VH", "VB", "VC", 
"VG", "VJ", "VA", "VF", "VD"), value = c(3.33333333333333, 5.33333333333333, 
5, 3.33333333333333, 5.33333333333333, 5.33333333333333, 5.33333333333333, 
5.66666666666667, 4.66666666666667, 5.66666666666667, 1, 3.66666666666667, 
3.33333333333333, 4, 5.33333333333333, 4.66666666666667, 1.33333333333333, 
7, 6.66666666666667, 2, 4.33333333333333, 6.33333333333333, 1.66666666666667, 
2.66666666666667, 2, 3.66666666666667, 2, 6.33333333333333, 3.33333333333333, 
6, 2, 2, 2.33333333333333, 2, 4.66666666666667, 2.33333333333333, 
5.33333333333333, 3, 6, 6, 2, 2, 2.33333333333333, 2, 4.66666666666667, 
2.33333333333333, 5.33333333333333, 3, 6, 6, 2, 4, 3, 1.33333333333333, 
4, 4.33333333333333, 4, 4.66666666666667, 3, 4, 4, 4, 1, 4, 3, 
5, 5.33333333333333, 6, 4.33333333333333, 5.66666666666667, 5.33333333333333, 
6.66666666666667, 4, 5.33333333333333, 4.66666666666667, 6.33333333333333, 
4.66666666666667, 6.33333333333333, 6, 5.66666666666667, 7, 5, 
4.33333333333333, 1.33333333333333, 3.33333333333333, 7, 3.33333333333333, 
7, 5, 5.33333333333333, 4.66666666666667, 4.66666666666667, 4, 
2, 4.66666666666667, 1.66666666666667, 4.33333333333333, 6.33333333333333, 
6.33333333333333, 5.33333333333333)), row.names = c(NA, -100L
), class = c("tbl_df", "tbl", "data.frame"))

将变量转换为数字是一种变通方法,但如果可能的话,我真的希望避免它。
谢谢!

qoefvg9y

qoefvg9y1#

如果有一个离散的x轴,则需要添加MainThemes作为分组变量:

DF_Compound |>
  ggplot(aes(color = MainThemes, y = value, x = Variable, group = MainThemes)) +
  stat_summary(fun.y="mean", geom="point", size = 2) +
  stat_summary(fun.y="mean",geom="Line",linewidth = 1) +
  scale_y_continuous(NULL, breaks = 0:9, limits = c(0, 9)) +
  theme_minimal() +
  theme(legend.position = "bottom")

需要注意的其他几点是:

  • 由于您已经在使用scale_y_continuous,因此可以将NULL作为第一个参数传递给scale_y_continuous以删除轴标签,而不是使用ylab("")
  • scale_fill_discrete在这里不做任何事情,因为您没有使用填充比例。但是,将其更改为scale_color_discrete(guide = guide_legend())也不会做任何事情,因为这是默认设置。
  • geom_line中的size参数已被弃用-如果您的ggplot版本是最新的,则应该使用linewidth
  • 由于x轴是离散的(尽管这有点特定于领域),我不确定在这里使用折线图是否合适。如果您想要显示两个离散变量和一个连续变量之间的关系,则可以使用热图。这给出了一个更清晰的图,尽管代价是更难辨别确切的value
library(tidyverse)

DF_Compound %>%
  group_by(MainThemes, Variable) %>%
  summarise(value = mean(value)) %>%
  ggplot(aes(y = MainThemes, x = Variable, fill = value)) +
  geom_tile() +
  theme_minimal(base_size = 20) +
  scale_fill_viridis_c() +
  coord_equal() +
  theme(legend.position = "bottom")

如果你有足够的空间,你甚至可以通过使用分面箱线图或小提琴图来更好地了解数据的范围:

library(tidyverse)

DF_Compound %>%
  ggplot(aes(y = value, x = Variable, fill = MainThemes)) +
  geom_point(size = 1, shape = 21) +
  geom_violin(linewidth = 0.3) +
  facet_grid(MainThemes~.) +
  scale_fill_brewer(palette = "Pastel1") +
  theme_bw(base_size = 16) +
  theme(legend.position = "none")

相关问题