Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在ggplot上的精确位置放置插图并设置geom_段的颜色?_R_Ggplot2_Colors_Insets_Geom Segment - Fatal编程技术网

R 如何在ggplot上的精确位置放置插图并设置geom_段的颜色?

R 如何在ggplot上的精确位置放置插图并设置geom_段的颜色?,r,ggplot2,colors,insets,geom-segment,R,Ggplot2,Colors,Insets,Geom Segment,我正在为黄土的工作原理制作一幅插图。我的两个问题在问题的最后。首先,设置: library(tidyverse) data(melanoma, package = "lattice") mela <- as_tibble(melanoma) tric = function(x) if_else(abs(x) < 1, (1 - abs(x)^3)^3, 0) scl = function(x) (x - min(x))/(max(x) - min(x)) mela

我正在为黄土的工作原理制作一幅插图。我的两个问题在问题的最后。首先,设置:

library(tidyverse)
data(melanoma, package = "lattice")
mela <- as_tibble(melanoma)
tric = function(x) if_else(abs(x) < 1, (1 - abs(x)^3)^3, 0)
scl = function(x) (x - min(x))/(max(x) - min(x))
mela1 <- mela %>%
  slice(1:9) %>%
  mutate(dist = abs(year - year[5]),
         scaled = scl(dist),
         weight = tric(scaled)
  )
mod1 <- lm(incidence ~ year, data = mela1, weights = weight) %>%
  augment(., mela1)
mela2 <- mela %>%
  slice(10:18) %>%
  mutate(dist = abs(year - year[5]),
         scaled = scl(dist),
         weight = tric(scaled)
  )
mod2 <- lm(incidence ~ year, data = mela2, weights = weight) %>%
  augment(., mela2)
mela3 <- mela %>%
  slice(19:27) %>%
  mutate(dist = abs(year - year[5]),
         scaled = scl(dist),
         weight = tric(scaled)
  )
mod3 <- lm(incidence ~ year, data = mela3, weights = weight) %>%
  augment(., mela3)
mela4 <- mela %>%
  slice(28:37) %>%
  mutate(dist = abs(year - year[5]),
         scaled = scl(dist),
         weight = tric(scaled)
  )
mod4 <- lm(incidence ~ year, data = mela4, weights = weight) %>%
  augment(., mela4)
库(tidyverse)
数据(黑色素瘤,package=“lattice”)
梅拉%
变异(dist=abs(年份[5]),
标度=scl(距离),
重量=重量(按比例)
)
mod1%
扩充(,mela1)
mela2%
切片(10:18)%>%
变异(dist=abs(年份[5]),
标度=scl(距离),
重量=重量(按比例)
)
mod2%
扩充(,mela2)
mela3%
切片(19:27)%>%
变异(dist=abs(年份[5]),
标度=scl(距离),
重量=重量(按比例)
)
mod3%
扩充(,mela3)
mela4%
切片(28:37)%>%
变异(dist=abs(年份[5]),
标度=scl(距离),
重量=重量(按比例)
)
mod4%
扩充(,mela4)
主要情节:

col <- rainbow_hcl(start = 12, 4, l = 20)
colB <- rainbow_hcl(start = 12, 4, l = 100)
main <- ggplot(data = mela, aes(x = year, y = incidence)) +
# segment 1
  geom_segment(
    aes(x = 1936, xend = 1944, y = 2.115717, yend = 2.115717)) +
# segment 2
  geom_segment(
    aes(x = 1945, xend = 1953, y = 3.473217, yend = 3.473217)) +
# segment 3
  geom_segment(
    aes(x = 1954, xend = 1962, y = 1.170247, yend = 1.170247)) +
# segment 4
  geom_segment(
    aes(x = 1963, xend = 1972, y = 2.7, yend = 2.7)) +
  geom_point(data = mod1, color = col[1], shape = 1) +
  geom_point(data = mod2, color = col[2], shape = 0) +
  geom_point(data = mod3, color = col[4], shape = 5) +
  geom_point(data = mod4, color = col[3], shape = 2) +
  geom_line(data = mod1, aes(x = year, y = .fitted), color = col[1]) +
  geom_line(data = mod2, aes(x = year, y = .fitted), color = col[2]) +
  geom_line(data = mod3, aes(x = year, y = .fitted), color = col[4]) +
  geom_line(data = mod4, aes(x = year, y = .fitted), color = col[3]) +
  scale_x_continuous(breaks = c(1940, 1949, 1958, 1967))

col我不确定是否一切都对。但我已经尽力了。(;您可以大大简化代码

  • …通过将您的模型数据绑定到一个数据帧以及段的数据
  • …通过一些命名向量和
    scale\u xxx\u手册
  • 对于您的插图,无需进行单独的绘图并尝试将其放入主绘图中。您只需通过附加的
    geom_线
    geom_功能区
    添加它们。要获得线段的高度,请将线段数据连接到模型数据,以便您可以设置
    geom_功能区的起始值
    根据段的
    y

    库(tidyverse)
    图书馆(扫帚)
    库(颜色空间)
    上校
    
    inset1 <- ggplot(data = mod1, aes(x = year, y = weight)) +
      geom_line(color = col[1]) +
      geom_area(fill = colB[1]) +
      theme_void()
    inset2 <- ggplot(data = mod2, aes(x = year, y = weight)) +
      geom_line(color = col[12) +
      geom_area(fill = colB[2]) +
      theme_void()
    inset3 <- ggplot(data = mod3, aes(x = year, y = weight)) +
      geom_line(color = col[3]) +
      geom_area(fill = colB[3]) +
      theme_void()
    inset4 <- ggplot(data = mod4, aes(x = year, y = weight)) +
      geom_line(color = col[4]) +
      geom_area(fill = colB[4]) +
      theme_void()