ggplot与col和fill

时间:2019-03-31 22:30:53

标签: r ggplot2

我正在生成残留气泡图,并且希望颜色表示正负,如果值较大,请说>3,然后我希望填充为灰色,否则将填充保留为默认颜色。这就是我到目前为止所得到的。

set.seed(123)
library(ggplot2)
library(reshape2)

resids_matrix = matrix(rnorm(100,0,1.2), nrow  = 10)
dimnames(resids_matrix) = list(1:10, 1:10)
## reformat data
df_melted = reshape2::melt(resids_matrix)
df_melted$year = df_melted$Var1
df_melted$variable = df_melted$Var2
df_melted$large_resid = abs(df_melted$value) >= 3
df_melted$sign = df_melted$value <= 0
df_melted$plotted_var = df_melted$value
df_melted$plotted_var[df_melted$plotted_var < -3] = -3
df_melted$plotted_var[df_melted$plotted_var > 3] = 3

ggplot(df_melted, aes(x = year, y = variable, size =  abs(plotted_var), col = sign, fill = large_resid)) +
geom_point() + 
scale_colour_manual(name = 'Sign', values = c("#F8766D", "#00BFC4"), label = c("Negative", "Positive")) +
scale_fill_manual(name = 'Outliers', values = c(ifelse(sign, "#F8766D", "#00BFC4"),"gray60"), labels = c("less than 3", "greater than 3"))

但是我对如何应用scale_fill_manual代码感到困惑,在此先感谢

1 个答案:

答案 0 :(得分:1)

出于说明目的,我将上限设置为2,因为[-3,3]中的值很少出现

set.seed(123)
library(ggplot2)
library(reshape2)

resids_matrix = matrix(rnorm(100,0,1.2), nrow  = 10)
dimnames(resids_matrix) = list(1:10, 1:10)
## reformat data
df_melted = reshape2::melt(resids_matrix)
df_melted$year = df_melted$Var1
df_melted$variable = df_melted$Var2
df_melted$large_resid = abs(df_melted$value) >= 3
#df_melted$sign = df_melted$value <= 0 #can lead to mixups, because levels "TRUE" and "FALSE" are generated and have different alphabetical order than their "Positive" and "Negative" counterparts
df_melted$sign = ifelse(df_melted$value <= 0,"Negative","Positive")
df_melted$fillcolor=ifelse(df_melted$value>=2,"larger than 2",
                           ifelse(df_melted$value<=-3,"less than -3",
                                  ifelse(df_melted$value <= 0,"Negative","Positive")))
df_melted$plotted_var = df_melted$value
df_melted$plotted_var[df_melted$plotted_var < -3] = -3
df_melted$plotted_var[df_melted$plotted_var > 3] = 3

ggplot(df_melted, aes(x = year, y = variable, size =  abs(plotted_var), col = sign, fill = fillcolor)) +
  geom_point(shape=21) + #this shape actually has a fill ;-)
  scale_colour_manual(name = 'Sign', values = c("Positive"="#F8766D", "Negative"="#00BFC4")) +
  scale_fill_manual(name="Outliers",values=c("larger than 2"="gray60","less than 3"="gray60",
                                             "Positive"="#F8766D","Negative"="#00BFC4")) #make sure names match the levels in "fillcolorby"

enter image description here