我创建了一个绘图,在其中要对值进行颜色编码。值的一个子集将是一种颜色,另一子集将是不同的颜色,其余值将是另一种颜色。
这些子集的工作方式如下:我已经根据一列对数据帧进行了排序。我为最低的10个值和最高的10个值创建了一个子集。我想对NY列的值进行颜色编码,对应于Total列中的前10名或后10名。因此,我的NY值不会被排序,但它们将与Total中的那些排序后的值相对应。
唯一的问题是,NY列中某些值的重复项不位于前10名或后10名之内。例如:5名位于后10名子集之内。但是,还有另一个实例5不在底部10之内。
因此,我的代码不是只对底部的10进行颜色编码,而是对底部10中的这些值的所有实例进行颜色编码。例如,对12或13个值进行着色而不是10。
我可能实际上需要在我的plot()调用中包含更多代码,但是除了我面临的这个问题之外,它对我来说还有效:
upper10<-tail(statedata[order(Total),],10)
lower10<-head(statedata[order(Total),],10)
plot(State,NY,type="p",pch=ifelse(NY %in% lower10$NY,
0, ifelse(NY %in% upper10$NY, 1, 2)),
col=ifelse(NY %in% lower10$NY,
"green3", ifelse(NY %in% upper10$NY, "red", "black")),
main="New York")
基本上,我要尝试的是确保仅底部的10个值为绿色。这段代码将整个数据框中这些值的所有实例更改为绿色,因为其中存在重复项。所以现在我被困住了。
抱歉,这很令人困惑。如果太令人困惑,我可以尝试进一步澄清。
编辑:添加了一些数据:
DET NY CHI Total
2.6 9.3 23.0 15.8
5.0 6.3 25.3 32.1
5.9 5.0 31.5 18.4
7.1 11.9 18.7 13.8
7.5 11.8 17.3 3.0
4.1 1.0 10.7 8.0
10.1 48.8 4.7 45.0
这只是一个片段。我对总计进行了排序,然后根据排序后的lower10或upper10中的值,对纽约州的值进行颜色编码。
我敢肯定,有很多更有效的方法可以做到这一点;在不实质更改主代码的情况下执行此操作的一种方法是尝试ifelse
在plot
函数内部的语句中使用索引。我稍稍更改了数据框和子集,以生成一个快速且肮脏的可复制示例。
该脚本与原始代码几乎相同,不同之处在于,它通过交叉检查lower5
和upper5
子集中的相应索引来尝试查找匹配项。可以使用以下rownames
功能完成此操作。
运行它,让我知道这是否是您想要的以及是否需要进一步说明。
#Define a dataframe for demonstration purposes
df <- data.frame(DET=1:20,NY=21:40,CHI=41:60,Total=100:81)
#Subset the lower and upper 5 values after sorting the dataframe (df) by the Total column
lower5 <- tail(df[order(df$Total),],5)
upper5 <- head(df[order(df$Total),],5)
#Plot the NY column from df and color code the data points if the indices in the NY column matches those of lower5 and upper5 subsets
plot(df$NY,
type="p",
pch=ifelse(rownames(df) %in% rownames(lower5),0, ifelse(rownames(df) %in% rownames(upper5), 1, 2)),
col=ifelse(rownames(df) %in% rownames(lower5),'green3', ifelse(rownames(df) %in% rownames(upper5), 'red', 'black')),
main="New York")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句