首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的5x5气泡图

R中的5x5气泡图
EN

Stack Overflow用户
提问于 2021-03-30 02:57:51
回答 1查看 119关注 0票数 0

我正在尝试复制一个图形,类似于在加州学校责任仪表板上使用的R闪亮。为了说明这个例子,请考虑以下数据框架:

代码语言:javascript
复制
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网格上绘制,但是用颜色绘制网格是我的技能之外的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-30 19:02:55

简而言之,您可以将valus重新编码为各种因素,并在您的数据集中计算每个组合。使用这个新表(包含当前的DFS级别、DFS差异级别和每个类别中的学生数量),您可以轻松地创建一个点图。

要对点进行颜色编码,您可能需要在表中添加一个带有颜色的列。因此,我创建了一个元颜色表(所有DFS组合和相关的颜色)并加入了这些表。

代码语言:javascript
复制
# 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")) 

编辑:注释-给网格加上颜色而不是点

代码语言:javascript
复制
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))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66864199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档