微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

geom_bar和geom_point条件颜色

如何解决geom_bar和geom_point条件颜色

我有一个简单的geom_bar和geom_point,想根据数据中的值对条和点进行着色。我的代码当前如下:

```df <- (Test3)

ggplot(Test3,aes(ques,diff1,subj))+
  geom_bar(stat = "identity")+
  geom_point(aes(x=ques,y= diff2))+
  facet_grid(~subj)

我的图表当前如下所示:chart

我的数据如下:

```# A tibble: 8 x 9
  subj   ques    `%` `sect%`  diff1    ci last_y  diff2    tt
  <chr>  <chr> <dbl>   <dbl>  <dbl> <dbl>  <dbl>  <dbl> <dbl>
1 geog   q1     82.1    83.6  -1.49  10.1     78   4.14  2.1 
2 geog   q2     80      50    30     10.1     54  26    -1.28
3 hist   q1     92.9    83.6   9.21  10.1     NA  NA    NA   
4 hist   q2     85.7    82.8   2.94  10.1     NA  NA    NA   
5 Sports q1     73.8    82.4  -8.61  10.1     95 -21.2   2.97
6 Sports q2     69.2    81.8 -12.6   10.1     12  57.2  -2.59
7 sci    q1     78.6    85.2  -6.66  10.1     87  -8.43 -3   
8 sci    q2     78      50    28     10.1     55  23     2 

我想要的是,如果diff1> = ci,则条形为绿色,如果diff1 = 1.96,则这些点为绿色;如果tt

解决方法

可以这样实现:

  1. 根据您的条件(例如,使用)将带有颜色的新变量添加到数据集中dplyr::mutatedplyr::case_when
  2. 将这些新变量映射到colorfill上。
  3. 使用scale_color/fill_identity
library(ggplot2)
library(dplyr)

Test3 <- Test3 %>%
  mutate(
    fill = case_when(
      diff1 >= ci ~ "green",diff1 < ci ~ "red",TRUE ~ "grey"
    ),color = case_when(
      tt >= 1.96 ~ "green",tt < 1.96 ~ "red",TRUE ~ "grey"
    )
  )

ggplot(Test3,aes(ques,diff1,subj)) +
  geom_col(aes(fill = fill)) +
  geom_point(aes(x = ques,y = diff2,color = color)) +
  scale_color_identity() +
  scale_fill_identity() +
  facet_grid(~subj)
#> Warning: Removed 2 rows containing missing values (geom_point).

数据

Test3 <- structure(list(subj = c(
  "geog","geog","hist","Sports","sci","sci"
),ques = c(
  "q1","q2","q1","q2"
),`%` = c(
  82.1,80,92.9,85.7,73.8,69.2,78.6,78
),`sect%` = c(
  83.6,50,83.6,82.8,82.4,81.8,85.2,50
),diff1 = c(-1.49,30,9.21,2.94,-8.61,-12.6,-6.66,28),ci = c(10.1,10.1,10.1),last_y = c(
  78L,54L,NA,95L,12L,87L,55L
),diff2 = c(
  4.14,26,-21.2,57.2,-8.43,23
),tt = c(
  2.1,-1.28,2.97,-2.59,-3,2
)),class = "data.frame",row.names = c(
  "1","2","3","4","5","6","7","8"
))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。