R: Как я могу изменить значения оси X в сгруппированном решетчатом xyplot - PullRequest
1 голос
/ 28 апреля 2020

У меня есть следующие образцы данных в R.

d <- read.table(text = 
"Grp     Var    Col1  Col2    Col3
grp_1   8      46.8  50.0   50.6
grp_1   16     95.6  47.4   48.0
grp_1   24     45.1  45.6   46.4
grp_1   32     68.8  44.3   58.2
grp_1   40     44.6  52.2   44.3
grp_1   48     86.5  42.2   68.6
grp_2   40     63.2  95.6   63.0
grp_2   60     66.7  67.5   65.6
grp_2   80     69.6  70.7   67.9
grp_2   100    71.9  73.4   69.3
grp_2   120    73.8  75.7   48.0
grp_3   500    51.9  50.0   50.5
grp_3   1000   65.5  53.0   53.4
grp_3   5000   61.2  99.0   59.9
grp_3   10000  80.1  63.0   62.8
grp_3   30000  25.9  33.8   14.2
  ", header=T
)

Столбцы Col1, Col2 и Col3 для каждой группы должны быть нанесены на график против Var. Группа 1 имеет 6 значений для Var, Col1 - Col3, в то время как группы 2 и 3 имеют 5 значений. Я использую функцию xyplot() Lattice, чтобы построить их в сетке. Код ниже:

#Groups as factors
d$Grp <- factor(d$Grp, levels=c("grp_1","grp_2","grp_3"), order=TRUE)
#Plot the data
xyplot(
  Col1 + Col2 + Col3 ~ Var | Grp,
  data=d,
  superpose=T,
  as.table=TRUE,
  col=c("#cc0000","#008000", "#0073e6"),
  lwd=1.5, ylim = c(0,120),
  ylab = list(label=expression("My Values"), fontsize=15),
  xlab = list(label="Var",fontsize=15),
  key=list(
    text  = list(c("Col1", "Col2", "Col3")),
    lines = list( lwd=1.5, col=c("#cc0000","#008000", "#0073e6")),
    corner = c(1, 0),
    x = 0.90, 
    y = 0.17),
  par.settings = list(strip.background=list(col="white")),
  scales=list(cex=1.2),
  type=c("l","g")
)

Сюжет выглядит так:

Code output

Понятно, что для групп 1 и 2 нанесены значения выглядят грязно, потому что значения оси X 500,1000,5000,10000,30000 вместо 8,16,24,32,40,48 и 40,60,80,100,120. Есть ли способ исправить значения по оси X для группы 1 и 2, используя xyplot() (предпочтительно)? Я также открыт для других интересных предложений. Например, ожидаемый результат может быть таким:

Desired output

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

Вы используете опцию scales с relation="free", я получаю график, похожий на @ Tjebo выше ... не 3 одинаковых графика:

xyplot(
  Col1 + Col2 + Col3 ~ Var | Grp,
  data=d,
  superpose=T,
  as.table=TRUE,
  col=c("#cc0000","#008000", "#0073e6"),
  lwd=1.5, ylim = c(0,120),
  ylab = list(label=expression("My Values"), fontsize=15),
  xlab = list(label="Var",fontsize=15),
  key=list(
    text  = list(c("Col1", "Col2", "Col3")),
    lines = list( lwd=1.5, col=c("#cc0000","#008000", "#0073e6")),
    corner = c(1, 0),
    x = 0.90, 
    y = 0.17),
  par.settings = list(strip.background=list(col="white")),
  scales=list(cex=1.2,x=list(relation="free")),
  type=c("l","g")
)

enter image description here

1 голос
/ 28 апреля 2020

Поскольку вы также пометили его как ggplot2, здесь решение ggplot2.

Лично я считаю, что это намного проще, чем базовый сюжет, но я невероятно предвзят.

library(tidyverse)

d_long <- 
  d %>%
    pivot_longer(names_to = "key", values_to = 'value', contains("Col"))

ggplot(d_long, aes(Var, value, color = key)) +
  geom_line() +
  facet_grid(~Grp, scales = "free_x") +
  scale_color_manual(values =c("#cc0000","#008000", "#0073e6"))

Создано в 2020-04-28 пакетом Представить (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...