更改 ggplot2 中特定数据的颜色

Posted

技术标签:

【中文标题】更改 ggplot2 中特定数据的颜色【英文标题】:Change color for specific data in ggplot2 【发布时间】:2020-08-25 02:36:19 【问题描述】:

我有 15 个测量点,我为它们定义了“renkler”调色板。我想改变这15个中2的颜色(红色:ps_no列中的DEF-2和DEF-13点)。

我的代码是

library(ggplot2)
library(reshape)
dat <- read.delim("a.txt")
dat$Date <- as.Date(dat$Date,"%d/%m/%Y")

# order
dat$parameter <- factor(dat$parameter, levels = c("DEF-2", "DEF-13"))
dat$ps_no <- factor(dat$ps_no, levels = c("DEF-2", "PS.584", "PS.585", "PS.586", "PS.603", "PS.630", "DEF-13", "PS.600", "PS.667", "PS.690", "PS.714", "PS.734", "PS.754", "PS.811", "PS.813"))  

# create own color palette
library(RColorBrewer)
renkler = c(brewer.pal(name="Set2", n = 7), brewer.pal(name="Set2", n = 8))

# Setup plot without facets
p <- ggplot(data = dat, aes(x = Date, y = value)) + 
  geom_line(aes(color = ps_no)) +
  geom_point(aes(color = ps_no)) + 
  scale_color_manual(values = renkler) + # oluşturduğumuz paleti yüklemek için
  scale_x_date(date_breaks = "1 months",date_labels = "%Y-%m",
               limits = as.Date.character(c("01/12/2017","31/12/2018"),
                                          format = "%d/%m/%Y")) +
  ylab("[mm/year]") +
  xlab("") +
  facet_grid(parameter ~ .) +
  theme_bw()

p + theme(
  axis.text.x = element_text(angle = 45, hjust = 1),
  panel.grid.major.x = element_blank(),
  panel.grid.minor.x = element_blank(),
)

以及用dput(dat)输出的数据:

structure(list(parameter = structure(c(2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("DEF-13",
"DEF-2"), class = "factor"), ps_no = structure(c(3L, 3L, 3L,
3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 7L, 7L, 7L, 8L, 8L, 8L, 2L,
2L, 2L, 6L, 6L, 6L, 9L, 9L, 9L, 10L, 10L, 10L, 11L, 11L, 11L,
12L, 12L, 12L, 13L, 13L, 13L, 14L, 14L, 14L, 15L, 15L, 15L, 1L,
1L, 1L), .Label = c("DEF-13", "DEF-2", "PS.584", "PS.585", "PS.586",
"PS.600", "PS.603", "PS.630", "PS.667", "PS.690", "PS.714", "PS.734",
"PS.754", "PS.811", "PS.813"), class = "factor"), Date = structure(c(17534,
17546, 17870, 17882, 17534, 17546, 17870, 17882, 17534, 17546,
17870, 17882, 17534, 17546, 17882, 17534, 17546, 17882, 17536,
17557, 17879, 17534, 17546, 17882, 17534, 17546, 17882, 17534,
17546, 17882, 17534, 17546, 17882, 17534, 17546, 17882, 17534,
17546, 17882, 17534, 17546, 17882, 17534, 17546, 17882, 17536,
17549, 17886), class = "Date"), value = c(0, 1.23684, -12.15729097,
-11.4102363, 0, 2.45200798, 1.12950398, -2.76779102, 0, 0.924571,
-7.1917482, -6.2764626, 0, -4.0725265, 0.4847485, 0, 0.290382,
-6.098794, 0, 0.813289109, -0.426076522, 0, 1.7502, -5.139665,
0, -29.67012, -14.956098, 0, 12.8852143, 7.4377433, 0, 1.404183,
-12.426633, 0, -24.09551, -7.619493, 0, -4.194441, -16.258703,
0, -0.835691, -10.504454, 0, 1.311699, 6.30102, 0, -1.49366556,
-1.835284539)), row.names = c(NA, -48L), class = "data.frame")

我还需要更改图例标题(ps_no)和图右侧的文本(DEF-2 和 DEF-13)。

谢谢。

编辑:

我使用 filter 命令过滤我想要显示不同颜色的数据。在过滤命令之后,我为 geom_line 添加了一个命令行,为 geom_point 添加了另一个命令行。它在情节中起作用。但这不是字面上的答案,因为图例中的颜色不会改变。

所以这是新版本的代码:

library(ggplot2)
library(reshape)
dat <- read.delim("aroundDEF.txt")
dat$Date <- as.Date(dat$Date,"%d/%m/%Y")

# order
dat$parameter <- factor(dat$parameter, levels = c("DEF-2", "DEF-13"))
dat$ps_no <- factor(dat$ps_no, levels = c("DEF-2", "PS.584", "PS.585", "PS.586", "PS.603", "PS.630", "DEF-13", "PS.600", "PS.667", "PS.690", "PS.714", "PS.734", "PS.754", "PS.811", "PS.813"))  

# create own color palette
library(RColorBrewer)
renkler = c(brewer.pal(name="Set2", n = 7), brewer.pal(name="Set2", n = 8))
  geom_line(aes(color = ps_no)) +
  geom_line(data=highlight_df, aes(color = ps_no), color='#da0018') +
  geom_point(aes(color = ps_no)) + 
  geom_point(data=highlight_df, aes(color = ps_no), color='#da0018') +

# filter dataframe to get data to be highligheted
highlight_df <- dat %>% 
  filter(ps_no=="DEF-2" | ps_no=="DEF-13")

# Setup plot without facets
p <- ggplot(data = dat, aes(x = Date, y = value)) + 

  scale_color_manual(values = renkler) + 
  scale_x_date(date_breaks = "1 months",date_labels = "%Y-%m",
               limits = as.Date.character(c("01/12/2017","31/12/2018"),
                                          format = "%d/%m/%Y")) +
  ylab("[mm/year]") +
  xlab("") +
  facet_grid(parameter ~ .
             , labeller = as_labeller( c("DEF-2" = "DEF-2 and around", "DEF-13" = "DEF-13 and around"))) +
  theme_bw()

p + theme(
  axis.text.x = element_text(angle = 45, hjust = 1),
  panel.grid.major.x = element_blank(),
  panel.grid.minor.x = element_blank(),
)

总之,我还是需要一个答案……

【问题讨论】:

这能回答你的问题吗? r - ggplot2 - highlighting selected points and strange behavior 嗨@Tjebo,我尝试了你的建议,但我无法达到结果。 您能通过dput(dat) 分享您的数据集吗(只需在此处粘贴该函数的输出)?在此处通过指向个人 Google 云端硬盘的链接进行分享并不是一个好主意,而且无论如何不会有多少人会点击。 嗨@chemdork123,我将数据集粘贴到主要问题。 【参考方案1】:

在renkler变量之后:

renkler[1]= "#DA0018"
renkler[7]= "#DA0018"

对于图例标题:

scale_color_manual(values = renkler, name="new name")

【讨论】:

以上是关于更改 ggplot2 中特定数据的颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何更改ggplot2中散点图的颜色

如何更改使用 ggplot2 制作的绘图的背景颜色

ggplot2:更改条形图中每个方面的颜色

如何在 R 中的 ggplot2 中更改 geom_text 中的字体颜色?

更改 ggplot2 中条形图和图例的默认颜色

R语言ggplot2可视化:使用ggthemr包更改ggplot2主题(theme)以及布局使用ggplot2包的默认的各种主题(theme)来调整图形的颜色使用patchwork组合不同主题结果