首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如何从data.frame中提取数据来绘制透视图图?

R:如何从data.frame中提取数据来绘制透视图图?
EN

Stack Overflow用户
提问于 2014-04-01 04:33:45
回答 1查看 570关注 0票数 1

我是R的初学者,我想绘制一个数据框架的不同列之间的数字关系。

目前,我有以下数据框架:

代码语言:javascript
复制
    topN  Precision    Recall    F1Score udim idim tdim
10    50 0.02712121 0.2843955 0.04951998   67   78   50
40    50 0.02515152 0.2584113 0.04584124   67  156   50
70    50 0.02539924 0.2585877 0.04625516   67  234   50
100   50 0.02608365 0.2735997 0.04762680  133   78   50
130   50 0.02431818 0.2504262 0.04433146  133  156   50
160   50 0.02425856 0.2448997 0.04414439  133  234   50
190   50 0.02418251 0.2498824 0.04409746  200   78   50
220   50 0.02342205 0.2436125 0.04273533  200  156   50
250   50 0.02136882 0.2179636 0.03892181  200  234   50

我想要绘制udim、idim和F1Score之间的三维关系。我在R中使用的是persp()函数,我想确保在z.上使用t()是否正确。

所以

X为udim: 67 133 200

Y是成语: 78 156 234

Z是它们在数据帧中对应的F1Score值。

我使用以下代码:

代码语言:javascript
复制
plot.data <- read.table(plot.file, sep=",", header=T) 
# plot.file is the data frame file location

udim <- as.factor(plot.data$udim)
u <-as.integer(levels(udim))

idim <- as.factor(plot.data$idim)
i <- as.integer(levels(idim))

t <- as.integer(levels(as.factor(plot.data$tdim)))

z <- outer(u, i, FUN = function(u, i){
  ss <- subset(plot.data, tdim == 50 & topN == 50) #udim == u & idim == i &
  ss$F1Score
})

persp(u, i, t(z), theta=45, phi=45, shade = 0.45, xlab="user dim", 
      ylab="item dim", zlab="F1 Score", scale=TRUE)

我有以下情节:

,我是在画对吗?这是处理此类任务的最简单/最正常的方法吗?

实际上,在我的数据框架中,我有更多的行,具有不同的topN和tdim值,那么,是否可以再添加一个或两个维度,比如tdim,topN,来反映一个图中这么多列之间的数字关系?

EN

回答 1

Stack Overflow用户

发布于 2014-04-01 06:05:24

你的图表看上去已经不错了,我不能回答你的第二个问题。

不过,我想给大家介绍另一个三向图的选项。虽然它们通常是相当令人困惑的,但我发现了一种利用3D散点图的吸引人的方法。使用scatterplot3danimation以及一些第三方软件(如ImageMagick (http://imagemagick.org) ),您可以创建3D散点图的动画图片,这无疑是使用计算机表示数据的一种选择。

您的数据示例(我现在还没有安装animation包,所以我只能给您提供绘图的语法):

代码语言:javascript
复制
 library(scatterplot3d)

 F1Score <- c(0.04951998,0.04584124,0.04625516,0.04762680,0.04433146,0.04414439,0.04409746,0.04273533,0.03892181)
 udim <- c(67,67,67,133,133,133,200,200,200)
 idim <- c(78,156,234,78,156,234,78,156,234)

 for (j in seq(5, 175, by = 5)) {
 scatterplot3d(udim, idim, F1Score, angle = j)
 Sys.sleep(0.042) # for 24 fps when looking at it in R
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22776864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档