Buộc R ngừng vẽ các nhãn trục viết tắt - ví dụ: 1e + 00 trong ggplot2


111

Trong ggplot2, làm cách nào để dừng các nhãn trục được viết tắt - ví dụ: 1e+00, 1e+01dọc theo trục x sau khi được vẽ? Tốt nhất, tôi muốn buộc R hiển thị các giá trị thực trong trường hợp này 1,10.

Bất kỳ giúp đỡ nhiều đánh giá cao.

Câu trả lời:


134

Tôi nghĩ bạn đang tìm kiếm điều này:

require(ggplot2)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))
# displays x-axis in scientific notation
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p

# displays as you require
require(scales)
p + scale_x_continuous(labels = comma)

2
Điều này đã hiệu quả. Cảm ơn bạn. Ngoài sự quan tâm, có những tùy chọn 'nhãn' nào khác cho các trục trong ggplot2 với gói cân?
JPD

3
Vui lòng truy cập trang ggplot2.org này , nó rất hữu ích cho tôi với vấn đề tương tự.
Marta Karas,

64

Bạn đã thử một cái gì đó như:

options(scipen=10000)

trước khi âm mưu?


3
Điều này hoạt động bằng cách đặt ra một hình phạt cao hơn cho quyết định sử dụng ký hiệu khoa học. Giải thích thêm trong câu trả lời này: stackoverflow.com/a/18600721/1080804
ecoe

35

Chỉ là bản cập nhật cho những gì @Arun đã thực hiện, vì tôi đã thử nó hôm nay và nó không hoạt động vì nó đã được thực tế hóa thành

+ scale_x_continuous(labels = scales::comma)

2
Câu trả lời của @ Arun sẽ hoạt động tốt như hiện tại, có lẽ bạn đã bỏ qua việc bao gồm require(scales)? Điều này nhập gói có chứa commaquy mô. Khi bạn đã khám phá ra, bạn cũng có thể chỉ định gói khi đề cập đến nó thay vì yêu cầu nó trước đó.
cincodenada

17

Như một giải pháp chung hơn, bạn có thể sử dụng scales::format_formatđể loại bỏ ký hiệu khoa học. Điều này cũng cung cấp cho bạn nhiều quyền kiểm soát về cách bạn muốn các nhãn của mình được hiển thị chính xác, trái ngược với scales::commađiều này chỉ thực hiện phân tách bằng dấu phẩy của các thứ tự độ lớn.

Ví dụ:

require(ggplot2)
require(scales)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))

# Here we define spaces as the big separator
point <- format_format(big.mark = " ", decimal.mark = ",", scientific = FALSE)

# Plot it
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p + scale_x_continuous(labels = point)

8

Có một giải pháp không yêu cầu thư viện tỷ lệ.

Bạn co thể thử:

# To deactivate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = TRUE))

# To deactivate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = TRUE))

2

Không phải giải pháp chung đơn giản nhất để đặt mức phạt mà R sử dụng cho ký hiệu khoa học cao hơn sao?

tức là đặt scipen()thành một số mà bạn cảm thấy thoải mái.

Ví dụ: Nếu trục tối đa của bạn trên biểu đồ có thể là 100 000, cài đặt scipen(200000)sẽ đảm bảo rằng R (và ggplot) sẽ sử dụng ký hiệu chuẩn cho tất cả các số dưới 200000 và sẽ không có yêu cầu thêm bất kỳ dòng nào vào hàm ggplot.


0

Mở rộng câu hỏi ban đầu để bao gồm các phân số, tức là 1, 0,1, 0,01, 0,001, v.v. và tránh các số không ở sau

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.