r - 单独缩放 ggplot 极坐标图中的轴?

标签 r ggplot2 polar-coordinates

我的数据集是

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)

enter image description here

编辑:如果要连接第一个和最后一个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")

joined circle

如果你希望极坐标下的线是直的,答案 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")

pentagon

关于r - 单独缩放 ggplot 极坐标图中的轴?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46287409/

相关文章:

r - R中下上限的快速索引

r - 将重复测量混合模型公式从 SAS 转换为 R

r - 如何以整洁的方式重新排序因子水平?

r - 如何从单个数字向量制作具有多个方面的 ggplot2 散点图?

image - Matlab:极坐标灰度图

R计算Dataframe中每列的值

R-通过替换共同引用值来组合两个数据帧

r - 带有 geom_tile 的情节中的多个图例

java - 将地球上由 4 个纬度经度坐标给出的区域分割成等距网格?

javascript - 在 HTML5 Canvas 中创建粒子以遵循圆形路径