我正在生成残留气泡图,并且希望颜色表示正负,如果值较大,请说>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
代码感到困惑,在此先感谢
答案 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"