我有一个与时间签名(0-100)相对应的角度数据(0-360)数据集,并且正在使用ggplot创建散点图。
ggplot(kfaf)+
geom_point(aes(time, angle, color = condition), size = 1.5)
我想做的是格式化y轴,以便0 = 360并将其从ymin = 270读取到ymax = 269,在功能上移动图形,以便0/360位于y轴的中间。找不到用于循环数据格式化轴的任何信息吗?
答案 0 :(得分:3)
如果我理解正确,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()
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()
该限制已设置为-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()
请注意,aes()
中的参数已交换。 x轴代表角度。