Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用ggplot和空限制对条形图中的条形图进行分组,但避免不一致的axis.ticks_R_Ggplot2_Grouping_Bar Chart_Geom Col - Fatal编程技术网

R 使用ggplot和空限制对条形图中的条形图进行分组,但避免不一致的axis.ticks

R 使用ggplot和空限制对条形图中的条形图进行分组,但避免不一致的axis.ticks,r,ggplot2,grouping,bar-chart,geom-col,R,Ggplot2,Grouping,Bar Chart,Geom Col,我制作了这个奇妙的条形图(见下文)。为了快速按地区对我的国家进行分组,我添加了scale\u x\u discrete(limits=ORDER)和一些空限制“(由ORDER指定)。它将空条添加到绘图中,这对我来说似乎很好,但轴的刻度不一致。我没有添加轴。记号(我更喜欢),但对于最后一个空条,它会添加。为什么?如何去除这一个蜱虫 ORDER <- c("Kiribati", "Marshall Islands", "Palau", "States of Micronesia",

我制作了这个奇妙的条形图(见下文)。为了快速按地区对我的国家进行分组,我添加了
scale\u x\u discrete(limits=ORDER)
和一些空限制
(由
ORDER
指定)。它将空条添加到绘图中,这对我来说似乎很好,但轴的刻度不一致。我没有添加轴。记号(我更喜欢),但对于最后一个空条,它会添加。为什么?如何去除这一个蜱虫

ORDER <- c("Kiribati",  "Marshall Islands",  "Palau",  "States of Micronesia",
       "",
       "Micronesia g." ,
       "",
       "Fiji",  "Nauru",  "PNG",  "Solomon Islands",  "Vanuatu",
       "",
       "Melanesia g.",
       "",
       "Cook Islands",  "Niue",  "Samoa",  "Tonga",  "Tuvalu",
       "",
       "Polynesia g."
      )
ORDER

ggplot(ESA_coun_p ,aes(x=x, y=y))+
 geom_col(position="dodge", na.rm=TRUE)+
 scale_x_discrete(limits = ORDER )+
 coord_flip()  
如果我现在添加
+facet\u grid(rows=vars(region),scales=“free\u y”,space=“free\u y”)
一切都乱七八糟,因为
xmax=nrow(test)
不再适合,但需要对区域敏感


您可以拥有一个
区域
变量,并根据该变量对绘图进行分面。然后可以使用镶嵌面打印间距

你没有提供数据,所以我做了一个虚拟的
test
dataframe

set.seed(10)
test <- data.frame(country = LETTERS[1:12], 
                   region = c(1,1,1,1,2,2,3,4,4,4,5,5), 
                   value = rnorm(12, m = 10))

# I'm ordering by <value> here, so in the plot, they'll be ordered as such 
test$country <- factor(test$country, levels = test$country[order(test$value)])

ggplot(test, aes(x = country, y = value)) + geom_bar(stat = 'identity') + 
  facet_grid(rows = vars(region), scales = "free_y", space = "free_y") + coord_flip() +
  theme(panel.spacing = unit(1, "lines")) # play with this to spread more
set.seed(10)

测试您可以有一个
区域
变量,并根据它对绘图进行分面。然后可以使用镶嵌面打印间距

你没有提供数据,所以我做了一个虚拟的
test
dataframe

set.seed(10)
test <- data.frame(country = LETTERS[1:12], 
                   region = c(1,1,1,1,2,2,3,4,4,4,5,5), 
                   value = rnorm(12, m = 10))

# I'm ordering by <value> here, so in the plot, they'll be ordered as such 
test$country <- factor(test$country, levels = test$country[order(test$value)])

ggplot(test, aes(x = country, y = value)) + geom_bar(stat = 'identity') + 
  facet_grid(rows = vars(region), scales = "free_y", space = "free_y") + coord_flip() +
  theme(panel.spacing = unit(1, "lines")) # play with this to spread more
set.seed(10)

测试您应该使用
标签
而不是
限制
。下面的玩具示例b/c您没有提供

解释

使用
限制
可以设置刻度的
限制。由于它是一个离散的尺度,它需要唯一的数据点。但是您的
标签不唯一。您需要设置刻度的
标签
,因此应该使用参数
标签

数据

library(tidyverse)
set.seed(1)
my_dat <- mtcars %>% 
    rownames_to_column() %>% 
    as_tibble() %>% 
    select(rowname, mpg) %>% 
    add_row(rowname = paste0("remove", 1:3), mpg = rep(0, 3)) %>% 
    slice(sample(NROW(.))) %>% 
    mutate(rowname = factor(rowname, rowname))

p <- ggplot(my_dat, aes(x=rowname, y = mpg)) + 
   geom_col(position = "dodge", na.rm=F) + 
   coord_flip()

rn <- gsub("^remove[0-9]+", "", my_dat$rowname)

正确使用
标签的方法

p+比例x离散(标签=rn)

您应该使用
标签
而不是
限制
。下面的玩具示例b/c您没有提供

解释

使用
限制
可以设置刻度的
限制。由于它是一个离散的尺度,它需要唯一的数据点。但是您的
标签不唯一。您需要设置刻度的
标签
,因此应该使用参数
标签

数据

library(tidyverse)
set.seed(1)
my_dat <- mtcars %>% 
    rownames_to_column() %>% 
    as_tibble() %>% 
    select(rowname, mpg) %>% 
    add_row(rowname = paste0("remove", 1:3), mpg = rep(0, 3)) %>% 
    slice(sample(NROW(.))) %>% 
    mutate(rowname = factor(rowname, rowname))

p <- ggplot(my_dat, aes(x=rowname, y = mpg)) + 
   geom_col(position = "dodge", na.rm=F) + 
   coord_flip()

rn <- gsub("^remove[0-9]+", "", my_dat$rowname)

正确使用
标签的方法

p+比例x离散(标签=rn)

没有可复制的示例,很难帮助您没有可复制的示例,很难帮助您我喜欢您的解决方案,但我很难在绘图(国家)中排序分类变量。如果我像以前一样使用
scale\u x\u discrete(limits=ORDER)
,它会显示每个地区的所有国家名称,即使该国家可能不是该地区的一部分。如果使用
scale\u x\u discrete()
,则国家名称按数据框中的第一个出现顺序排列。您始终可以在输入数据框中重新排列因子级别,因为ggplot将遵循该顺序。e、 g如果你有
f
a、B和C级的因子,你可以做
f@MrGISRocker我已经用重新排序的barsI更新了我的答案我不明白你想用这个“空白”做什么。如果您希望背景为白色,可以更改情节的主题否?e、 g
+theme\u classic()
我编辑了我的问题,因为这不是一个简短的评论。我喜欢你的解决方案,但我很难在绘图(国家)中排序我的分类变量。如果我像以前一样使用
scale\u x\u discrete(limits=ORDER)
,它会显示每个地区的所有国家名称,即使该国家可能不是该地区的一部分。如果使用
scale\u x\u discrete()
,则国家名称按数据框中的第一个出现顺序排列。您始终可以在输入数据框中重新排列因子级别,因为ggplot将遵循该顺序。e、 g如果你有
f
a、B和C级的因子,你可以做
f@MrGISRocker我已经用重新排序的barsI更新了我的答案我不明白你想用这个“空白”做什么。如果您希望背景为白色,可以更改情节的主题否?e、 g
+theme\u classic()
我编辑了我的问题,因为这不是一个简短的评论。我喜欢你的解决方案,但我很难在绘图(国家)中排序我的分类变量。我还使用了
scale\u x\u discrete(limits=ORDER)
来排序国家名称在绘图中的显示方式。使用
scale\u x\u discrete(labels=ORDER)
会导致轴文本与条形图值不匹配。x轴的顺序由x输入的顺序决定,而不是数据框中的外观顺序。标准是按字母顺序排序。要改变这一点,将其转换为一个因子,并通过级别定义顺序(这就是我所做的:
factor(rowname,rowname)
告诉
R
使用外观顺序。然后您可以使用
级别
,将不需要的标签更改为空白,并将其传递给
标签
我喜欢您的解决方案,但我在绘图(国家)中对分类变量排序有困难。我使用了
比例x离散(限制=顺序)
还可以对国家名称在绘图中的显示方式进行排序。使用
比例x离散(标签=顺序)
导致轴文本与条形图值不匹配。x轴的顺序由x输入的顺序决定,而不是数据框中的外观顺序。标准是按字母顺序排序。要改变这一点,请将其转换为因子,并通过级别定义顺序(这就是我所做的:
因子(rowname,rowname)
告诉
R
使用外观顺序。然后您可以使用
级别
,将不需要的标签更改为空白和p