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