R-ggplot2: область geom теряет свою заполняемость, если заданы ограничения на максимальное и минимальное значения из данных.рамка
Я пытаюсь воспроизвести sparkline с ggplot2, как тот, что внизу этого изображения:
Используя следующий код, я получаю результат, отображаемый в конце кода.
Примечание: мои фактические данные.рамка имеет только 2 ряда. Поэтому результат выглядит как одна строка.
# Create sparkline for MM monthly
# sparkline(dailyMM2.aggregate.monthly$Count, type = 'line')
p <- ggplot(dailyMM2.aggregate.monthly, aes(x=seq(1:nrow(dailyMM2.aggregate.monthly)), y=Count)) +
geom_area(fill="#83CAF5") +
geom_line(color = "#2C85BB", size = 1.5) +
scale_x_continuous(expand=c(0,0)) +
scale_y_continuous(expand=c(0,0))
p + theme(axis.line=element_blank(),axis.text.x=element_blank(),
axis.text.y=element_blank(),axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),legend.position="none",
panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),plot.background=element_blank())
Однако, поскольку я пытаюсь только show trends со спарклайном и, следовательно, абсолютные значения для меня не актуальны, я должен адаптировать конфигурацию ggplot, чтобы ограничить видимую область между min и max моей оси.y. я делаю это, используя опцию limits:
# Create sparkline for MM monthly
# sparkline(dailyMM2.aggregate.monthly$Count, type = 'line')
p <- ggplot(dailyMM2.aggregate.monthly, aes(x=seq(1:nrow(dailyMM2.aggregate.monthly)), y=Count)) +
geom_area(fill="#83CAF5") +
geom_line(color = "#2C85BB", size = 1.5) +
scale_x_continuous(expand=c(0,0)) +
scale_y_continuous(expand=c(0,0), limits = c(min(dailyMM2.aggregate.monthly$Count)-100, max(dailyMM2.aggregate.monthly$Count)+100))
p + theme(axis.line=element_blank(),axis.text.x=element_blank(),
axis.text.y=element_blank(),axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),legend.position="none",
panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),plot.background=element_blank())
Однако результат не похож на ожидаемый, так как вся заливка geom_area исчезает, как показано на следующем рисунке:
Может ли кто - нибудь пролить свет на то, почему происходит такое поведение, и, возможно, помочь мне найти правильный способ решения этой проблемы?
1 ответ:
Если вы проверите
?geom_area, то заметите, что минимум установлен на 0. Это может быть проще в использованииgeom_ribbon. У него есть эстетикаymin. Задайте максимальное значение y с помощьюlimitsилиcoord_cartesian.library(reshape2) library(ggplot2) # Some data df=data.frame(year = rep(2010:2014, each = 4), quarter=rep(c("Q1","Q2","Q3","Q4"),5), da=c(46,47,51,50,56.3,53.6,55.8,58.9,61.0,63,58.8,62.5,59.5,61.7,60.6,63.9,68.4,62.2,62,70.4)) df.m <- melt(data = df, id.vars = c("year", "quarter")) ymin <- min(df.m$value) ymax <- max(df.m$value) ggplot(data = df.m, aes(x = interaction(quarter,year), ymax = value, group = variable)) + geom_ribbon(aes(ymin = ymin), fill = "#83CAF5") + geom_line(aes(y = value), size = 1.5, colour = "#2C85BB") + coord_cartesian(ylim = c(ymin, ymax)) + scale_y_continuous(expand = c(0,0)) + scale_x_discrete(expand = c(0,0)) + theme_void()




Comments