当散点图图例是字符值时,按数字顺序(1、4、7、8、10)重新排序散点图图例

问题描述 投票:0回答:1

我对 R 非常陌生。我昨天才开始。

我正在尝试制作五种不同 pH 条件下吸光度与波长的散点图。 图例按 pH 1、10、4、7、8 的顺序显示,但我希望它是 1、4、7、8、10。 The legend in question 我不知道如何重新排序图例。

目前,pH 值是一个字符。我尝试将其设为数字,这确实将图例按正确的顺序排列,但我无法为每个 pH 值选择特定的颜色。我不想要渐变。 (说明一下,图例图像中的颜色是正确的。只是 pH 的顺序是错误的。)

这就是我的代码的图形部分的样子。

pH_character %>% #imported data frame
  group_by(Wavelength, pH) %>%
  summarize(mean_abs = mean(Absorbance), se_abs = sd(Absorbance)/sqrt(3)) %>% #for error bars later
  ggplot(aes(Wavelength, mean_abs, color = pH)) +
    geom_point(size = 1) +
    scale_color_manual(values = c("#ff1934","black","#ffc273","#ff6721","#702400")) + #the colors I need
    geom_errorbar(aes(x = Wavelength,
                      ymin = mean_abs - 2*se_abs,
                      ymax = mean_abs + 2*se_abs,
                      width = 5)) +
    scale_x_continuous(expand = c(0,0), limits = c( 400,700)) +
    scale_y_continuous(expand = c(0,0), limits = c(0,2)) +
    labs(x="Wavelength (nm)", y="Absorbance") 

我还尝试了

group_by(pH, Wavelength)
而不是
group_by(Wavelength, pH)
,以便总结按 pH 值对输出进行分组,但这对图例顺序没有任何影响,因为输出仍然按 pH 1、10、4、7 的顺序组织, 8.

编辑:这是假数据的代码:

pH_character <- data.frame(Wavelength=c(430, 430, 430, 430, 430, 470, 470, 470, 470, 470, 565, 565, 565, 565, 565, 635, 635, 635, 635, 635),
                    pH=c("1", "4", "7", "8", "10", "1", "4", "7", "8", "10", "1", "4", "7", "8", "10", "1", "4", "7", "8", "10"),
                    Absorbance=c(0.96533, 0.83866, 1.268, 1.371, 1.5, 0.78333, 0.617333, 1.192, 1.38566, 1.5, 0.243, 0.12833, 0.22233, 0.26966, 1.5, 0.06566, 0.05, 0.0833, 0.104, 1.5))

这实际上只是除 pH 10 之外的平均数据,因此不会有误差线(但仍然存在同样的问题)

r ggplot2 graph scatter-plot
1个回答
0
投票

正如我在评论中提到的,您可以通过转换为

factor
来获得您想要的顺序,并按照您想要的顺序设置级别的顺序。

在您的情况下,可以使用

factor(as.numeric(pH))
pH
转换为
factor
轻松实现,并根据数值设置级别顺序。

注意:您可能还必须重新排序颜色矢量以反映

pH
的更改顺序。

library(dplyr)
library(ggplot2)

pH_character %>%
  group_by(Wavelength, pH) %>%
  summarize(
    mean_abs = mean(Absorbance),
    se_abs = sd(Absorbance) / sqrt(3),
  ) %>%
  mutate(pH = factor(as.numeric(pH))) %>%
  ggplot(aes(Wavelength, mean_abs, color = pH)) +
  geom_point(size = 1) +
  scale_color_manual(
    values = c("#ff1934", "black", "#ffc273", "#ff6721", "#702400")
  ) +
  geom_errorbar(aes(
    x = Wavelength,
    ymin = mean_abs - 2 * se_abs,
    ymax = mean_abs + 2 * se_abs,
    width = 5
  )) +
  scale_x_continuous(
    expand = c(0, 0),
    limits = c(400, 700)
  ) +
  scale_y_continuous(
    expand = c(0, 0),
    limits = c(0, 2)
  ) +
  labs(
    x = "Wavelength (nm)",
    y = "Absorbance"
  )

© www.soinside.com 2019 - 2024. All rights reserved.