2015-02-27 16 views
14

(cập nhật) Tôi đã ggplot như thế này, nhưng sau đó ngày x trục quy mô:Thêm văn bản vào ggplot

g1 <- ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() 

Trên hai thanh (cho phép sayVS2 và IF, nhưng trong đồ thị của tôi nó là một ngày) Tôi muốn đặt một nhãn văn bản trên các thanh tại heigt 13.000.

Tôi đã thử rất nhiều thứ, nhưng đây là điều gần nhất: Đây là những gì tôi đã thử trong biểu đồ của mình với trục Ngày g1 + geom_text (aes (as.Date ("2014-10-05") , 13000), label = "thuyền")

nhưng điều này chỉ có một thêm vào đồ thị và ngay sau khi tôi cố gắng để mở rộng nó, ví dụ với

g1 + geom_text(aes(c(as.Date("2014-10-05"),as.Date("2014-10-20")) , 13000), label=c("boat", "train")) 

sau đó tôi nhận được lỗi:

Error: Aesthetics must either be length one, or the same length as the dataProblems:c(as.Date("2014-10-05"), as.Date("2014-10-20"))

Tôi cũng đã cố gắng để đọc các văn bản và nhãn từ một dataframe (oefen), nơi mà tôi đã sử dụng tên giống như cốt truyện gốc

g1 + geom_text(data=oefen, aes(x=newdat, y=Number, label=oefen$labs, fill=1)) 

tôi nhận được lỗi

Error: Continuous value supplied to discrete scale

tôi đã cố gắng rất nhiều giải pháp khác , nhưng không thể tìm thấy câu trả lời. Tôi đang thiếu gì?

+1

Khó theo dõi mà không có ví dụ tái sản xuất. Tuy nhiên, về 'df <- data.frame (x = as.Date (c (" 2014-10-04 "," 2014-10-08 "," 2014-11-06 ")), y = sample (1: 3, 3), nhãn = mẫu (chữ cái, 3)); ggplot (df, aes (x, y, nhãn = nhãn)) + geom_bar (stat = "identity") + geom_text (y = 4) + ylim (c (0, 4)) '? – lukeA

+0

Xin chào, cảm ơn câu trả lời của bạn. Giải pháp của bạn đến gần, nhưng những gì tôi muốn chỉ là những chữ cái (vì vậy không có thanh), âm mưu trên g1 xếp chồng lên nhau ban đầu của tôi bargraph. Tôi có một barplot như thế này: ggplot (kim cương, aes (rõ ràng, điền = cắt)) + geom_bar(), nhưng xaxis là một biến ngày. Ở trên chỉ có hai thanh tôi muốn vẽ một chữ cái. Điều đó rõ ràng hơn? – Rosanne

+0

@Rosanne vui lòng đăng một ví dụ về mã có thể tái sản xuất đơn giản bằng cách sử dụng tập dữ liệu kim cương. – smci

Trả lời

38

Cân nhắc sử dụng annotate() để đặt bất kỳ văn bản nào bạn muốn tại vị trí nhất định trên ô. Các yếu tố biến, như trong yếu tố rõ ràng trên trục x, có một số cho mỗi cấp độ, vì vậy bạn có thể sử dụng số đó để xác định vị trí văn bản. Tôi giả sử biến ngày có việc sử dụng cùng một .:

ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() + 
    annotate("text", x=8, y=13000, label= "boat") + 
    annotate("text", x = 4, y=13000, label = "ship") 

enter image description here

EDIT sau COMMENT

Đối với hiệu quả, bạn có thể kết hợp các chú thích, như thế này:

ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() + 
    annotate("text", x = c(2,4,6,8), y=13000, label = c("two", "ship", "six", "boat")) 
+0

Cảm ơn bạn rất nhiều, đây chính xác là những gì tôi đang tìm kiếm. Tôi đã cố gắng sử dụng chú thích trước đây, nhưng nó đã không hoạt động sau đó, có thể nó đã được tất cả các quá sai lầm. Tôi chỉ tự hỏi khi tôi muốn thêm 6 nhãn nếu có cách kết hợp tất cả trong một đoạn mã thay vì sử dụng chú thích sáu lần? Nhưng dù sao đi nữa, Ill chỉ bỏ nó xuống 6 lần khi nó hoạt động. Cảm ơn bạn rất nhiều!! – Rosanne

+0

Tôi đã thêm một kỹ thuật được đề xuất cho nhiều chú thích trong một dòng. Nếu điều này trả lời câu hỏi của bạn, hãy xem xét chấp nhận câu hỏi đó. Cảm ơn – lawyeR

+0

Điều này có trả lời câu hỏi của bạn không? – lawyeR

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