ggplot2 geom_points不会着色或躲避。

所以我使用ggplot2来绘制条形图和点。目前我得到的结果是这样的。enter image description here

如你所见,条形图被很好地分开了,并且用所需的颜色着色。但是我的点都是没有颜色的,而且相互堆叠在一起。我想让这些点在他们指定的条形图上面,并且是相同的颜色。

  #Add bars
  A <- A + geom_col(aes(y = w1, fill = factor(Species1)), 
                    position = position_dodge(preserve = 'single'))

  #Add colors
  A <- A + scale_fill_manual(values = c("A. pelagicus"= "skyblue1","A. superciliosus"="dodgerblue","A. vulpinus"="midnightblue","Alopias sp."="black"))

  #Add points
  A <- A + geom_point(aes(y = f1/2.5), 
                      shape= 24, 
                      size = 3,
                      fill = factor(Species1), 
                      position = position_dodge(preserve = 'single'))

  #change x and y axis range
  A <- A + scale_x_continuous(breaks = c(2000:2020), limits = c(2016,2019))
  A <- A + expand_limits(y=c(0,150))

  # now adding the secondary axis, following the example in the help file ?scale_y_continuous
  # and, very important, reverting the above transformation
  A <- A + scale_y_continuous(sec.axis = sec_axis(~.*2.5, name = " "))

  # modifying axis and title
  A <- A + labs(y = " ",
                x = " ")
  A <- A + theme(plot.title = element_text(size = rel(4)))
  A <- A + theme(axis.text.x = element_text(face="bold", size=14, angle=45),
            axis.text.y = element_text(face="bold", size=14))
  #A <- A + theme(legend.title = element_blank(),legend.position = "none")
  #Print plot
  A

当我运行这段代码时,我得到以下错误。

错误: 未知的颜色名称:A. pelagicus此外: 警告信息:1:宽度未定义。设置为 position_dodge(width = ?) 2: 在max(table(panel$xmin))中:max没有遗漏的参数;返回-Inf

我尝试了一些东西,但我不明白它确实对geom_col有效,而对geom_points无效。

先谢谢你

解决方案:

你的两个基本问题是处理你的颜色错误和不躲避,它们可以通过格式化你的 scale_...(values= 争论,使用 列表 而不是矢量,并应用 group= 审美,分别是。

这两个问题你用一个例子就能看到答案。

# dummy dataset
year <- c(rep(2017, 4), rep(2018, 4))
species <- rep(c('things', 'things1', 'wee beasties', 'ew'), 2)
values <- c(10, 5, 5, 4, 60, 10, 25, 7)
pt.value <- c(8, 7, 10, 2, 43, 12, 20, 10)
df <-data.frame(year, species, values, pt.value)

我为我的列高设置了 “值”,我想为点使用不同的y美学来说明,称为 “pt.value”。 除此之外,数据的设置和你自己的数据设置是类似的。 需要注意的是 df$year 将被设置为数字,所以最好把它改成Date格式(在这里有点麻烦),或者只是作为一个因子,因为 “2017.5 “在这里不会有太大意义:)。 关键是,我需要 “年 “是离散的,而不是连续的。

求解颜色误差

对于剧情,我尽量和你制作的相似。 这里注意,在 scale_fill_manual 对象,你必须将 values= 争论 列表. 在你的示例代码中,你使用的是一个向量(c())来指定颜色和命名。 如果您有 name1=color1, name2=color2,...,这表示一个列表结构。

ggplot(df, aes(x=as.factor(year), y=values)) + 
    geom_col(aes(fill=species), position=position_dodge(width=0.62), width=0.6) + 
    scale_fill_manual(values=
        list('ew' = 'skyblue1', 'things' = 'dodgerblue',
            'things1'='midnightblue', 'wee beasties' = 'gray')) +
    geom_point(aes(y=pt.value), shape=24, position=position_dodge(width=0.62)) +
    theme_bw() + labs(x='Year')

enter image description here

因此,颜色的应用是正确的,我的轴是离散的,点的y值被映射到了 pt.value 如我所愿,但为什么积分不闪避?

解决躲避问题

躲避是一件有趣的事情,在 ggplot2. 这里我能给你的最好的推理是,对于柱状图和条形图来说,闪避算是geom的 “内置”,因为默认位置是 “堆栈”,而 “闪避 “代表了绘制geom的另一种方法。 对于点、文本、标签等,默认位置是 “身份”,你必须更明确地说明它们要如何躲避,否则它们就根本不躲避。

基本上,我们需要让点知道 什么 他们躲避的依据是。 是 “种 “吗? 与 geom_col,它被认为是,但随着 geom_point,你需要指定。 我们通过使用 group= 审美,这让 geom_point 知道用什么作为躲避的标准。 当你加上这一点,就可以了!

ggplot(df, aes(x=as.factor(year), y=values, group=species)) + 
    geom_col(aes(fill=species), position=position_dodge(width=0.62), width=0.6) + 
    scale_fill_manual(values=
        list('ew' = 'skyblue1', 'things' = 'dodgerblue',
            'things1'='midnightblue', 'wee beasties' = 'gray')) +
    geom_point(aes(y=pt.value), shape=24, position=position_dodge(width=0.62)) +
    theme_bw() + labs(x='Year')

enter image description here

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何从 Google 的距离 API 的 json 响应中提取值并存储在 python 数据框架中?

2022-9-9 5:30:17

未分类

如何在同一个项目中为多个火花应用指定不同的log4j.properties文件?

2022-9-9 5:30:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索