使用圆形数据在ggplot中格式化y轴

时间:2018-08-02 05:40:54

标签: r ggplot2

我有一个与时间签名(0-100)相对应的角度数据(0-360)数据集,并且正在使用ggplot创建散点图。

ggplot(kfaf)+
geom_point(aes(time, angle, color = condition), size = 1.5)

Example Graph

我想做的是格式化y轴,以便0 = 360并将其从ymin = 270读取到ymax = 269,在功能上移动图形,以便0/360位于y轴的中间。找不到用于循环数据格式化轴的任何信息吗?

1 个答案:

答案 0 :(得分:3)

第一次尝试(但不能完全满足OP的期望)

如果我理解正确,OP希望对数据进行绘制,以使y轴覆盖-270至+270度的范围。

这可以通过将数据加倍并移动angle值来实现:

# create dummy data
DF <- data.frame(angle = seq(0, 350, 10),
                 time = 1:36)

# doubling the data
library(dplyr)
DF2 <- DF %>% 
  mutate(angle = angle - 360) %>% 
  bind_rows(DF)

library(ggplot2)
ggplot(DF2) +
  aes(time, angle) +
  geom_point() +
  scale_y_continuous(breaks = seq(-360, 360, 60), limits = c(-270, 269)) +
  theme_bw()

enter image description here

第二次尝试

OP明确表示他不想在y轴上显示负值。这可以通过在调用scale_y_continuous()的中断之外设置标签来实现:

brks <- seq(-360, 360, 30)
lbls <- brks %% 360 %>% 
  as.character() %>% 
  replace(. == "0", "0/360")

library(ggplot2)
ggplot(DF2) +
  aes(time, angle) +
  geom_point() +
  scale_y_continuous(breaks = brks, labels = lbls, limits = c(-90, 269)) +
  theme_bw()

enter image description here

该限制已设置为-90至269度,并根据要求打印为270至269。

我特意选择将标签0度修改为"0/360",以指示圆形字符(并与下面极坐标中的图一致)。

不同的方法:极坐标

另一种可能性是在极坐标中绘制原始数据集DF

ggplot(DF) +
  aes(angle, time) +
  geom_point() +
  coord_polar() +
  scale_x_continuous(breaks = seq(0, 360, 60), limits = c(0, 360)) +
  theme_bw()

enter image description here

请注意,aes()中的参数已交换。 x轴代表角度。