如何使用 radial.plot / ggplot2 创建显示每月存在或不存在的圆形图
How to create a circular plot showing monthly presence or absence using radial.plot / ggplot2
我想在 ggplot2
中创建一个圆形的图形(与附件相似),轴上表示一年中的月份,因此圆周周围有十二个刻度线,一个内弧为某种颜色对应于 pa
= 1 的月份(其他选项是 pa
= 0)和另一个内弧(在第一个弧之外)对应于 sampled
= 1(其他选项是 sampled
= 0)。数据如下所示:
m
season pa month sampled occupancy
1 spring 1 3 1 present
2 spring 1 4 1 present
3 spring 1 5 1 present
4 summer 1 6 1 present
5 summer 1 7 1 present
6 summer 1 8 1 present
7 winter 0 12 1 absent
8 winter 0 1 0 absent
9 winter 0 2 0 absent
10 fall 1 9 1 present
11 fall 1 10 1 present
12 fall 1 11 1 present
我之前将 ggplot(m, aes(season, fill=season))
与 geom_bar(width=1)
和 coord_polar()
一起使用,但这只是给我一个饼图。
正在尝试:
radial.plot(m, radial.pos=c(1,2,3,4,5,6,7,8,9,10,11,12), labels="", rp.type="r",
line.col=8, lwd=3, add=TRUE)
并收到错误
plot.new has not been called yet
我想我误解了输入 radial.plot
需要什么,并且可能对我想要的输出使用了错误的函数。
我不确定如何将您的数据与上图相关联,但以下代码有帮助吗?
df <- data.frame(startdate = as.Date(c("2016-02-20", "2016-02-20", "2016-02-20")),
finishdate = as.Date(c("2016-04-30", "2016-04-30", "2016-06-10")),
y = c(4,5,8))
library(ggplot2)
ggplot(df) +
geom_rect(aes(xmin = startdate,
xmax = finishdate,
ymin = y-0.2,
ymax = y + 0.2)) +
geom_rect(aes(xmin = startdate - 5,
xmax = finishdate + 5,
ymin = y-0.05,
ymax = y + 0.05)) +
xlim(as.Date("2016-01-01"), as.Date("2016-12-31")) +
ylim(0,10) +
coord_polar()
ggplot2
中有两种不同的方法可以将提供的数据转换为极坐标图。这两种方法在 month
的处理方式上有所不同。
读取数据
library(data.table)
m <- fread("id season pa month sampled occupancy
1 spring 1 3 1 present
2 spring 1 4 1 present
3 spring 1 5 1 present
4 summer 1 6 1 present
5 summer 1 7 1 present
6 summer 1 8 1 present
7 winter 0 12 1 absent
8 winter 0 1 0 absent
9 winter 0 2 0 absent
10 fall 1 9 1 present
11 fall 1 10 1 present
12 fall 1 11 1 present")
准备数据
# reshape from wide to long (as preferred by ggplot)
ml <- melt(m, measure.vars = c("pa", "sampled"))
# create factors to ensure desired order
ml[, variable := factor(variable, levels = c("pa", "sampled"))]
变体 1:月份作为因素
ml[, fct_month := factor(month, levels = 1:12, labels = month.abb)]
library(ggplot2)
ggplot(ml[value != 0], aes(x = fct_month, y = variable,
group = variable, colour = variable)) +
geom_line(size = 5) +
scale_y_discrete(expand = c(0, 1), breaks = NULL) +
xlim(month.abb) +
coord_polar() +
theme_bw() + xlab(NULL) + ylab(NULL)
变体 2:以月为周期(包含开始和结束日期)
ml[, start := as.Date("2016-01-01") + base::months(month - 1L)]
# last day of month = begin of next month - 1 day
ml[, end := as.Date("2016-01-01") + base::months(month) - 1L]
library(ggplot2)
ggplot(ml, aes(x = start, xend = end, y = variable, yend = variable,
group = variable, colour = variable,
size = value)) +
geom_segment() +
scale_y_discrete(expand = c(0, 1), breaks = NULL) +
scale_x_date(date_breaks = "1 month", date_labels = month.abb,
limits = range(c(ml$start, ml$end))) +
scale_size(guide = FALSE) +
coord_polar() +
theme_bw() + xlab(NULL) + ylab(NULL)
变体 3:彩色背景
响应评论中的请求,此变体为每个变量单独着色背景,而环段保持黑色。因此,如果我们添加第三个变量,它将获得自己的彩色背景环。
ml[, start_year := as.Date("2016-01-01")]
# last day of month = begin of next month - 1 day
ml[, end_year := as.Date("2016-12-31")]
ml[, start := start_year + base::months(month - 1L)]
ml[, end := start_year + base::months(month) - 1L]
library(ggplot2)
bg_height <- 1.0
ggplot(ml) +
geom_rect(aes(xmin = start_year, xmax = end_year,
ymin = as.integer(variable) - 0.5 * bg_height,
ymax = as.integer(variable) + 0.5 * bg_height,
group = variable, fill = variable)
) +
geom_segment(aes(x = start, xend = end, y = variable, yend = variable,
group = variable, size = value),
colour = "gray20") +
scale_y_discrete(expand = c(0, 1), breaks = NULL) +
scale_x_date(date_breaks = "1 month", date_labels = month.abb,
limits = range(c(ml$start, ml$end))) +
scale_size(guide = FALSE) +
scale_fill_brewer(palette = "Blues") +
coord_polar() +
theme_bw() + xlab(NULL) + ylab(NULL)
我想在 ggplot2
中创建一个圆形的图形(与附件相似),轴上表示一年中的月份,因此圆周周围有十二个刻度线,一个内弧为某种颜色对应于 pa
= 1 的月份(其他选项是 pa
= 0)和另一个内弧(在第一个弧之外)对应于 sampled
= 1(其他选项是 sampled
= 0)。数据如下所示:
m
season pa month sampled occupancy
1 spring 1 3 1 present
2 spring 1 4 1 present
3 spring 1 5 1 present
4 summer 1 6 1 present
5 summer 1 7 1 present
6 summer 1 8 1 present
7 winter 0 12 1 absent
8 winter 0 1 0 absent
9 winter 0 2 0 absent
10 fall 1 9 1 present
11 fall 1 10 1 present
12 fall 1 11 1 present
我之前将 ggplot(m, aes(season, fill=season))
与 geom_bar(width=1)
和 coord_polar()
一起使用,但这只是给我一个饼图。
正在尝试:
radial.plot(m, radial.pos=c(1,2,3,4,5,6,7,8,9,10,11,12), labels="", rp.type="r",
line.col=8, lwd=3, add=TRUE)
并收到错误
plot.new has not been called yet
我想我误解了输入 radial.plot
需要什么,并且可能对我想要的输出使用了错误的函数。
我不确定如何将您的数据与上图相关联,但以下代码有帮助吗?
df <- data.frame(startdate = as.Date(c("2016-02-20", "2016-02-20", "2016-02-20")),
finishdate = as.Date(c("2016-04-30", "2016-04-30", "2016-06-10")),
y = c(4,5,8))
library(ggplot2)
ggplot(df) +
geom_rect(aes(xmin = startdate,
xmax = finishdate,
ymin = y-0.2,
ymax = y + 0.2)) +
geom_rect(aes(xmin = startdate - 5,
xmax = finishdate + 5,
ymin = y-0.05,
ymax = y + 0.05)) +
xlim(as.Date("2016-01-01"), as.Date("2016-12-31")) +
ylim(0,10) +
coord_polar()
ggplot2
中有两种不同的方法可以将提供的数据转换为极坐标图。这两种方法在 month
的处理方式上有所不同。
读取数据
library(data.table)
m <- fread("id season pa month sampled occupancy
1 spring 1 3 1 present
2 spring 1 4 1 present
3 spring 1 5 1 present
4 summer 1 6 1 present
5 summer 1 7 1 present
6 summer 1 8 1 present
7 winter 0 12 1 absent
8 winter 0 1 0 absent
9 winter 0 2 0 absent
10 fall 1 9 1 present
11 fall 1 10 1 present
12 fall 1 11 1 present")
准备数据
# reshape from wide to long (as preferred by ggplot)
ml <- melt(m, measure.vars = c("pa", "sampled"))
# create factors to ensure desired order
ml[, variable := factor(variable, levels = c("pa", "sampled"))]
变体 1:月份作为因素
ml[, fct_month := factor(month, levels = 1:12, labels = month.abb)]
library(ggplot2)
ggplot(ml[value != 0], aes(x = fct_month, y = variable,
group = variable, colour = variable)) +
geom_line(size = 5) +
scale_y_discrete(expand = c(0, 1), breaks = NULL) +
xlim(month.abb) +
coord_polar() +
theme_bw() + xlab(NULL) + ylab(NULL)
变体 2:以月为周期(包含开始和结束日期)
ml[, start := as.Date("2016-01-01") + base::months(month - 1L)]
# last day of month = begin of next month - 1 day
ml[, end := as.Date("2016-01-01") + base::months(month) - 1L]
library(ggplot2)
ggplot(ml, aes(x = start, xend = end, y = variable, yend = variable,
group = variable, colour = variable,
size = value)) +
geom_segment() +
scale_y_discrete(expand = c(0, 1), breaks = NULL) +
scale_x_date(date_breaks = "1 month", date_labels = month.abb,
limits = range(c(ml$start, ml$end))) +
scale_size(guide = FALSE) +
coord_polar() +
theme_bw() + xlab(NULL) + ylab(NULL)
变体 3:彩色背景
响应评论中的请求,此变体为每个变量单独着色背景,而环段保持黑色。因此,如果我们添加第三个变量,它将获得自己的彩色背景环。
ml[, start_year := as.Date("2016-01-01")]
# last day of month = begin of next month - 1 day
ml[, end_year := as.Date("2016-12-31")]
ml[, start := start_year + base::months(month - 1L)]
ml[, end := start_year + base::months(month) - 1L]
library(ggplot2)
bg_height <- 1.0
ggplot(ml) +
geom_rect(aes(xmin = start_year, xmax = end_year,
ymin = as.integer(variable) - 0.5 * bg_height,
ymax = as.integer(variable) + 0.5 * bg_height,
group = variable, fill = variable)
) +
geom_segment(aes(x = start, xend = end, y = variable, yend = variable,
group = variable, size = value),
colour = "gray20") +
scale_y_discrete(expand = c(0, 1), breaks = NULL) +
scale_x_date(date_breaks = "1 month", date_labels = month.abb,
limits = range(c(ml$start, ml$end))) +
scale_size(guide = FALSE) +
scale_fill_brewer(palette = "Blues") +
coord_polar() +
theme_bw() + xlab(NULL) + ylab(NULL)