我的数据集是
cvar setting value
var1 min 20
var2 min 5
var3 min 140
var4 min 40
var5 min 600
var1 max 60
var2 max 15
var3 max 180
var4 max 80
var5 max 1200
var1 center 40
var2 center 10
var3 center 160
var4 center 60
var5 center 900
var1 upper 57
var2 upper 13
var3 upper 162
var4 upper 79
var5 upper 1250
var1 lower 20
var2 lower 6
var3 lower 153
var4 lower 40
var5 lower 620
与
library(ggplot2)
ggplot(data=daten, aes(x=factor(cvar), y=value, group = setting, color = setting)) +
geom_line() +
coord_polar()
我得到了一些接近我正在寻找的东西。 我希望每个轴单独缩放,从 0 到各自的最大值,或者每个轴都有单独的最小值和最大值。
有人可以给我提示吗? 提前致谢 霍尔格
最佳答案
如果您的意思是希望对每个 cvar
的值范围进行缩放,您可以在将数据帧传递给 ggplot 之前执行此操作:
library(dplyr)
daten2 <- daten %>%
group_by(cvar) %>%
# option 1: this scales the values at each varX from 0 to max
mutate(value.scaled = value / max(value)) %>%
# option 2: this scales the values at each varX from min to max
mutate(value.scaled2 = (value - min(value)) / (max(value) - min(value))) %>%
ungroup() %>%
mutate(setting = factor(setting,
levels = c("max", "upper", "center", "lower", "min")))
p1 <- ggplot(data = daten2,
aes(x = factor(cvar), y = value.scaled, group = setting, color = setting)) +
geom_line(size = 1) +
expand_limits(y = 0) +
coord_polar() +
ggtitle("Scaled value range from 0 to max")
p2 <- ggplot(data = daten2,
aes(x = factor(cvar), y = value.scaled2, group = setting, color = setting)) +
geom_line(size = 1) +
coord_polar() +
ggtitle("Scaled value range from min to max")
gridExtra::grid.arrange(p1, p2, nrow = 1)
编辑:如果要连接第一个和最后一个cvar
值,可以在x轴末尾重复var1,并显式设置 Expand = c(0, 0)
以便最后一个 cvar
值与极坐标下的第一个值连接:
# I'm only demonstrating with one of the two cases above,
# but the same principle applies in either case.
ggplot(data = daten2 %>%
filter(cvar == "var1") %>% # make a copy of the dataset with only var1
mutate(cvar = "var6") %>%
rbind(daten2), # append the copy to the full dataset
aes(x = factor(cvar), y = value.scaled2, group = setting, color = setting)) +
geom_line(size = 1) +
scale_x_discrete(expand = c(0, 0),
breaks = c("var1", "var2", "var3", "var4", "var5")) +
coord_polar() +
ggtitle("Scaled value range from min to max")
如果你希望极坐标下的线是直的,答案 here描述了一种替代方案:
coord_radar <- function (theta = "x", start = 0, direction = 1) {
theta <- match.arg(theta, c("x", "y"))
r <- if (theta == "x") "y" else "x"
ggproto("CordRadar", CoordPolar, theta = theta, r = r, start = start,
direction = sign(direction),
is_linear = function(coord) TRUE)
}
ggplot(data = daten2 %>%
filter(cvar == "var1") %>%
mutate(cvar = "var6") %>%
rbind(daten2),
aes(x = factor(cvar), y = value.scaled2, group = setting, color = setting)) +
geom_line(size = 1) +
scale_x_discrete(expand = c(0, 0),
breaks = c("var1", "var2", "var3", "var4", "var5")) +
coord_radar() +
ggtitle("Scaled value range from min to max")
关于r - 单独缩放 ggplot 极坐标图中的轴?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46287409/