四象限图,R 中的 4 个不同变量
Four quadrant plot, 4 different variables in R
我正在尝试在 R 中创建一个显示所有四个象限的坐标图。我需要的与我在典型的数据可视化中看到的任何东西都不一样。我附上了我需要实现的图片示例。
您会注意到没有负值,因为每个象限代表不同的变量组合,分数范围从 0 到 25。
我还没有找到我需要做什么的例子,所以我没有 'tried and failed' 代码,但是我有一个样本数据集,有宽格式和长格式,具体取决于解决方案的要求.我查看了 ggplot2 中的绘图,但我只能使用 2 个变量进行绘图。我不确定如何使用 geom_point.
之类的东西来表示所有 4 个变量
我一次只想显示一个人的坐标,所以我不想一次绘制数据集中每个人的分数。
非常感谢任何关于如何解决这个问题的想法!
示例数据:
df <- data.frame(
name = c("Donald", "Minnie", "Pluto"),
varA = c(3, 6, 15),
varB = c(4, 17, 6),
varC = c(26, 21, 13),
varD = c(10, 19, 19)
)
library(reshape2)
dflong <- melt(df, id.vars='name', measure.vars=c("varA", "varB", "varC", "varD"))
你可以用 tidyr、dplyr 和 ggplot2 试试这个:
情节可能需要一些调整才能使它看起来像你想要的那样。
如果您一次只想要一个图,只需在调用 ggplot 时过滤数据框即可。
library(dplyr)
library(tidyr)
library(ggplot2)
df <- data.frame(
name = c("Donald", "Minnie", "Pluto"),
varA = c(3, 6, 15),
varB = c(4, 17, 6),
varC = c(26, 21, 13),
varD = c(10, 19, 19)
)
df1 <-
df %>%
pivot_longer(-name, names_to = "var", names_prefix = "var", values_to = "val") %>%
group_by(name) %>%
mutate(quad = paste(var, lead(var, default = "A"), sep = "-"),
x = case_when(var == "A" ~ lead(val),
var == "B" ~ val,
var == "C" ~ -lead(val),
var == "D" ~ -val),
y = case_when(var == "A" ~ val,
var == "B" ~ -lead(val),
var == "C" ~ -val,
var == "D" ~ lag(val, n = 3)))
# helper value
val_max <- round(max(df1$val), -1)
# axis data
df_ax <- data.frame(ax = rep(c("x", "y"), each = 2),
x = c(-val_max, val_max, 0, 0),
y = c(0, 0, -val_max, val_max))
#labels for variables
labs <- data.frame(label = LETTERS[1:4],
val = val_max,
x = c( 0, val_max, 0, -val_max),
y = c( val_max, 0, -val_max, 0))
ggplot(df1, aes(x, y))+
geom_point(size = 3)+
facet_wrap(~name)+
geom_line(data = df_ax, aes(x, y, group = ax))+
geom_text(data = labs, aes(x, y, label = label),
nudge_x = c(0, 2, 0, -2),
nudge_y = c(2, 0, -2, 0),
size = 4)+
geom_text(data = labs, aes(x, y, label = val),
nudge_x = c( -2, -2, -2, 2),
nudge_y = c( -2, -2, 2, -2),
size = 3)+
geom_text(aes(x = 2, y = 2, label = 0), size = 3, check_overlap = TRUE)+
coord_fixed(xlim = c(-val_max - 2, val_max + 2),
ylim = c(-val_max -2 , val_max + 2))+
labs(x = NULL,
y = NULL)+
theme(panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank())
由 reprex package (v2.0.0)
于 2021-08-24 创建
我正在尝试在 R 中创建一个显示所有四个象限的坐标图。我需要的与我在典型的数据可视化中看到的任何东西都不一样。我附上了我需要实现的图片示例。
您会注意到没有负值,因为每个象限代表不同的变量组合,分数范围从 0 到 25。
我还没有找到我需要做什么的例子,所以我没有 'tried and failed' 代码,但是我有一个样本数据集,有宽格式和长格式,具体取决于解决方案的要求.我查看了 ggplot2 中的绘图,但我只能使用 2 个变量进行绘图。我不确定如何使用 geom_point.
之类的东西来表示所有 4 个变量我一次只想显示一个人的坐标,所以我不想一次绘制数据集中每个人的分数。
非常感谢任何关于如何解决这个问题的想法!
示例数据:
df <- data.frame(
name = c("Donald", "Minnie", "Pluto"),
varA = c(3, 6, 15),
varB = c(4, 17, 6),
varC = c(26, 21, 13),
varD = c(10, 19, 19)
)
library(reshape2)
dflong <- melt(df, id.vars='name', measure.vars=c("varA", "varB", "varC", "varD"))
你可以用 tidyr、dplyr 和 ggplot2 试试这个:
情节可能需要一些调整才能使它看起来像你想要的那样。
如果您一次只想要一个图,只需在调用 ggplot 时过滤数据框即可。
library(dplyr)
library(tidyr)
library(ggplot2)
df <- data.frame(
name = c("Donald", "Minnie", "Pluto"),
varA = c(3, 6, 15),
varB = c(4, 17, 6),
varC = c(26, 21, 13),
varD = c(10, 19, 19)
)
df1 <-
df %>%
pivot_longer(-name, names_to = "var", names_prefix = "var", values_to = "val") %>%
group_by(name) %>%
mutate(quad = paste(var, lead(var, default = "A"), sep = "-"),
x = case_when(var == "A" ~ lead(val),
var == "B" ~ val,
var == "C" ~ -lead(val),
var == "D" ~ -val),
y = case_when(var == "A" ~ val,
var == "B" ~ -lead(val),
var == "C" ~ -val,
var == "D" ~ lag(val, n = 3)))
# helper value
val_max <- round(max(df1$val), -1)
# axis data
df_ax <- data.frame(ax = rep(c("x", "y"), each = 2),
x = c(-val_max, val_max, 0, 0),
y = c(0, 0, -val_max, val_max))
#labels for variables
labs <- data.frame(label = LETTERS[1:4],
val = val_max,
x = c( 0, val_max, 0, -val_max),
y = c( val_max, 0, -val_max, 0))
ggplot(df1, aes(x, y))+
geom_point(size = 3)+
facet_wrap(~name)+
geom_line(data = df_ax, aes(x, y, group = ax))+
geom_text(data = labs, aes(x, y, label = label),
nudge_x = c(0, 2, 0, -2),
nudge_y = c(2, 0, -2, 0),
size = 4)+
geom_text(data = labs, aes(x, y, label = val),
nudge_x = c( -2, -2, -2, 2),
nudge_y = c( -2, -2, 2, -2),
size = 3)+
geom_text(aes(x = 2, y = 2, label = 0), size = 3, check_overlap = TRUE)+
coord_fixed(xlim = c(-val_max - 2, val_max + 2),
ylim = c(-val_max -2 , val_max + 2))+
labs(x = NULL,
y = NULL)+
theme(panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank())
由 reprex package (v2.0.0)
于 2021-08-24 创建