Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在geom_磁贴内订购数据_R_Ggplot2 - Fatal编程技术网

R 在geom_磁贴内订购数据

R 在geom_磁贴内订购数据,r,ggplot2,R,Ggplot2,我有一个数据框,我想从中生成一个geom_tile()绘图,但我希望图形的顺序不是基于字母,而是基于此数据框内的变量 structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"), V2 = c("r", "w", "q", "m", "l", "q", "g"), V3 = c( "5", "2", "9", "2", "1", "3", "0")), .Names = c("V1", "V2", "V3"), clas

我有一个数据框,我想从中生成一个
geom_tile()
绘图,但我希望图形的顺序不是基于字母,而是基于此数据框内的变量

structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"), 
    V2 = c("r", "w", "q", "m", "l", "q", "g"), V3 = c( 
    "5", "2", "9", "2", "1", "3", "0")), .Names = c("V1", "V2", 
"V3"), class = "data.frame", row.names = c(NA, -8L))
我想根据变量
V3
对绘图进行排序,因为正常绘图将根据
V1
V2
中的字母顺序对它们进行排序


如何做到这一点???

我通常会先尝试使用级别来修复数据:

x <- structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"), 
    V2 = c("r", "w", "q", "m", "l", "q", "g"), V3 = c( 
    "5", "2", "9", "2", "1", "3", "0")), .Names = c("V1", "V2", 
"V3"), class = "data.frame", row.names = c(NA, -8L))

x <- x[1:7,]

x$V1 <- factor(x$V1, levels=(x$V1)[order(x$V3)])

# Note it's not an ordered factor, it's a factor in the right order

ggplot(x, aes(V1, V3)) + geom_tile()
x作为对的回答,这里有一个直接使用
ggplot
的解决方案,不需要更改数据

x <- structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"), 
                    V2 = c("r", "w", "q", "m", "l", "q", "g"), 
                    V3 = c( "5", "2", "9", "2", "1", "3", "0")), 
               .Names = c("V1", "V2", "V3"), class = "data.frame", 
               row.names = c(NA, -8L))

x <- x[1:7,]

ggplot(x, aes(V1, V2, fill=V3)) + geom_tile() +
  scale_x_discrete(limits=(x$V1)[order(x$V3)]) + 
  scale_y_discrete(limits=(x$V2)[order(x$V3)])

x那么x轴和y轴是什么?V1和V2?这些因素是什么?基于V3重新订购是什么意思?您的示例数据表明它们都是类字符,这对我来说很奇怪。你试过什么代码?为什么它不能按你想要的方式工作?期望的输出是什么?你必须帮助我们帮助你…没有人在这里读懂你的心思。@Chase:V1是x轴,V2是y轴,V3是因子,但V1和V2是字符,我想根据V3绘制这些数据。我试过这样做:test[with(test,order(-V3)),]当我打印数据帧时,它将按顺序打印,但当我打印它时,它将根据V1和V2中的字母顺序打印,而不是根据顺序。请尝试对上面发布的示例代码运行
str()
。所有三列都是类字符。如果您要提供示例数据,请使其代表您的真实数据集,它确实会对结果答案产生影响。第二,当你第一次发帖时,请仔细考虑你的问题中包含了哪些信息。不需要通过评论和编辑进行多次跟进,就可以了解您想要的内容。感谢您的帮助,但我想要的是V1位于x轴上,V2位于y轴上,V3是数据,我希望绘图基于V3进行排序,例如(所有大值将位于左上角,小值位于右下角)谢谢你的帮助,这正是我所需要的,但是当我尝试它时,它给了我一个错误??
$中的错误我能够解决该错误,这是我的错误,但是当我绘制数据时,x轴没有标签(NA)为什么?上面的这一步仍然是必要的,标题的x宽度用此解决方案更改,需要调整。
x <- structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"), 
                    V2 = c("r", "w", "q", "m", "l", "q", "g"), 
                    V3 = c( "5", "2", "9", "2", "1", "3", "0")), 
               .Names = c("V1", "V2", "V3"), class = "data.frame", 
               row.names = c(NA, -8L))

x <- x[1:7,]

ggplot(x, aes(V1, V2, fill=V3)) + geom_tile() +
  scale_x_discrete(limits=(x$V1)[order(x$V3)]) + 
  scale_y_discrete(limits=(x$V2)[order(x$V3)])