我想顯示2 d色的散點圖 - 即,Y與Z的通過驅動2-d散點圖與漸變顏色圖例上最
點顏色X的功能我想Z色彩漸變圖例處於頂部,理想情況下位於主要標題標題下方。
我啓發自己從this SO其中Z顏色梯度上以導出下面的函數的權利:
library(grDevices)
library(colorRamps)
# 2-dim scatter plot with color gradient legend on top.
scatterPlot2DWithColorLegend <- function(x, y, z, colorGradient, legendTitle=""
, main="", xlab="", ylab="", pch=16, cex=1)
{
parPrev <- par()
nColorGradient <- length(colorGradient)
labelRange <- zRange <- range(z)
layout(matrix(1:2, nrow=2), widths = c(1), heights = c(1, 2), FALSE) # 2 plots, one above the other.
# Plot legend first on top.
plot(c(0, 1), c(0, 0.05), type = 'n', axes = F, xlab = '', ylab = '', main = legendTitle, cex.main=0.5)
legend_image <- as.raster(matrix(colorGradient, nrow = 1))
text(x = seq(0, 1, l = 5), y = 0.1 , labels = seq(labelRange[1], labelRange[2], l = 5), pos=1)
rasterImage(legend_image, 0, 0, 1, 1)
# Main plot second on bottom.
if (1 < length(unique(zRange)))
colVec = colorGradient[as.numeric(cut(z, nColorGradient))]
else
colVec = colorGradient[1]
plot(x, y, col = colVec
, main = main, xlab = xlab, ylab = ylab, pch = pch, cex = cex)
par(parPrev)
}
這是一個簡單的測試代碼:
# Test data.
mdf <- data.frame(X=c(0:10))
mdf$Y <- mdf$X * 3
mdf$Z <- (mdf$X-5)^2
# Color gradient function.
colorGradient <- colorRampPalette(c("blue", "green", "yellow", "red"))(4)
# 2-D colored scatter plot.
scatterPlot2DWithColorLegend(mdf$X, mdf$Y, mdf$Z, colorGradient
, legendTitle="Z", main="Y vs. X with Z-Color", ylab="Y", xlab="X"
, pch=16, cex=0.7)
用我scatterPlot2DWithColorLegend
功能如上,我得到:
我希望是這樣的:
有人能迅速提供scatterPlot2DWithColorLegend功能的增強版本,或點我到現有的包裝/功能,將讓我我想要什麼?即:
- 顏色漸變圖例上方的主標題(Y與X與Z顏色)。
- Z色梯度圖像較小,高度和寬度。
- 底部的Z色梯度Z-範圍(Z-範圍目前未顯示)。
- Z-color漸變圖例與Z-color梯度圖像左邊相反的頂部(即legendTitle =「Z」)。
- 顯着減少主標題,顏色漸變圖例和主散點圖之間的間距。
顯然,我不太明白R圖形。我對晶格,ggplot和種類都不熟悉 - 選項的數量顯得過於龐大。我想要一些簡單的作品,我可以重複使用來克服這個特定的駝峯,因爲這看起來很基本。
在此先感謝您的幫助。
你已經有了一些很好的'ggplot'下面的答案,但是這也同樣涵蓋在這個[先前的問題(HTTP:// stackoverflow.com/questions/13355176/gradient-legend-in-base/13389693#13389693)。 – thelatemail