簡體   English   中英

如何將三列中的矩陣或數據框中的數據繪制為顏色圖?

[英]How to plot data from a matrix or a dataframe in three columns as a color plot?

我有一個三列數據,我想繪制為2D色彩圖。 第一列表示x軸,第二列表示y軸。 然而,這些中的值不是規則間隔網格的形式,第三列的數據在2D空間中的相當隨機的點處可用。 我在下面給出了一個示例數據集。 實際的數據集長達數千行。

      X1        X2        X3
1  0.000000    NaN    1760
2  1.000000 0.0000000 1536
3  2.000000 0.0000000 1744
4  3.000000 0.0000000 1632
5  1.000000 1.5707963 1616
6  1.414214 0.7853982 1632
7  2.236068 0.4636476 1712
8  3.162278 0.3217506 1616
9  2.000000 1.5707963 1616
10 2.236068 1.1071487 1568
11 2.828427 0.7853982 1712
12 3.605551 0.5880026 1600
13 3.000000 1.5707963 1536
14 3.162278 1.2490458 1536
15 3.605551 0.9827937 1568
16 4.242641 0.7853982 1536

這個數據是通過實際“熔化”(庫重塑)具有值(光柵)的笛卡爾網格,然后轉換為極坐標來獲得的,目的是繪制r和theta。 第一列是r,第二列是theta,第三列是柵格像素的強度。 我希望能夠在網格位置(在線性軸上)繪制第三列的值,由第一列和第二列的相應值定義。 因此,例如,取第二行,在(1,0)位置的色標上表示的值1536

我查看了許多選項,如熱圖,並找到了一些matlab或python的幫助,但我希望能夠在R中做到這一點。有沒有辦法實現這一點? 如果我能夠調整色標等獎金

為了澄清,第一列和第二列必須表示為線性軸本身(我解釋了關於r和theta的部分來解釋數據的來源)。 我希望最終的結果是這樣的: 光柵圖

希望能幫助到你!

下面的解決方案直接取自這個夢幻般的答案。在@Henrik提供的不規則網格上繪制輪廓 它使用akima包來插值在2D空間上不規則地測量的z值。 然后, geom_raster()用於繪制熱圖。

dat = read.table(header=TRUE,
text="      X1        X2        X3
1  0.000000    NaN    1760
2  1.000000 0.0000000 1536
3  2.000000 0.0000000 1744
4  3.000000 0.0000000 1632
5  1.000000 1.5707963 1616
6  1.414214 0.7853982 1632
7  2.236068 0.4636476 1712
8  3.162278 0.3217506 1616
9  2.000000 1.5707963 1616
10 2.236068 1.1071487 1568
11 2.828427 0.7853982 1712
12 3.605551 0.5880026 1600
13 3.000000 1.5707963 1536
14 3.162278 1.2490458 1536
15 3.605551 0.9827937 1568
16 4.242641 0.7853982 1536")

library(akima)
library(reshape2)
library(ggplot2)

dat = dat[-1, ] # Remove row with NaN so `interp` will work properly.

# Interpolate 500 x 500 values, using spline interpolation.
res = interp(x=dat$X1, y=dat$X2, z=dat$X3, nx=500, ny=500, linear=FALSE)

# Reformat `interp` results into a long-format data.frame.
idat = melt(res$z, na.rm=TRUE)
names(idat) = c("x", "y", "X3")
idat$X1 = res$x[idat$x]
idat$X2 = res$y[idat$y]

p1 = ggplot(idat, aes(x=X1, y=X2, fill=X3)) +
     geom_raster() +
     scale_fill_gradientn(colours = terrain.colors(10))

ggsave("interpolated_heatmap.png", p1, height=4, width=6, dpi=150)

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM