r 将多列数据帧绘制为线的折线图的问题

r problem to plot a linechart with multiple columns of dataframes as lines

我有一个非常简单的数据框 comparison_word_avg:

  index uniform   blur man_check_no_blur
1     1  94.71% 93.83%            91.96%
2     2  87.14% 86.08%            83.04%
3     3  81.29% 88.95%            80.36%
4     4  79.71% 71.59%            75.89%
5     5  75.57% 66.43%            67.86%

我想要折线图。在 x 轴上,指数从 1 到 5,在 y 轴上,百分比从 0% 到 100%。然后三行代表三列“unifrom”,“blur”,“man_check_no_blur”。

我尝试了什么:

ggplot(comparison_word_avg, aes(x = what)) +
  geom_line(aes(y = uniform), color = "blue") +
  geom_line(aes(y = blur), color = "red") +
  geom_line(aes(y = man_check_no_blur), color = "green")

它给了我这个消息三次:

geom_path:每组仅包含一个观察值。需要调整群体审美吗?

感谢您的帮助! 最好的,

因为它们中有百分号,所以您的列是以字符格式存储的,而不是数字格式。这意味着 ggplot 不知道您希望将它们视为数字。要转换它们,我们可以去掉百分号,转换为数字,然后除以 100 得到百分比的比例。当我们绘图时,我们可以让 ggplot 再次将这些比例标记为百分比。

这只解决了部分问题。在 ggplot 中,您的数据最好采用长格式,即将所有百分比放在一列中,另一列根据每个观测值来自的系列标记每个观测值。如果我们这样做,我们可以将系列映射到颜色美学,它会自动为我们添加图例。我们可以使用 pivot_longer 轻松地将您的数据重塑为长格式。

综合起来,我们有。

library(tidyverse)

comparison_word_avg %>%
  mutate(across(where(is.character), ~ as.numeric(sub("%", "", .x))/100)) %>%
  pivot_longer(-1) %>%
  ggplot(aes(index, value, color = name)) +
  geom_line(size = 2) +
  scale_color_brewer(palette = "Set1") +
  labs(color = "") +
  scale_y_continuous(labels = scales::percent, name = "Percent") +
  theme_bw(base_size = 16)