【问题标题】:ggplot2() fix x-axis for melt variableggplot2() 修复熔体变量的 x 轴
【发布时间】:2021-12-14 03:40:39
【问题描述】:

我正在使用 ggplot2 在一个图中绘制多个向量。 我有以下数据框

Array 1 2 3 4 5 6 7 8 9 10
Arr1 0.1 0.1 0.1 0.2 0.2 0.2 0.7 0.7 0.4 0.7
Arr2 0.6 0.6 0.6 0.1 0.1 0.1 0.1 0.1 0.5 0.1
Arr3 0.3 0.3 0.3 0.7 0.7 0.7 0.2 0.2 0.1 0.2
Arr4 0.4 0.6 0.7 0.2 0.1 0.3 0.4 0.5 0.3 0.9
B a a a b b b a a a b
C b b b a a b b a b a

所以我把数据融合起来,用水平堆栈栏绘制所有向量,如下:

df2<-df %>% 
  melt(id.vars = "Array") %>%
  mutate(variable = str_extract(variable, "[0-9]+")) %>%
  mutate(value = case_when(
    value == "a" ~ 1,
    value == "b" ~ 2, 
    TRUE ~ as.numeric(value)
  )) %>%
  mutate(variable = as.numeric(variable))
  
df2 %>% 
  ggplot(aes(x = Array, y = variable, group = Array, fill = value)) +
  geom_col() + coord_flip()

但是x轴不正确,图像显示向量B中相同数量的ab具有不同的大小,最后一个元素的大小也比前三个大。 x 轴上的问题用矢量B and CArr 更容易检测。

当您查看 df2 variable 只有 1 到 10 时,我无法弄清楚 x 轴上的点数如何超过 50。

【问题讨论】:

  • 我无法复制此内容。请将 dput(df) 的结果添加到您的问题中。另外请显示您正在使用哪些软件包library(tidyverse)library(reshape2)
  • 是的library(tidyverse) and library(reshape2)被使用

标签: r ggplot2


【解决方案1】:

这是因为每个条形图都在堆叠 y(变量)。对于每个 Array 类别,条形从 1 到 10 堆叠,总数为 1+2+...+10 = 55,这就是为什么您看到 x 轴超过 50。这也是 B 和 C 有的原因a 和 b 的尺寸不同。 B 和 C 的第一个蓝色块是: (a, a, a) = (1+2+3) = 6 和 (b, b, b) = (1+2+3) = 6,它们具有相同的尺寸。 B 和 C 的第二个蓝色块是:(b, b ,b) = (4+5+6) = 15 和 (a, a) = (4+5) =9,它们的大小不同。

如果您希望 x 轴的范围在 1-10 之间,并且 B 和 C 对于 a 和 b 具有相同的大小。将您的 y (variable) 设置为 1 的向量。

df2<-df %>% 
  melt(id.vars = "Array") %>%
  mutate(value = case_when(
    value == "a" ~ 1,
    value == "b" ~ 2, 
    TRUE ~ as.numeric(value)
  )) %>%
  mutate(variable = 1) # change to 1

更新图例:您可以使用scale_fill_continuous() 自定义图例文本。使用下面的代码,你会得到图中的图例。

df2 %>%
  ggplot(aes(x = Array, y = variable, group = Array, fill = value)) +
  geom_col() + 
  scale_fill_continuous(breaks = c(0.1, 1, 2), labels = c("0.1", "1 (=a)", "2 (=b)"))+
  coord_flip()

【讨论】:

  • 谢谢@Xiang,你能帮我把BC的图例添加为ab而不是一个数字吗?如果您将 BC 拆分为一个图形,并将所有 Arr 拆分为另一个图形,并带有 2 个单独的图例,那就没问题了。
  • 我已更新答案以解决图例问题。
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多