如何在 facet_grid 内的 ggplot2 中显示更高的值
How to show higher values in ggplot2 within facet_grid
刚刚在ggplot2中找到了函数facet_grid,太棒了。问题是:我有一个包含 6 个国家(HC 列)和世界各地航班目的地的列表。我的数据如下所示:
HC Reason Destination freq Perc
<chr> <chr> <chr> <int> <dbl>
1 Germany Study Germany 9 0.3651116
2 Germany Work Germany 3 0.1488095
3 Germany Others Germany 3 0.4901961
4 Hungary Study Germany 105 21.4285714
5 Hungary Work Germany 118 17.6382661
6 Hungary Others Germany 24 5.0955414
7 Luxembourg Study Germany 362 31.5056571
有没有办法在每个国家只显示前十个目的地并使用函数facet_grid?我正在尝试以这种方式制作散点图:
Geograp %>%
gather(key=Destination, value=freq, -Reason, -Qcountry) %>%
rename(HC = Qcountry) %>%
group_by(HC,Reason) %>%
mutate(Perc=freq*100/sum(freq)) %>%
ggplot(aes(x=Perc, y=reorder(Destination,Perc))) +
geom_point(size=3) +
theme_bw() +
facet_grid(HC~Reason) +
theme(panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.major.y = element_line(colour = "grey60", linetype = "dashed"))
生成此图: 我想避免在 y 轴上过度绘制。提前致谢!!!
由于您没有以正确的格式发布您的数据(查看 dput()
),我只使用了示例数据。在这种情况下,我使用 dplyr
包按 grp 变量分组(group_by(grp)
,在您的情况下它是 国家/地区 )并选择前 10 行(...top_n(n = 10,...
) 按 x 变量排序(wt = x
,在你的情况下它将是 freq)并进一步绘制它(在这种情况下为散点图):
library(dplyr)
set.seed(123)
d <- data.frame(x = runif(90),grp = gl(3, 30))
d %>%
group_by(grp) %>%
top_n(n = 10, wt = x) %>%
ggplot(aes(x=x, y=grp)) + geom_point()
您可以创建一个变量,按国家/地区指示每个目的地的排名,然后在 ggplot 调用 select 行中排名 <= 10,例如
ggplot(data = mydata[rank <= 10, ], ....)
PS:目前您使用管道在一行中创建数据和绘制数据。我会将数据创建和绘图步骤分开。
刚刚在ggplot2中找到了函数facet_grid,太棒了。问题是:我有一个包含 6 个国家(HC 列)和世界各地航班目的地的列表。我的数据如下所示:
HC Reason Destination freq Perc
<chr> <chr> <chr> <int> <dbl>
1 Germany Study Germany 9 0.3651116
2 Germany Work Germany 3 0.1488095
3 Germany Others Germany 3 0.4901961
4 Hungary Study Germany 105 21.4285714
5 Hungary Work Germany 118 17.6382661
6 Hungary Others Germany 24 5.0955414
7 Luxembourg Study Germany 362 31.5056571
有没有办法在每个国家只显示前十个目的地并使用函数facet_grid?我正在尝试以这种方式制作散点图:
Geograp %>%
gather(key=Destination, value=freq, -Reason, -Qcountry) %>%
rename(HC = Qcountry) %>%
group_by(HC,Reason) %>%
mutate(Perc=freq*100/sum(freq)) %>%
ggplot(aes(x=Perc, y=reorder(Destination,Perc))) +
geom_point(size=3) +
theme_bw() +
facet_grid(HC~Reason) +
theme(panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.major.y = element_line(colour = "grey60", linetype = "dashed"))
生成此图:
由于您没有以正确的格式发布您的数据(查看 dput()
),我只使用了示例数据。在这种情况下,我使用 dplyr
包按 grp 变量分组(group_by(grp)
,在您的情况下它是 国家/地区 )并选择前 10 行(...top_n(n = 10,...
) 按 x 变量排序(wt = x
,在你的情况下它将是 freq)并进一步绘制它(在这种情况下为散点图):
library(dplyr)
set.seed(123)
d <- data.frame(x = runif(90),grp = gl(3, 30))
d %>%
group_by(grp) %>%
top_n(n = 10, wt = x) %>%
ggplot(aes(x=x, y=grp)) + geom_point()
您可以创建一个变量,按国家/地区指示每个目的地的排名,然后在 ggplot 调用 select 行中排名 <= 10,例如
ggplot(data = mydata[rank <= 10, ], ....)
PS:目前您使用管道在一行中创建数据和绘制数据。我会将数据创建和绘图步骤分开。