我正在尝试复制一个图形,类似于在加州学校责任仪表板上使用的R闪亮。为了说明这个例子,请考虑以下数据框架:
student <- c("1234", "4321", "5678", "8765")
schools <- c("ABC", "ABC", "XYZ", "XYZ")
DFS_20 <- c(-34.2, -1.5, 2.8, 8.9)
DFS_21 <- c(-13.5, 27.8, 5.4, 3.9)
school_data <- data.frame("student_id" = student, "school_id" = schools, "DFS_2020" = DFS_20, "DFS_2021" = DFS_21, "Delta_DFS" = DFS_21 - DFS_20)我想以某种方式在这样的网格上绘制这些数据:

如果数据点为x,y= 4,1(左下角为(0,0)代表学生1234,因为他们的DFS_2021分数很低(-13.5),但他们的年增长率显著增加(20.7);在x,y= 4,3中的一个点,因为学生4321的DFS_2021分数很高(27.8),他们的年增长率显著增加(29.3)等等。我想要一个气泡图,这样点的大小相对于每个单元格内的数据点的数量增加,但是我不知道从哪里开始创建画布(用颜色)来覆盖数据点。我知道我可以把他们的分数转换成点阵点,在5x5网格上绘制,但是用颜色绘制网格是我的技能之外的。
发布于 2021-03-30 19:02:55
简而言之,您可以将valus重新编码为各种因素,并在您的数据集中计算每个组合。使用这个新表(包含当前的DFS级别、DFS差异级别和每个类别中的学生数量),您可以轻松地创建一个点图。
要对点进行颜色编码,您可能需要在表中添加一个带有颜色的列。因此,我创建了一个元颜色表(所有DFS组合和相关的颜色)并加入了这些表。
码
# load packages
library(tidyverse)
# create color table
df_col <- crossing(DFS_current_status = factor(c("very low", "low", "medium",
"high", "very high"),
levels = c("very high", "high",
"medium", "low", "very low")),
DFS_diff = factor(c("declined significantly", "declined",
"maintained" ,"increased",
"increased significantly"),
levels = c("declined significantly",
"declined", "maintained",
"increased", "increased significantly"))) %>%
add_column(color = c("green", "green", "blue", "blue","blue",
"green", "green", "green", "green", "blue",
"yellow", "yellow", "yellow", "green", "green",
"orange", "orange", "orange", "yellow", "yellow",
"red", "red", "red", "orange", "orange"))
# transform data
df <- school_data %>%
mutate(DFS_current_status = case_when(DFS_2021 >= 45 ~ "very high",
between(DFS_2021, 10, 44.9) ~ "high",
between(DFS_2021, -5, 9.9) ~ "medium",
between(DFS_2021, -70, -5.1) ~ "low",
DFS_2021 < -70 ~ "very low",
TRUE ~ NA_character_),
DFS_diff = case_when(Delta_DFS < -15 ~ "declined significantly",
between(Delta_DFS, -15, -3) ~ "declined",
between(Delta_DFS, -2.9, 2.9) ~ "maintained",
between(Delta_DFS, 3, 14.9) ~ "increased",
Delta_DFS >= 15 ~ "increased significantly",
TRUE ~ NA_character_)) %>%
count(DFS_current_status, DFS_diff) %>%
left_join(df_col) %>%
mutate(DFS_current_status = factor(DFS_current_status,
levels = rev(c("very high", "high",
"medium", "low", "very low"))),
DFS_diff = factor(DFS_diff,
levels = c("declined significantly",
"declined", "maintained",
"increased", "increased significantly")))
# create plot
p <- ggplot(df) +
geom_point(aes(x = DFS_diff,
y = DFS_current_status,
size = n,
color = color)) +
scale_y_discrete(drop = F) +
scale_x_discrete(drop = F, position = "top") +
scale_color_identity()
# display plot in plotly
ggplotly(p) %>%
layout(xaxis = list(side ="top")) 图

编辑:注释-给网格加上颜色而不是点
df_col %>%
ggplot() +
geom_raster(aes(x = DFS_diff,
y = rev(DFS_current_status),
fill= color)) +
scale_fill_identity() +
scale_x_discrete(position = "top") +
geom_point(data = df, aes(x = DFS_diff,
y = DFS_current_status,
size = n))

https://stackoverflow.com/questions/66864199
复制相似问题