使用带状图为线图制作背景
Making a Background for a Line Plot with Ribbon Plot
[编辑了标题并划掉了主要问题的次要问题]
我想要的是一个带点的简单线图(简单),背景由层级数据框创建(对我来说很难)
我正在尝试重新创建的示例
代码
# libraries used
library(dplyr)
library(ggvis)
library(magrittr)
# create example data frame
months <- c("oct", "nov", "dec", "jan", "feb", "march", "april", "may",
"june")
#months <- 1:9
tier3low <- (rep(150, 9))
tier3high <- c(157, 158, 162, 162, 166, 167, 169, 172, 172)
tier2high <- c(164, 166, 170, 171, 176, 178, 180, 182, 182)
tier1high <- rep(185, 9)
tier_range <- seq(from = 150, to = 185, by = 4)
scores <- c(156, 163, 162, 172, 173, 174, 175, 177, 183)
df <- data.frame(months, tier3low , tier3high, tier2high, tier1high,
tier_range, scores)
# make levels
levels(df$months) <- c("oct", "nov", "dec", "jan", "feb", "march", "april",
"may", "june")
# what I have tried
df %>%
group_by(months) %>%
ggvis(x = ~months, y = ~tier_range) %>%
layer_ribbons(y = ~tier3low, y2 = ~tier3high, stroke := "red") %>%
layer_ribbons(y = ~tier3high, y2 = ~tier2high, stroke := "yellow") %>%
layer_ribbons(y = ~tier2high, y2 = ~tier1high, stroke := "green") %>%
layer_lines(y = ~scores) %>%
layer_points(y = ~scores)
产生这个
根据评论的要求编辑了这些问题
1.地块没有相互填充
2.实际的线没有打印在情节上
3. 数据被重新排列并且在错误的月份
主要问题
情节之间没有填充,我不明白为什么这不是正确的解决方案。您认为什么是实现此目标的更好方法。
其实你并不遥远。您需要修复三件事:
您需要使用填充而不是描边来确定色带的颜色
数据框需要按月排序,因为色带是从左到右绘制的
您在第一次调用 ggvis 时对 y 的定义过多,我认为这很混乱,因为您必须在每一层中再次单独定义 y(可能对您没有伤害,但肯定让我感到困惑)。
这是我认为您需要的:
df %>%
arrange(months) %>%
ggvis(x = ~months) %>%
layer_ribbons(y = ~tier3low, y2 = ~tier3high, fill := "red") %>%
layer_ribbons(y = ~tier3high, y2 = ~tier2high, fill := "yellow") %>%
layer_ribbons(y = ~tier2high, y2 = ~tier1high, fill := "green") %>%
layer_lines(y = ~scores) %>%
layer_points(y = ~scores)
[编辑了标题并划掉了主要问题的次要问题]
我想要的是一个带点的简单线图(简单),背景由层级数据框创建(对我来说很难)
我正在尝试重新创建的示例
# libraries used
library(dplyr)
library(ggvis)
library(magrittr)
# create example data frame
months <- c("oct", "nov", "dec", "jan", "feb", "march", "april", "may",
"june")
#months <- 1:9
tier3low <- (rep(150, 9))
tier3high <- c(157, 158, 162, 162, 166, 167, 169, 172, 172)
tier2high <- c(164, 166, 170, 171, 176, 178, 180, 182, 182)
tier1high <- rep(185, 9)
tier_range <- seq(from = 150, to = 185, by = 4)
scores <- c(156, 163, 162, 172, 173, 174, 175, 177, 183)
df <- data.frame(months, tier3low , tier3high, tier2high, tier1high,
tier_range, scores)
# make levels
levels(df$months) <- c("oct", "nov", "dec", "jan", "feb", "march", "april",
"may", "june")
# what I have tried
df %>%
group_by(months) %>%
ggvis(x = ~months, y = ~tier_range) %>%
layer_ribbons(y = ~tier3low, y2 = ~tier3high, stroke := "red") %>%
layer_ribbons(y = ~tier3high, y2 = ~tier2high, stroke := "yellow") %>%
layer_ribbons(y = ~tier2high, y2 = ~tier1high, stroke := "green") %>%
layer_lines(y = ~scores) %>%
layer_points(y = ~scores)
产生这个
根据评论的要求编辑了这些问题
1.地块没有相互填充
2.实际的线没有打印在情节上
3. 数据被重新排列并且在错误的月份
主要问题
情节之间没有填充,我不明白为什么这不是正确的解决方案。您认为什么是实现此目标的更好方法。
其实你并不遥远。您需要修复三件事:
您需要使用填充而不是描边来确定色带的颜色
数据框需要按月排序,因为色带是从左到右绘制的
您在第一次调用 ggvis 时对 y 的定义过多,我认为这很混乱,因为您必须在每一层中再次单独定义 y(可能对您没有伤害,但肯定让我感到困惑)。
这是我认为您需要的:
df %>%
arrange(months) %>%
ggvis(x = ~months) %>%
layer_ribbons(y = ~tier3low, y2 = ~tier3high, fill := "red") %>%
layer_ribbons(y = ~tier3high, y2 = ~tier2high, fill := "yellow") %>%
layer_ribbons(y = ~tier2high, y2 = ~tier1high, fill := "green") %>%
layer_lines(y = ~scores) %>%
layer_points(y = ~scores)