แพ็คเกจ scales
มีฟังก์ชัน breaks_*
และ label_*
หลายฟังก์ชันซึ่งส่งคืนฟังก์ชัน (การปิด) ที่ใช้โดย ggplot ดังนั้น คุณสามารถเขียน wrapper สำหรับสิ่งเหล่านี้เพื่อแก้ไขเอาต์พุตได้
ตัวอย่างเช่น:
library(ggplot2)
# Compute the list of breaks using original_func,
# then remove any of these that occur in remove_list
remove_breaks <- function(original_func, remove_list = list()) {
function(x) {
original_result <- original_func(x)
original_result[!(original_result %in% remove_list)]
}
}
# Compute the list of labels using original_func,
# then remove any of these that occur in remove_list
remove_labels <- function(original_func, remove_list = list()) {
function(x) {
original_result <- original_func(x)
replace(original_result, original_result %in% remove_list, '')
}
}
# Original plot
ggplot(data.frame(x=c(1,2,3,4,5,6,7,8), y = c(1,4,9,16,25,36,49,64))) + geom_line(aes(x, y)) +
scale_x_continuous(breaks = scales::breaks_pretty(9),
minor_breaks = scales::breaks_pretty(18),
labels = scales::label_number_auto()) +
scale_y_continuous(breaks = scales::breaks_pretty(9),
minor_breaks = scales::breaks_pretty(18),
labels = scales::label_number_auto())
# Remove some breaks from the x-axis, and remove some labels from the y-axis
ggplot(data.frame(x=c(1,2,3,4,5,6,7,8), y = c(1,4,9,16,25,36,49,64))) + geom_line(aes(x, y)) +
scale_x_continuous(breaks = remove_breaks(scales::breaks_pretty(9), seq(3,6)),
minor_breaks = remove_breaks(scales::breaks_pretty(18), seq(3,6,0.5)),
labels = scales::label_number_auto()) +
scale_y_continuous(breaks = scales::breaks_pretty(9),
minor_breaks = scales::breaks_pretty(18),
labels = remove_labels(scales::label_number_auto(), seq(20, 30)))
แน่นอนว่า ด้วยฟังก์ชัน remove_breaks
และ remove_labels
อย่างง่ายของฉัน คุณยังคงต้องระบุค่าที่จะลบ แต่คุณสามารถแก้ไขค่าเหล่านี้เป็นค่าที่ลบค่าสูงสุดและต่ำสุด ลบค่าใดๆ ในช่วงที่ระบุ ฯลฯ ได้อย่างง่ายดาย
person
Tim Goodman
schedule
18.03.2020