Đây thực sự là hai câu hỏi trong một (không chắc chắn nếu đi ngược lại các quy tắc SO, nhưng dù sao).ggplot2: geom_text thay đổi kích thước với cốt truyện và văn bản lực/phù hợp trong geom_bar
Câu hỏi đầu tiên là làm thế nào tôi có thể bắt buộc geom_text
để vừa với một số geom_bar
? (động theo các giá trị được vẽ)
Nhìn xung quanh, các giải pháp tôi tìm thấy đã thay đổi kích thước của nhãn. Điều đó chắc chắn hoạt động, nhưng không phải cho mọi trường hợp. Bạn có thể thay đổi kích thước cho một ô cụ thể để làm cho văn bản vừa với thanh, nhưng khi dữ liệu thay đổi, bạn có thể cần phải thay đổi kích thước của văn bản theo cách thủ công. Vấn đề thực tế của tôi là tôi cần phải tạo ra cốt truyện tương tự để thay đổi dữ liệu liên tục (hàng ngày), vì vậy tôi không thể điều chỉnh kích thước cho từng ô.
Tôi đã thử đặt kích thước của nhãn làm chức năng của dữ liệu. Nó kinda hoạt động, không hoàn hảo, nhưng hoạt động trong nhiều trường hợp.
Nhưng đây là một vấn đề khác, ngay cả khi nhãn phù hợp trong thanh, thay đổi kích thước cốt truyện làm rối tung mọi thứ. Nhìn vào nó, tôi cũng tìm thấy trong số ggplot documentation rằng
nhãn không có chiều cao và chiều rộng, nhưng chúng là đơn vị vật lý, không phải là dữ liệu đơn vị. Lượng không gian họ chiếm trên lô đó không phải là hằng số trong đơn vị dữ liệu: khi bạn thay đổi kích cỡ ô, nhãn vẫn giữ nguyên kích thước, nhưng kích thước của các thay đổi trục .
Điều này đưa tôi đến câu hỏi thứ hai: Có thể thay đổi hành vi mặc định này và để/làm cho nhãn đổi kích thước với ô không?
Và cũng để tôi tinh chỉnh câu hỏi đầu tiên của mình. Có thể ép buộc geom_text
để vừa với một số geom_bar
, tự động đặt kích thước của văn bản bằng cách sử dụng mối quan hệ thông minh giữa các đơn vị vật lý và đơn vị dữ liệu không?
Vì vậy, để làm theo thực hành tốt, đây là ví dụ tái sản xuất của tôi:
set.seed(1234567)
data_gd <- data.frame(x = letters[1:5],
y = runif(5, 100, 99999))
ggplot(data = data_gd,
mapping = aes(x = x, y = y, fill = x)) +
geom_bar(stat = "identity") +
geom_text(mapping = aes(label = y, y = y/2))
Mã này tạo ra âm mưu này:
Nếu tôi chỉ đơn giản là thay đổi kích thước cốt truyện, "labels stay the same size, but the size of the axes changes" do đó làm cho các nhãn phù hợp với các thanh (bây giờ có lẽ các nhãn thậm chí còn quá nhỏ).
Vì vậy, đây là câu hỏi thứ hai của tôi. Nó sẽ được tốt đẹp mà các nhãn thay đổi kích cỡ là tốt và giữ khẩu phần khía cạnh liên quan đến các quán bar. Bất kỳ ý tưởng làm thế nào để thực hiện điều này hoặc nếu nó có thể ở tất cả?
Ok, nhưng quay trở lại cách phù hợp với nhãn trong các thanh, giải pháp đơn giản nhất là đặt kích thước của nhãn.
ggplot(data = data_gd,
mapping = aes(x = x, y = y, fill = x)) +
geom_bar(stat = "identity") +
geom_text(mapping = aes(label = y, y = y/2), size = 3)
Một lần nữa, điều này hoạt động như hình bên dưới, nhưng không thể duy trì/cũng không thay đổi dữ liệu.
Ví dụ, mã rất giống nhau để tạo ra những âm mưu với sản lượng dữ liệu khác nhau kết quả thảm khốc.
data_gd <- data.frame(x = letters[1:30],
y = runif(30, 100, 99999))
ggplot(data = data_gd,
mapping = aes(x = x, y = y, fill = x)) +
geom_bar(stat = "identity") +
geom_text(mapping = aes(label = y, y = y/2), size = 3)
Và tôi có thể tiếp tục với các ví dụ, thiết lập kích thước của các nhãn như một chức năng của số chủng loại trên trục x và vân vân. Nhưng bạn nhận được điểm, và có lẽ một trong các bạn ggplot2
chuyên gia có thể cho tôi ý tưởng.
awesome !!!, ..., vẫn cố gắng hiểu nó hoạt động như thế nào vì tôi chỉ biết cơ bản về 'ggplot2', nhưng mã hoạt động trơn tru và giải quyết cả hai vấn đề: nó hoàn toàn phù hợp với văn bản trong các thanh và văn bản thay đổi kích thước cùng với cốt truyện. Tôi thực sự không nghĩ rằng điều đó là có thể. Cảm ơn nhiều – elikesprogramming