我有一个名为Lexisres的数据框,其中包括队列和期间的出生,结婚和死亡计数。
Lexisres <- structure(list(Cohort = c(1760L, 1760L, 1760L, 1760L, 1760L,
1760L, 1770L, 1770L, 1770L, 1770L, 1770L, 1770L, 1780L, 1780L,
1780L, 1780L, 1780L, 1780L, 1780L, 1780L, 1790L, 1790L, 1790L,
1790L, 1790L, 1790L, 1790L, 1790L, 1790L, 1800L, 1800L, 1800L,
1800L, 1800L, 1800L, 1800L, 1800L, 1800L, 1810L, 1810L, 1810L,
1810L, 1810L, 1810L, 1810L, 1810L, 1820L, 1820L, 1820L, 1820L,
1820L, 1820L, 1820L, 1830L, 1830L, 1830L, 1830L, 1830L, 1830L,
1840L, 1840L, 1840L, 1840L, 1840L, 1850L, 1850L, 1850L, 1850L,
1860L, 1860L, 1860L, 1870L, 1870L, 1870L, 1880L), Births = c(0L,
0L, 0L, 0L, 0L, 0L, 8L, 8L, 8L, 8L, 8L, 8L, 69L, 69L, 69L, 69L,
69L, 69L, 69L, 69L, 331L, 331L, 331L, 331L, 331L, 331L, 331L,
331L, 331L, 472L, 472L, 472L, 472L, 472L, 472L, 472L, 472L, 472L,
508L, 508L, 508L, 508L, 508L, 508L, 508L, 508L, 469L, 469L, 469L,
469L, 469L, 469L, 469L, 550L, 550L, 550L, 550L, 550L, 550L, 595L,
595L, 595L, 595L, 595L, 656L, 656L, 656L, 656L, 656L, 656L, 656L,
361L, 361L, 361L, 1L), Period = c(1810L, 1820L, 1830L, 1840L,
1850L, 1860L, 1810L, 1820L, 1830L, 1840L, 1850L, 1860L, 1810L,
1820L, 1830L, 1840L, 1850L, 1860L, 1870L, 1880L, 1810L, 1820L,
1830L, 1840L, 1850L, 1860L, 1870L, 1880L, 1890L, 1810L, 1820L,
1830L, 1840L, 1850L, 1860L, 1870L, 1880L, 1890L, 1820L, 1830L,
1840L, 1850L, 1860L, 1870L, 1880L, 1890L, 1830L, 1840L, 1850L,
1860L, 1870L, 1880L, 1890L, 1840L, 1850L, 1860L, 1870L, 1880L,
1890L, 1850L, 1860L, 1870L, 1880L, 1890L, 1860L, 1870L, 1880L,
1890L, 1870L, 1880L, 1890L, 1880L, 1890L, 1890L, 1890L), Marriages = c(0L,
0L, 0L, 0L, 0L, 0L, 3L, 5L, 0L, 0L, 0L, 0L, 32L, 34L, 3L, 0L,
0L, 0L, 0L, 0L, 67L, 236L, 24L, 4L, 0L, 0L, 0L, 0L, 0L, 1L, 160L,
272L, 35L, 4L, 0L, 0L, 0L, 0L, 1L, 207L, 251L, 45L, 4L, 0L, 0L,
0L, 0L, 137L, 296L, 34L, 2L, 0L, 0L, 1L, 184L, 330L, 35L, 0L,
0L, 2L, 255L, 289L, 49L, 0L, 0L, 174L, 429L, 53L, 0L, 232L, 538L,
0L, 0L, 361L, 1L), Deaths = c(5L, 12L, 13L, 17L, 5L, 3L, 13L,
25L, 24L, 44L, 33L, 6L, 13L, 21L, 28L, 39L, 40L, 44L, 9L, 1L,
22L, 37L, 71L, 65L, 61L, 112L, 96L, 30L, 1L, 1L, 45L, 95L, 69L,
81L, 117L, 130L, 121L, 25L, 5L, 63L, 73L, 80L, 82L, 114L, 144L,
106L, 5L, 67L, 46L, 69L, 91L, 108L, 143L, 2L, 48L, 67L, 80L,
89L, 120L, 2L, 54L, 83L, 79L, 82L, 5L, 56L, 62L, 99L, 3L, 43L,
72L, 1L, 35L, 0L, 1L)), .Names = c("Cohort", "Births", "Period",
"Marriages", "Deaths"), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -75L), spec = structure(list(cols = structure(list(
Cohort = structure(list(), class = c("collector_integer",
"collector")), Births = structure(list(), class = c("collector_integer",
"collector")), Period = structure(list(), class = c("collector_integer",
"collector")), Marriages = structure(list(), class = c("collector_integer",
"collector")), Deaths = structure(list(), class = c("collector_integer",
"collector"))), .Names = c("Cohort", "Births", "Period",
"Marriages", "Deaths")), default = structure(list(), class = c("collector_guess",
"collector"))), .Names = c("cols", "default"), class = "col_spec"))
现在,我想通过y轴上的同类群组,通过x轴上的句点以及通过将所有三个事件计数分别写为一个数据点来绘制它。换句话说,我想在这里填写这个简单的情节
plot(Lexisres$Period, Lexisres$Cohort)
在每个点都有各自的出生,婚姻和死亡计数-逐字地写下来。
我该怎么做?
答案 0 :(得分:0)
# Aggregating data
library(dplyr)
df <- df %>% group_by(Cohort, Period) %>% summarise(Births = sum(Births), Marriages = sum(Marriages), Deaths = sum(Deaths))
# Adding square and text coordinates
df$xmin <- df$Cohort
df$xmax <- df$Cohort+10
df$ymin <- df$Period
df$ymax <- df$Period+10
df$x_center <- (df$xmax+df$xmin)/2
df$y_center <- (df$ymax+df$ymin)/2
# Plotting five rectangles with lables
ggplot() +
scale_x_continuous(name="Cohort") +
scale_y_continuous(name="Period") +
geom_rect(data=df, mapping=aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), color="blue", alpha=0) +
geom_text(data=df, aes(x_center, y_center, label=paste0("Births: ", Births, "\n", "Marriages: ", Marriages,"\n", "Deaths: ", Deaths)), size=2.5) +
theme_bw()
应要求粘贴变量而不是求和。
df <- df %>% group_by(Cohort, Period) %>% summarise(Births = paste(Births, collapse =","), Marriages = paste(Marriages, collapse =","), Deaths = paste(Deaths, collapse =","))
使用的数据:
# Placing data in dataframe
df <- structure(list(Cohort = c(1760L, 1760L, 1760L, 1760L, 1760L,
1760L, 1770L, 1770L, 1770L, 1770L, 1770L, 1770L, 1780L, 1780L,
1780L, 1780L, 1780L, 1780L, 1780L, 1780L, 1790L, 1790L, 1790L,
1790L, 1790L, 1790L, 1790L, 1790L, 1790L, 1800L, 1800L, 1800L,
1800L, 1800L, 1800L, 1800L, 1800L, 1800L, 1810L, 1810L, 1810L,
1810L, 1810L, 1810L, 1810L, 1810L, 1820L, 1820L, 1820L, 1820L,
1820L, 1820L, 1820L, 1830L, 1830L, 1830L, 1830L, 1830L, 1830L,
1840L, 1840L, 1840L, 1840L, 1840L, 1850L, 1850L, 1850L, 1850L,
1860L, 1860L, 1860L, 1870L, 1870L, 1870L, 1880L), Births = c(0L,
0L, 0L, 0L, 0L, 0L, 8L, 8L, 8L, 8L, 8L, 8L, 69L, 69L, 69L, 69L,
69L, 69L, 69L, 69L, 331L, 331L, 331L, 331L, 331L, 331L, 331L,
331L, 331L, 472L, 472L, 472L, 472L, 472L, 472L, 472L, 472L, 472L,
508L, 508L, 508L, 508L, 508L, 508L, 508L, 508L, 469L, 469L, 469L,
469L, 469L, 469L, 469L, 550L, 550L, 550L, 550L, 550L, 550L, 595L,
595L, 595L, 595L, 595L, 656L, 656L, 656L, 656L, 656L, 656L, 656L,
361L, 361L, 361L, 1L), Period = c(1810L, 1820L, 1830L, 1840L,
1850L, 1860L, 1810L, 1820L, 1830L, 1840L, 1850L, 1860L, 1810L,
1820L, 1830L, 1840L, 1850L, 1860L, 1870L, 1880L, 1810L, 1820L,
1830L, 1840L, 1850L, 1860L, 1870L, 1880L, 1890L, 1810L, 1820L,
1830L, 1840L, 1850L, 1860L, 1870L, 1880L, 1890L, 1820L, 1830L,
1840L, 1850L, 1860L, 1870L, 1880L, 1890L, 1830L, 1840L, 1850L,
1860L, 1870L, 1880L, 1890L, 1840L, 1850L, 1860L, 1870L, 1880L,
1890L, 1850L, 1860L, 1870L, 1880L, 1890L, 1860L, 1870L, 1880L,
1890L, 1870L, 1880L, 1890L, 1880L, 1890L, 1890L, 1890L), Marriages = c(0L,
0L, 0L, 0L, 0L, 0L, 3L, 5L, 0L, 0L, 0L, 0L, 32L, 34L, 3L, 0L,
0L, 0L, 0L, 0L, 67L, 236L, 24L, 4L, 0L, 0L, 0L, 0L, 0L, 1L, 160L,
272L, 35L, 4L, 0L, 0L, 0L, 0L, 1L, 207L, 251L, 45L, 4L, 0L, 0L,
0L, 0L, 137L, 296L, 34L, 2L, 0L, 0L, 1L, 184L, 330L, 35L, 0L,
0L, 2L, 255L, 289L, 49L, 0L, 0L, 174L, 429L, 53L, 0L, 232L, 538L,
0L, 0L, 361L, 1L), Deaths = c(5L, 12L, 13L, 17L, 5L, 3L, 13L,
25L, 24L, 44L, 33L, 6L, 13L, 21L, 28L, 39L, 40L, 44L, 9L, 1L,
22L, 37L, 71L, 65L, 61L, 112L, 96L, 30L, 1L, 1L, 45L, 95L, 69L,
81L, 117L, 130L, 121L, 25L, 5L, 63L, 73L, 80L, 82L, 114L, 144L,
106L, 5L, 67L, 46L, 69L, 91L, 108L, 143L, 2L, 48L, 67L, 80L,
89L, 120L, 2L, 54L, 83L, 79L, 82L, 5L, 56L, 62L, 99L, 3L, 43L,
72L, 1L, 35L, 0L, 1L)), .Names = c("Cohort", "Births", "Period",
"Marriages", "Deaths"), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -75L), spec = structure(list(cols = structure(list(
Cohort = structure(list(), class = c("collector_integer",
"collector")), Births = structure(list(), class = c("collector_integer",
"collector")), Period = structure(list(), class = c("collector_integer",
"collector")), Marriages = structure(list(), class = c("collector_integer",
"collector")), Deaths = structure(list(), class = c("collector_integer",
"collector"))), .Names = c("Cohort", "Births", "Period",
"Marriages", "Deaths")), default = structure(list(), class = c("collector_guess",
"collector"))), .Names = c("cols", "default"), class = "col_spec"))
答案 1 :(得分:0)
我建议对此图使用ggplot2。
请参阅以下查询:
ggplot(data = Lexisres) +
geom_text(aes(x = Period,
y = Cohort,
label = paste("B: ", Births,
"\nD: ", Deaths,
"\nM: ", Marriages)),
size = 1.5)
答案 2 :(得分:0)
plot()
按照问题的要求显示:
更新的解决方案,以汇总出生,婚姻,死亡(因为未预先汇总原始数据)
# Aggregate data: sum all columns, group by Cohort+Period
df <- aggregate(. ~ Cohort+Period, df, sum)
tx=0.8 #variable to set the text scale for our labels
# Variable to tweak the x axis length on either side (by an extra half distance)
extend_x <- diff(sort(unique(df$Period))[1:2])/2 # (difference of first two sorted(unique(x)) ) / 2
# Start a new plot
plot.new()
# Set up x and y limits manually so we can control where they start & end
plot.window(xlim = c( min(df$Period)-extend_x, max(df$Period)+extend_x), # x axis limits
ylim = range(df$Cohort), # y axis limits
xaxs = "i") # xaxs = "i" sets x-axis to internal = match the original data range (avoids default, xaxs="r", that adds 4% to either side)
# Put text at each x, y point
text( x=df$Period, y=df$Cohort, paste0(df$Births,":B"), cex=tx, adj=c( 1.1, -0.1)) # 1=right justified, 0=align top (tweak by decimals)
text( x=df$Period, y=df$Cohort, paste0("M:",df$Marriages), cex=tx, adj=c(-0.1, 0.4)) # 0=left justified, 0.5=align middle (tweak by decimals)
text( x=df$Period, y=df$Cohort, paste0(df$Deaths,":D"), cex=tx, adj=c( 1.1, 1.4)) # 1=right justified, 1=align bottom (tweak by decimals)
# Axis labels
axis(1, at=unique(df$Period)) # x-axis labels at all marks
axis(2, at=unique(df$Cohort),las=1) # y-axis labels at all marks, `las=1` rotates the label to be horizontal
# Add x & y axis labels
title(xlab="Period", ylab="Cohort")
# Add grid lines
grid(length(unique(df$Period))+0,length(unique(df$Cohort))+0)
box() # draw a box around the plot