Dưới đây là một ví dụ có thể tái tạo của vấn đề mà tôi đang cố giải quyết. Tôi đã tạo ra một bản đồ nhiệt của các loại trong ggplot2 và mọi thứ đã diễn ra tốt đẹp. Vì tôi đã đặt dấu hiệu phần trăm trên dữ liệu để sử dụng với geom_text tôi muốn làm cho truyền thuyết về geom_tile cũng để hiển thị các dấu hiệu phần trăm (tôi chỉ có thể nhân các giá trị thực tế bởi 100 ngay bây giờ). Lý tưởng nhất là tôi muốn thanh truyền thuyết ở bên phải hiển thị 8%, 4%, 0%, -4%, -8%.Nhận chú giải ggplot2 để hiển thị dấu phần trăm trong r
#load in libraries
require(plyr)
require(dplyr)
require(reshape2)
require(ggplot2)
require(scales)
testDF <- structure(list(strategies = structure(c(8L, 7L, 6L, 5L, 4L, 3L,
2L, 1L), .Label = c("Class 1", "Class 2",
"Class 3", "Class 4", "Class 5", "Class 6",
"Class 7", "Class 8"), class = "factor"),
School1 = c(0.0355662887589396, 0.0316753241146625, 0.00606392341292672,
0.0250738342627283, -0.0405709181701368, 0.0237665074609996,
0.00587364885411765, -0.0343914002059331), School2 = c(NA, NA,
NA, 0.0225535750673764, NA, -0.00448947685878404, NA, -0.0446386763157662
), School3 = c(NA, NA, NA, 0.0261099462365593, NA, 0.0199735626692146,
NA, -0.0272279264519992), School4 = c(NA, NA, NA, 0.0164004151291513,
NA, 0.00567638888888868, NA, -0.0384017249374949)), .Names = c("schools",
"School1", "School2", "School3", "School4"), row.names = c(NA, -8L), class = "data.frame")
GraphMelt <- melt(testDF)
GraphMelt <- GraphMelt %>% mutate(text = sprintf("%1.2f%%", 100*value))
GraphMelt[,"text"] <- ifelse(GraphMelt[,"text"]=="NA%",NA,GraphMelt[,"text"])
p <- ggplot(GraphMelt, aes(variable, schools))
p <- p + geom_tile(aes(fill = value*100), colour = "white") + geom_text(aes(label=text),size=7)
p <- p + scale_fill_gradient(low = "red", high = "green",limits=c(-8,8))
p <- p + theme(
axis.text.x= element_text(color="black", size=14, vjust=0.5),
axis.text.y= element_text(color="black", size=14, vjust=0.5),
axis.title.y = element_text(color="black",size=14, vjust=0.5),
plot.title = element_text(color="black",size=14,face="bold", hjust=0.5,vjust=1),
panel.background = element_blank(),
legend.position="right",
legend.title = element_blank(),
legend.key = element_rect(fill="white"), legend.background = element_rect(fill=NA)
)
p <- p + xlab("") + ylab("") + ggtitle("Schools")
Chỉ cần một gợi ý --- thời gian tới, thay vì 'dput'ing dữ liệu thô, sau đó tải plyr và dplyr và reshape2 và định lại thành' GraphMelt', sau đó vẽ, chỉ sử dụng 'dput (GraphMelt)' để mã trong câu hỏi của bạn đơn giản hơn và chúng ta không cần phải tải 3 gói bổ sung để chạy mã của bạn. Cảm ơn bạn đã làm mọi thứ có thể tái sản xuất! – Gregor
Thats phản hồi thực sự tốt và làm cho ý nghĩa tổng thể. Vẫn cố gắng để có được treo bài đăng ở đây, tôi cố gắng chỉ đặt câu hỏi khi tôi thực sự bị mắc kẹt. Bài đăng tiếp theo của tôi sẽ tốt hơn! –
Đừng lo! Bạn đã làm rất tốt các ví dụ tái sản xuất --- thách thức là làm cho chúng tối thiểu mà không cần cắt ra quá nhiều. Trong trường hợp này, đó là tất cả về tùy chọn hiển thị ô, do đó thao tác dữ liệu là không cần thiết. Đôi khi, tuy nhiên, điều quan trọng là phải xem thêm một chút về quy trình, như thể có một lỗi tiềm ẩn ở đó. – Gregor