Как отмечают другие в комментариях, ваш сюжет не воспроизводим. При этом я не могу точно определить, в чем заключается ваша проблема, но я думаю, что если вы последуете тому, что я сделал, вы сможете представить свои данные так, как вам хочется.
Я смоделировал некоторые данные для своего графика, поэтому он не будет выглядеть точно так же, как на втором рисунке, но дает ту же идею. Кроме того, поскольку я не знаю, что такое черные и серые точки, я их пропустил.
Вот сюжет, который я придумал:
И вот код для этого:
# **************************************************************************** #
# Simulate Data ----
# **************************************************************************** #
set.seed(123)
create_data <- function(year, month, sector.rising,
max.percent, max.number.sectors) {
reps <- sum(max.number.sectors, 1)
if(sector.rising == 1){
multiplier <- 1
} else multiplier <- -1
tmp <- data.frame(
Year.Month = factor(rep(paste0(year,",", month),reps)),
Sector = rep(sector.rising,reps),
Sector.Count = multiplier*seq(0, max.number.sectors),
Percent = multiplier*sort(runif(reps,min =0, max = max.percent))
)
return(tmp)
}
df.tmp <- NULL
for (k.sector in 1:2){
for (i.year in 2006:2016){
for (j.month in 1:12) {
if (k.sector == 1) { # 1 for rising, 2 for falling
ran.percent <- runif(1,0,1)
} else ran.percent <- runif(1,0,1.25)
ran.number.sectors <- rbinom(1, 20, 0.5)
tmp <- create_data(year = i.year,
month = j.month,
sector.rising = k.sector,
max.percent = ran.percent,
max.number.sectors = ran.number.sectors
)
df.tmp <- rbind(df.tmp, tmp)
}
}
}
# **************************************************************************** #
# Plot ----
# **************************************************************************** #
p <- ggplot(
data = df.tmp,
aes(x=Year.Month,
y=Sector.Count,
color = cut(Percent, breaks = seq(-1.25,1,.25),include.lowest = T)
)
) +
geom_point(
size=2,
alpha = 1,
pch = 19
) +
scale_x_discrete(
position = "top",
breaks = c("2007,1","2008,1","2009,1","2010,1","2011,1",
"2012,1","2013,1","2014,1","2015,1"
),
labels = c("2007","2008","2009","2010","2011",
"2012","2013","2014","2015"
),
name = ""
) +
scale_y_continuous(
limits = c(-20,20),
breaks = seq(-20,20,5),
labels = as.character(seq(-20,20,5)),
name = "< SECTORS FALLING SECTORS RISING >",
expand = c(0,0)
) +
scale_color_manual(
values = c("#d53e4f","#f46d43","#fdae61","#fee08b",
"#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd"),
name = "",
drop = FALSE,
labels = c(" ",
"-1% ",
" ",
" ",
" ",
"0% ",
" ",
" ",
".75% "),
guide = guide_legend(
direction = "horizontal",
keyheight = unit(2, units = "mm"),
keywidth = unit(2, units = "mm"),
nrow = 1,
byrow = T,
reverse = F,
label.position = "bottom",
override.aes=list(shape=15, cex = 7),
label.hjust = -0.4,
title.hjust = 0.5
)
) +
theme(
text = element_text(size = 10, color = "#4e4d47"),
panel.background = element_blank(),
legend.key.size = unit(1,"mm"),
legend.position = "top",
axis.title = element_text(size = 8, color = "#4e4d47"),
legend.text = element_text(size = 6, color = "#4e4d47")
)
p