Вращение xlabels и отделение заголовка оси X от меток - PullRequest
0 голосов
/ 22 января 2020

Я пробовал много вещей сейчас, но это, похоже, не работает для меня. Я ищу решение, чтобы повернуть метки моей оси x (до 45 °) и отделить заголовок оси, чтобы метки не переписывали мой заголовок оси. Это код, который у меня есть

barplot(regions$no_rows,xlab="regions",ylab="number of occurences",
        main="XXX", 
        names.arg = regions$ID, las=2,cex.lab=1,cex.names= 0.65)

, и вот что я получаю: enter image description here

Я уже обрезал поля и уменьшил шрифт надписей но разве нет решения, которое просто показывает мне график, а затем названия осей, кроме меток. С этим решением я также не получаю угол наклона 45 °. Я также попробовал несколько кодов для этого, например, такой:

regions = regions[with(regions, order(-no_rows)), ] 
end_point = 0.5 + nrow(regions) + nrow(regions)-1 
barplot(regions$no_rows, col="grey50", 
        main="XXX",
        ylab="occurences", ylim=c(0,5+max(regions$no_rows)),
        xlab = "regions",
        space=1)
text(seq(-0.5,end_point,by=2), par("usr")[3], 
     srt = 45, adj= 1, xpd = TRUE,
     labels = paste(regions$ID), cex=0.65) 

тоже не очень хорошо выглядел, потому что снова заголовок оси X был слишком близко к меткам, но и метки были слишком близки на решетку: enter image description here

Большое спасибо за вашу помощь! PS: допустим, это df, который я получил

regions
ID    no_rows
A       100
B        8
C        50
......

Ответы [ 2 ]

1 голос
/ 22 января 2020

Оставаясь основанием barplot, вы можете отключить метки и оси и сделать такие, как пользовательские.

op <- par(mar=c(6, 4, 5, 4))
b <- barplot(Employed ~ Month, data=dat1,  # store invisible output
             xlab="",  # switch off axis title
             xaxt="n", # switch off labels
             col="orange",
             main="My main title here"
)
# labels
text(x=b,  # us inv. output for label positions
     y=-4, # shuft them somewhat down
     srt=45, adj= 1, xpd=TRUE,
     labels=dat1$Month, cex=0.65) 
# axis title
mtext("Month", 1, 4)
par(op)

enter image description here


Данные

dat1 <- structure(list(Employed = c(63.221, 63.639, 64.989, 63.761, 66.019, 
67.857, 68.169, 66.513, 68.655, 69.564, 69.331, 70.551), Month = c("foooooooo_January", 
"foooooooo_February", "foooooooo_March", "foooooooo_April", "foooooooo_May", 
"foooooooo_June", "foooooooo_July", "foooooooo_August", "foooooooo_September", 
"foooooooo_October", "foooooooo_November", "foooooooo_December"
)), row.names = c(NA, -12L), class = "data.frame")
0 голосов
/ 22 января 2020

Альтернатива в ggplot2

Я не уверен, что это именно то, что вы ищете, но если вам не нужно оставаться с barplot, вы можете легко решить эту проблему с помощью ggplot2, используя аргумент axis.text.x в функции theme, который позволяет изменить угол маркировки x и настроить их положение таким образом, чтобы оно не перекрывалось с осью:

regions <- data.frame(ID = LETTERS[1:3],
                      rows = c(100,8,50))

library(ggplot2)
ggplot(regions, aes(x = reorder(ID,-rows), y = rows))+
  geom_col()+
  scale_y_continuous(expand = c(0,0))+
  xlab("New Name")+
  theme_classic()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        axis.line.x = element_blank(),
        axis.ticks.x = element_blank(),
        plot.title = element_text(hjust = 0.5))+
  ggtitle("Main Title")

enter image description here

...