Как перевернуть оси X и Y в Ggraph R - PullRequest
0 голосов
/ 20 января 2019

Первое изображение представляет собой нарисованное от руки (используя MS word) изображение графика.Второе изображение - это попытка сгенерировать тот же график с помощью ggraph.

enter image description here

Ниже приведен код, который я использовал для автоматического рисования графика при задании узласоединения (код был принят от этой темы ).Я хочу переместить оси X и Y на графике, как показано на графике, нарисованном от руки (изображение 1).Переверните нумерацию оси x сверху вниз и переместите ось y вверх.Как мне это сделать?

library(igraph)
library(tidyverse)
library(ggraph)

V <- read.table(text = "x        y
                2 1
                4 2
                4 4
                2 5
                6 4
                3 7
                8 6", 
    header = T) %>%
  rownames_to_column("name")

E <- matrix(c(0,    1,    0,    0,    0, 0, 0,
              0,    0,    1,    0,    0, 0, 0,
              0,    0,    0,    1,    1, 0, 0,
              0,    0,    0,    0,    0, 1, 0,
              0,    0,    0,    0,    0, 0, 1,
              0,    0,    0,    1,    0, 0, 0,
              0,    0,    0,    0,    1, 0, 0), nrow = 7, byrow = T) %>%
  data.frame() %>% 
  rename_all(list(function(x) 1:7)) %>% 
  rownames_to_column(var = "from") %>% 
  gather(to, val, 2:6) %>% 
  filter(val == 1) %>%
  select(from, to)

g <- graph_from_data_frame(E, vertices = V, directed = F)

png("C:\\Users\\Yasoda\\Downloads\\rplot.png", width = 450, height = 450)

ggraph(g) + 
  geom_edge_link(edge_width = 1.3) + 
  geom_node_label(aes(label = name),label.r = unit(0.75, "lines"), 
                  label.size = 0.65, label.padding = unit(0.55,"lines"), show.legend = F) +
  ggtitle("My plot") +
  coord_flip() +
  expand_limits(x = 0, y = 0) +
  scale_x_continuous(expand = c(0, 0), limits = c(0, 9), breaks = c(0:9), minor_breaks = NULL) + 
  scale_y_continuous(expand = c(0, 0),limits = c(0, 9), breaks = c(0:9), minor_breaks = NULL) +
  theme_minimal() 


dev.off()

Я попытался использовать scale_x_reverse (), но он искажает макет и выдает предупреждение «Масштаб для« x »уже существует. Добавляем еще один масштаб для« x », который заменит существующий масштаб».,Также я попробовал опцию position = "top" в scale_y_continuous, и это тоже не имеет значения.

1 Ответ

0 голосов
/ 21 января 2019
ggraph(g) + 
  geom_edge_link(edge_width = 1.3) + 
  geom_node_label(aes(label = name),label.r = unit(0.75, "lines"), 
                  label.size = 0.65, label.padding = unit(0.55,"lines"), show.legend = F) +
  ggtitle("My plot") +
  coord_flip() +
  expand_limits(x = 0, y = 0) +

  # Using scale_x_reverse and swapping the limits
  scale_x_reverse(expand = c(0, 0), limits = c(9, 0), breaks = c(0:9), minor_breaks = NULL) + 
  # switching y position to "right" (pre-flip)
  scale_y_continuous(expand = c(0, 0),limits = c(0, 9), breaks = c(0:9), minor_breaks = NULL, position = "right") +
  theme_minimal() 

enter image description here

...