Мне любопытно, если можно поместить заголовки осей на каждом фасете в facet_wrap. Я могу приблизиться, но я не могу заставить x и y отображаться правильно. В настоящее время код отображает и x, и y на одной оси. Я знаю, что это не совсем то, как это должно функционировать, но я хочу посмотреть, можно ли это сделать, не переходя к чему-то более сложному (расположение отдельных графиков с помощью grob или чего-то еще).

Короче говоря, я хотел бы, чтобы y_names и x_names появлялись на их соответствующих осях.

testdat<-data.frame(x_names=c("A","B","C"),x_vals=c(1,2,3),y_names=c("B","C","A"), y_vals=c(2,3,1))
ggplot(testdat, aes(x_vals, y_vals)) +
  geom_point(pch=21) +
  facet_wrap(y_names~x_names, 
             ncol=1,
             scales="free",
             strip.position="left",
             labeller=as_labeller(c(A= "Apple",
                                    B= "Bread",
                                    C= "Cantaloupe"))
  )+
  theme( strip.background = element_blank(),
         strip.placement = "outside",
         axis.title.x=element_blank(),
         axis.title.y=element_blank())
1
TBP 22 Июл 2020 в 19:28

2 ответа

Лучший ответ

Я не уверен, что именно вы имеете в виду - возможно, это?

library(ggplot2)

testdat <- data.frame(x_names = c("A","B","C"),
                      x_vals  = c(1, 2, 3),
                      y_names = c("B", "C", "A"), 
                      y_vals  = c(2, 3, 1))

ggplot(testdat, aes(x_vals, y_vals)) +
  geom_point(pch = 21) +
  facet_grid(y_names ~ x_names, 
             labeller = as_labeller(c(A = "Apple",
                                      B = "Bread",
                                      C = "Cantaloupe")),
              switch = "both") +
  theme( strip.background = element_blank(),
         strip.placement  = "outside",
         axis.title.x     = element_blank(),
         axis.title.y     = element_blank())


< Сильный > ИЗМЕНИТЬ

ФП, кажется, хочет иметь три (возможно, совершенно не связанных) графика, когда два фактора гранения полностью коррелируют. Это эквивалентно огранке на одну переменную. Однако мы хотим отдельную ось для каждого фасета. Вероятно, есть несколько способов добиться этого непосредственно в ggplot, но все они довольно замысловаты и включают добавление пользовательских аннотаций.

Я думаю, что в этом случае, безусловно, самый простой и наиболее сохраняющий свободу способ состоит в том, чтобы добавлять сюжеты вместе, используя gridExtra::grid.arrange, что не требует взлома или манипуляций с гробами. Это так же просто, как:

p1 <- ggplot(filter(testdat, x_names == "A", y_names == "B"), aes(x_vals, y_vals)) + 
        geom_point() + labs(x = "Apple", y = "Banana")

p2 <- ggplot(filter(testdat, x_names == "B", y_names == "C"), aes(x_vals, y_vals)) +
        geom_point() + labs(x = "Banana", y = "Cherry")

p3 <- ggplot(filter(testdat, x_names == "C", y_names == "A"), aes(x_vals, y_vals)) +
        geom_point() + labs(x = "Cherry", y = "Apple")

gridExtra::grid.arrange(p1 , p2, p3)

введите описание изображения здесь Создано в 2020-07-22 с помощью пакета представлений (v0.3.0)

1
Allan Cameron 22 Июл 2020 в 18:14

Вопрос:

"Мне любопытно, можно ли размещать заголовки осей на каждом фасете в фасетной обтекании."

Ответ:

Да, это возможно.

Однако ... Вы должны это сделать? Нет.

Faceting добавляет дополнительное измерение к вашим графикам, то есть, учитывая переменные x и y , третья переменная используется для подмножества данных, скажем, z .

У вас есть подразумеваемый запрос кода для отображения графиков с несколькими переменными x и y , поэтому вам не следует использовать огранку. Вместо этого должно быть три различных сюжета: Аллан Кэмерон любезно предоставил хорошее решение.

Книга ggplot2 объясняет, для чего здесь нужно использовать огранку: https://ggplot2-book.org/facet. HTML.

0
user13965750user13965750 22 Июл 2020 в 22:22