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())


Sparkline1



Однако, поскольку я пытаюсь только 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 исчезает, как показано на следующем рисунке:



Спарклайн 2



Может ли кто - нибудь пролить свет на то, почему происходит такое поведение, и, возможно, помочь мне найти правильный способ решения этой проблемы?
506   1  

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

    Ничего не найдено.