ggplot facet_grid x轴步进 [英] ggplot facet_grid x axis stepped

查看:54
本文介绍了ggplot facet_grid x轴步进的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用facet_grid对齐分类x轴标签时出现问题它没有对齐,我无法弄清楚如何迫使它对齐.

我的代码:

  ggplot(data =数据集,aes(x =问题))+facet_grid(〜Indicator,scales ="free_x")+scale_x_discrete(labels = function(x)lapply(strwrap(x,width = 45,简单= FALSE),粘贴,塌陷="\ n"))+coord_cartesian(ylim = c(20,90))+geom_line(aes(y =结果))+ geom_point(aes(y =结果))+geom_line(aes(y = Result_2))+ geom_point(aes(y = Result_2))+theme_minimal()+主题(axis.title.x = element_blank(),axis.text.x = element_text(角度= 90,对齐= 0,对齐= 0.5)) 

数据:

  structure(list(Question = structure(c(1L,2L,3L,4L,5L,6L,7L,8L,9L,10L,11L,12L,13L,14L,15L,16L,17L,18L,19L,20L,21L,22L,23L,24L,25L,26L,32L,33L,34L,35L,36L,37L,38L,39L,27L,28L,29L,30L,31L,40L,44L,45L,46L,47L,48L,49L,50L,51L,41L,42L,43L),.Label = c("A.1长标签","A.2长标签","A.3长标签","A.4长标签","A.5长标签","A.6长标签","A.7长标签","A.8长标签","B.1非常长标签","B.2非常长标签","B.3非常长的标签","B.4非常长的标签","B.5非常长的标签","B.6非常长的标签","B.7非常长的标签","B.8非常长的标签","C.1非常长标签","C.2非常长标签","C.3非常长标签","C.4非常长标签","C.5非常长标签","C.6非常长标签","C.7非常长标签","C.8非常长标签","C.9非常长标签","D.1非常非常长的标签","D.10非常非常长的标签","D.11非常非常长的标签","D.12非常非常长的标签","D.13非常非常长的标签","D.14非常非常长的标签","D.2非常非常长的标签","D.3非常非常长的标签","D.4非常非常长的标签","D.5非常非常长的标签","D.6非常非常长的标签","D.7非常非常长的标签","D.8非常非常长的标签","D.9非常非常长的标签","E.1非常非常长的标签","E.10非常非常长的标签","E.11非常非常长的标签","E.12非常非常长的标签","E.2非常非常长的标签","E.3非常非常长的标签","E.4非常非常长的标签","E.5非常非常长的标签","E.6非常非常长的标签","E.7非常非常长的标签","E.8非常非常长的标签","E.9非常非常长的标签"),class ="factor"),指标=结构(c(1L,1L,1L,1L,1L,1L,1L,1L,2L,2L,2L,2L,2L,2L,2L,2L,3L,3L,3L,3L,3L,3L,3L,3L,3L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,5L,5L,5L,5L,5L,5L,5L,5L,5L,5L,5L,5L),. Label = c("A","B","C","D","E"),类别=因子"),索引= c(47L,44L,48L,46L,50L,45L,49L,51L,37L,36L,38L,39L,40L,41L,43L,42L,30L,28L,32L,27L,29L,31L,33L,34L,35L,14L,15L,16L,17L,18L,19L,20L,21L,23L,13L,22L,25L,26L,24L,4L,5L,2L,3L,1L,7L,9L,8L,10L,12L,6L,11L),结果= c(67.1,62.9,50.7,59,56.4,50.4,41.6,65.9,82.4、84.8、83.2、87.1、85.6、79.3、86.8、78.9、62、73.7,70.3、81、77、55.1、64.2、62.2、64.1、62.7、64.8、62.3、60.5,49.4、50.6、72.6、43.7、49.3、73.4、56、54.4、56.1、58.4,72.1、66.7、78.2、79.6、80.7、65.6、59.5、66.4、53.5、68,76.3、70.8),Result_2 = c(54.8、61.4、52.1、58.5、63.8、47.4,50.4、69.8、77.7、79.3、78.8、82.1、80.3、72.6、84.1、74.2,59.8、68.6、65.3、75.8、71.1、49.1、61.5、53.3、55.4、54.4,57.2、57.5、53.7、41.2、40.2、65、31.2、37.3、62.2、47.3,45.2、47.2、42.8、65.5、58.7、70.6、72.5、73.9、57.5、52.6,60.7、44.3、63.6、69.7、63.5)),类="data.frame",row.names = c(NA,-51L)) 

无论我似乎如何格式化标签,标签似乎都被踩了

解决方案

根据请求-使用来自(v0.3.0)于2020-03-15创建

sup>

I have an issue with aligning categorical x axis labels using facet_grid Its out of alignment and I cannot figure out how to force it to align.

my code:

ggplot(data=dataset, aes(x=Question)) + 
facet_grid(~Indicator,scales = "free_x")+
scale_x_discrete(labels = function(x) lapply(strwrap(x, width = 45, simplify = FALSE),paste, collapse="\n"))+
coord_cartesian(ylim = c(20, 90))+
  geom_line(aes(y = Result))+ geom_point(aes(y = Result))+
  geom_line(aes(y = Result_2))+ geom_point(aes(y = Result_2))+
  theme_minimal()+
  theme(
    axis.title.x=element_blank(),
    axis.text.x=element_text(angle = 90, hjust = 0, vjust = 0.5))

Data:

structure(list(Question = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 
20L, 21L, 22L, 23L, 24L, 25L, 26L, 32L, 33L, 34L, 35L, 36L, 37L, 
38L, 39L, 27L, 28L, 29L, 30L, 31L, 40L, 44L, 45L, 46L, 47L, 48L, 
49L, 50L, 51L, 41L, 42L, 43L), .Label = c("A.1 long label", "A.2 long label", 
"A.3 long label", "A.4 long label", "A.5 long label", "A.6 long label", 
"A.7 long label", "A.8 long label", "B.1 very long label", "B.2 very long label", 
"B.3 very long label", "B.4 very long label", "B.5 very long label", 
"B.6 very long label", "B.7 very long label", "B.8 very long label", 
"C.1 very long label", "C.2 very long label", "C.3 very long label", 
"C.4 very long label", "C.5 very long label", "C.6 very long label", 
"C.7 very long label", "C.8 very long label", "C.9 very long label", 
"D.1 very very long label", "D.10 very very long label", "D.11 very very long label", 
"D.12 very very long label", "D.13 very very long label", "D.14 very very long label", 
"D.2 very very long label", "D.3 very very long label", "D.4 very very long label", 
"D.5 very very long label", "D.6 very very long label", "D.7 very very long label", 
"D.8 very very long label", "D.9 very very long label", "E.1 very very long label", 
"E.10 very very long label", "E.11 very very long label", "E.12 very very long label", 
"E.2 very very long label", "E.3 very very long label", "E.4 very very long label", 
"E.5 very very long label", "E.6 very very long label", "E.7 very very long label", 
"E.8 very very long label", "E.9 very very long label"), class = "factor"), 
    Indicator = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L), .Label = c("A", 
    "B", "C", "D", "E"), class = "factor"), Index = c(47L, 44L, 
    48L, 46L, 50L, 45L, 49L, 51L, 37L, 36L, 38L, 39L, 40L, 41L, 
    43L, 42L, 30L, 28L, 32L, 27L, 29L, 31L, 33L, 34L, 35L, 14L, 
    15L, 16L, 17L, 18L, 19L, 20L, 21L, 23L, 13L, 22L, 25L, 26L, 
    24L, 4L, 5L, 2L, 3L, 1L, 7L, 9L, 8L, 10L, 12L, 6L, 11L), 
    Result = c(67.1, 62.9, 50.7, 59, 56.4, 50.4, 41.6, 65.9, 
    82.4, 84.8, 83.2, 87.1, 85.6, 79.3, 86.8, 78.9, 62, 73.7, 
    70.3, 81, 77, 55.1, 64.2, 62.2, 64.1, 62.7, 64.8, 62.3, 60.5, 
    49.4, 50.6, 72.6, 43.7, 49.3, 73.4, 56, 54.4, 56.1, 58.4, 
    72.1, 66.7, 78.2, 79.6, 80.7, 65.6, 59.5, 66.4, 53.5, 68, 
    76.3, 70.8), Result_2 = c(54.8, 61.4, 52.1, 58.5, 63.8, 47.4, 
    50.4, 69.8, 77.7, 79.3, 78.8, 82.1, 80.3, 72.6, 84.1, 74.2, 
    59.8, 68.6, 65.3, 75.8, 71.1, 49.1, 61.5, 53.3, 55.4, 54.4, 
    57.2, 57.5, 53.7, 41.2, 40.2, 65, 31.2, 37.3, 62.2, 47.3, 
    45.2, 47.2, 42.8, 65.5, 58.7, 70.6, 72.5, 73.9, 57.5, 52.6, 
    60.7, 44.3, 63.6, 69.7, 63.5)), class = "data.frame", row.names = c(NA, 
-51L))

The labels are seem to be stepped no matter how I seem to format them

解决方案

As per request - using the moderate hack from my other answer

I have also changed your plot code mildly. I'd suggest to have a look and understand what the advantages are - most importantly bringing the data into long format. Other convenience based changes was to define the aesthetics in the ggplot main call.

the data frame for the geom_text call needs the same values/ variabel for faceting !

May I also make a suggestion - if every x for each of your categories has the same long label - why don't you just bring this label into the facet strip, and then each x can have only the index as a label. long x labels don't really help visualisation. Long labels are generally much easier to read if you flip the graph, so they would be horizontal, but in most cases one really doesn't need long x labels.


library(tidyverse)

ann_x <- data.frame(Question = unique(dataset$Question), Indicator = str_sub(unique(dataset$Question), 1, 1))

dataset_l <- dataset %>% pivot_longer(names_to = "key", values_to = "value", cols = contains("result"))

ggplot(data = dataset_l, aes(x = Question, y = value)) +
  geom_line(aes(group = key)) +
  geom_point() +
  geom_text(data = ann_x, aes(y = -35, label = Question), angle = 90, hjust = 0, size = 5 / 14 * 10) +
  facet_grid(~Indicator, scales = "free_x") +
  coord_cartesian(ylim = c(20, 90), clip = "off") +
  theme(
    axis.title.x = element_blank(),
    axis.text.x = element_blank(),
    plot.margin = margin(0.1, 0.1, 2, 0.1, "in")
  )

Created on 2020-03-15 by the reprex package (v0.3.0)

这篇关于ggplot facet_grid x轴步进的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆