2017-12-19 10 views
7

Làm cách nào để sửa đổi nhãn trục x ở định dạng 2^x khi x ở quy mô log2?Làm thế nào để định dạng nhãn đánh dấu trục x ở định dạng 2^x?

Khi xuất hiện trên biểu đồ, x nên được ưu tiên ở phần trên.

+1

Nếu x đã ở quy mô nhật ký, bạn chỉ cần sửa đổi các nhãn, ví dụ: df <- data.frame (x = 1: 4, y = 1: 4); ggplot (df) + geom_point (aes (y = y, x = x)) + scale_x_continuous (nhãn = dán0 ("2 ^", 1: 4)) –

Trả lời

8

Đây là một cách để thực hiện chức năng chuyển đổi và dán nhãn tùy chỉnh. Nó sẽ hoạt động trên dữ liệu tùy ý.

library(ggplot2) 

label_log2 <- function(x) parse(text = paste0('2^', log(x, 2))) 

ggplot(mtcars, aes(mpg, cyl)) + 
    geom_point() + 
    scale_x_continuous(
     trans = 'log2', 
     labels = label_log2) 

enter image description here


Theo bình luận alistaire, chúng ta cũng có thể định dạng trục nhãn với các chức năng được cung cấp bởi scales gói:

library(scales) 

ggplot(mtcars, aes(mpg, cyl)) + 
    geom_point() + 
    scale_x_continuous(
     trans = 'log2', 
     labels = trans_format('log2', math_format(2^.x))) 

Ở đây, trans_format sẽ định dạng các nhãn sau khi quy định chuyển đổi .


Theo thủ công:

xuyên
Hoặc là tên của một đối tượng chuyển đổi, hoặc đối tượng riêng của mình. Biến đổi tích hợp bao gồm "asn", "atanh", "boxcox", "điểm kinh nghiệm", "nhận dạng", "nhật ký", "log10", "log1p", "log2", "logit", "xác suất" , "probit", "reciprocal", "reverse" và "sqrt".

A đối tượng chuyển đổi bao gồm cùng một phép biến đổi, nghịch đảo và các phương pháp để tạo ngắt và nhãn. Đối tượng chuyển đổi là được xác định trong gói tỷ lệ và được gọi là name_trans, ví dụ: boxcox_trans. Bạn có thể tạo chuyển đổi của riêng bạn với trans_new.

trans phải là một đối tượng chuyển đổi (như giá trị trả về của một cuộc gọi đến scales::log2_trans) hoặc tên của biến đổi built-in, vì vậy chúng tôi cũng có thể sử dụng trans = scales::log2_trans() thay vì trans = 'log2'.

+0

Được bình chọn, nhưng dường như không có một đối số được thông qua như một cuộc gọi chức năng và một thông qua như một tên chức năng là loại không phù hợp? –

+0

@ 42-, chắc chắn, điều này có vẻ lạ. 'nhãn' có thể lấy hàm làm đối số, trong khi' trans' yêu cầu đối tượng chuyển đổi tên của một đối số được tích hợp sẵn. Phân tích cú pháp tên hàm không hoạt động đối với 'trans'. Tôi đã chỉnh sửa câu trả lời để phản ánh điều này. Và tôi thấy sẽ tốt hơn nếu sử dụng 'trans =' log2''. – mt1022

+2

'scale' cũng cung cấp các hàm định dạng. Trong trường hợp này, nó không phải là một trong những cái được viết sẵn, nhưng nó không khó để xây dựng với các hàm sẵn có: 'labels = scales :: trans_format ('log2', scale :: math_format (2^.x))' – alistaire

Các vấn đề liên quan