首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何改变图形中点的颜色?ggpubr包

如何改变图形中点的颜色?ggpubr包
EN

Stack Overflow用户
提问于 2021-03-10 22:08:35
回答 1查看 594关注 0票数 2

我正在使用ggpubr包的ggerrorplot ()函数来创建下面的图表。我的问题是,是否有任何方法可以改变点的颜色,而不改变代表均值和标准差的点的颜色?观察图像:

我的代码:

代码语言:javascript
复制
# loading packages
library(ggpubr)

# Create data frame
GROUP <- c()
TEST <- c()
VALUE <- c()
for (i in 0:100) {
  gp <- c('Group1','Group2','Group1 and Group2')
  ts <- c('Test1','Test2') 
  GROUP <- append(GROUP, sample(gp, 1))
  TEST <- append(TEST, sample(ts, 1))
  VALUE <-  append(VALUE, sample(1:200, 1))
}
df <- data.frame(GROUP, TEST, VALUE)

# Seed
set.seed(123)

# Plot
ggerrorplot(df, x = "GROUP", y = "VALUE",
            desc_stat = "mean_sd",
            add = c("jitter"),
            color = "TEST", 
            palette = "jco",
            add.params = list(size = 0.2),
            order = c('Group1','Group2','Group1 and Group2')
            ) +
  labs(x = '', y = 'Values\n') +
  theme(legend.title = element_blank())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-10 22:48:18

另一种可能的解决方法是使用ggplot()和geom_linerange()复制绘图。

代码语言:javascript
复制
library(ggpubr)
library(ggsci)
library(cowplot)

# Create data frame
GROUP <- c()
TEST <- c()
VALUE <- c()
for (i in 0:100) {
  gp <- c('Group1','Group2','Group1 and Group2')
  ts <- c('Test1','Test2') 
  GROUP <- append(GROUP, sample(gp, 1))
  TEST <- append(TEST, sample(ts, 1))
  VALUE <-  append(VALUE, sample(1:200, 1))
}
df <- data.frame(GROUP, TEST, VALUE)

# Seed
set.seed(123)

data_summary <- function(data, varname, groupnames){
  require(plyr)
  summary_func <- function(x, col){
    c(mean = mean(x[[col]], na.rm=TRUE),
      sd = sd(x[[col]], na.rm=TRUE))
  }
  data_sum<-ddply(data, groupnames, .fun=summary_func,
                  varname)
  data_sum <- rename(data_sum, c("mean" = varname))
  return(data_sum)
}

df2 <- data_summary(df, varname = "VALUE", groupnames = c("TEST", "GROUP"))

# Plot
p1 <- ggplot(df, aes(x = factor(GROUP, levels = c('Group1','Group2','Group1 and Group2')),
               y = VALUE, color = TEST)) +
  geom_jitter(shape = 21, fill = "black", stroke = 0,
              position = position_jitterdodge(jitter.width = 0.2)) +
  geom_linerange(data = df2, aes(ymin=VALUE-sd, ymax=VALUE+sd),
                position=position_dodge(width = .75)) +
  geom_point(data = df2, aes(y = VALUE), size = 3,
             position = position_dodge(width = 0.75)) +
  scale_color_jco() +
  labs(x = '', y = 'Values\n') +
  theme_classic(base_size = 14) +
  theme(legend.title = element_blank(),
        legend.position = "top")

p2 <- ggerrorplot(df, x = "GROUP", y = "VALUE",
                  desc_stat = "mean_sd",
                  add = c("jitter"),
                  color = "TEST", 
                  palette = "jco",
                  add.params = list(size = 0.2),
                  order = c('Group1','Group2','Group1 and Group2')
) +
  labs(x = '', y = 'Values\n') +
  theme(legend.title = element_blank())

cowplot::plot_grid(p1, p2, nrow = 1, ncol = 2, labels = "AUTO")

当你把它们并排画在一起的时候,你会发现它们并不完全一样,但这对你来说还是可行的。

编辑

这种方法的一个优点是,如果您不希望所有的点都是相同的颜色,则可以单独调整“填充”比例,但是您确实希望它们与线条不同。

代码语言:javascript
复制
p1 <- ggplot(df, aes(x = factor(GROUP, levels = c('Group1','Group2','Group1 and Group2')),
               y = VALUE, color = TEST)) +
  geom_jitter(aes(fill = TEST), shape = 21, stroke = 0,
              position = position_jitterdodge(jitter.width = 0.2)) +
  geom_linerange(data = df2, aes(ymin=VALUE-sd, ymax=VALUE+sd),
                position=position_dodge(width = .75)) +
  geom_point(data = df2, aes(y = VALUE), size = 3,
             position = position_dodge(width = 0.75)) +
  scale_color_jco() +
  scale_fill_npg() +
  labs(x = '', y = 'Values\n') +
  theme_classic(base_size = 14) +
  theme(legend.title = element_blank(),
        legend.position = "top")

p2 <- ggerrorplot(df, x = "GROUP", y = "VALUE",
                  desc_stat = "mean_sd",
                  add = c("jitter"),
                  color = "TEST", 
                  palette = "jco",
                  add.params = list(size = 0.2),
                  order = c('Group1','Group2','Group1 and Group2')
) +
  labs(x = '', y = 'Values\n') +
  theme(legend.title = element_blank())

cowplot::plot_grid(p1, p2, nrow = 1, ncol = 2, labels = "AUTO")

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66573602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档