[英]Setting axes limits based on variable values in ggplot
我有一个包含程序的数据框和程序中每个人的国家。 我需要为每个项目绘制一个条形图,其中包含来自每个国家/地区的参与者数量。 我包括示例数据和下面的代码。
实际上,我有 20 多个程序,每个国家都有数百个条目,并且希望通过仅更改代码中程序的名称来自动执行此过程以迭代所有程序。 在条形图中,我需要在水平条的外端有数据标签,但是这会将它们打印到绘图窗口的限制之外。 为了解决这个问题,我想调整轴的比例,但不是为每个程序手动调整它,我想将限制设置为比“计数”变量的最大值高 10%。
我的问题是是否可以使用数据框中的变量值来设置限制而不是为每个图对它们进行硬编码(最好在不保存单独的国家计数表的情况下这样做)。 如果这不是可以完成的事情,有没有人知道自动调整轴比例和/或调整绘图窗口以适应标签的有效替代方法?
我在其他地方找不到答案,但如果已经回答了类似的问题,如果有人能指出我的解决方案,我将不胜感激。
sample_data <- data.frame(
"person_number" = 1:15,
"country" = c("United States", "Canada", "India", "United States", "United
States", "United States", "India", "China", "China", "United
States", "China", "India", "Canada", "United States", "China"),
"program" = c("Program1", "Program2", "Program3", "Program2", "Program3",
"Program3", "Program3", "Program2", "Program3", "Program1",
"Program1", "Program3", "Program1", "Program2", "Program1")
)
sample_data %>%
filter(program == "Program1") %>%
group_by(country) %>%
summarise(Count = n_distinct(person_number)) %>%
ggplot(aes(x = reorder(country, Count), y = Count)) +
geom_bar(stat = "identity", fill = "salmon3") +
coord_flip() +
labs(title = "Country for Program1 Applicants") +
geom_text(aes(label=Count), size=3, hjust=-0.2) +
ylim(0, max(Count)+0.1*max(Count)) # this line does not work
# error message: object 'Count' not found
这正是比例尺中的expand
参数的含义。 我们可以设置乘法轴扩展。
我们还可以稍微简化您的代码:
sample_data %>%
filter(program == "Program1") %>%
ggplot(aes(x = forcats::fct_infreq(country))) +
geom_bar(fill = "salmon3") +
geom_text(aes(label = stat(count)), stat = 'count', size = 3, hjust = -0.2) +
labs(title = "Country for Program1 Applicants") +
scale_y_continuous(expand = expansion(c(0, 0.1))) +
coord_flip()
我还关闭了情节左侧的扩展。 见?scale_y_continuous
和?expansion
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.