如何生成分组克利夫兰点图(点图),当输入为矩阵时,数据在每个子组中从最高到低位排序?
例如,R有一个很好的内置点图示例,使用带有矩阵作为输入的组:
dotchart(VADeaths, main = "Death Rates in Virginia - 1940")
在这个特定的例子中,数据已经按每个类别(农村男性,农村女性等)的每个类别进行了分类。但是,如果不是,那么生成绘图的R命令是什么,以便每个子组中的数据点从最高到最低排序?
答案 0 :(得分:1)
这显示了创建具有任意行顺序的矩阵以及如何将其恢复到正确的顺序。
> set.seed(123)
> VA2 <- VADeaths[sample(1:5), ]
> VA2
Rural Male Rural Female Urban Male Urban Female
55-59 18.1 11.7 24.3 13.6
65-69 41.0 30.9 54.6 35.1
70-74 66.0 54.3 71.1 50.0
60-64 26.9 20.3 37.0 19.3
50-54 11.7 8.7 15.4 8.4
> VA2[order(rownames(VA2)), ]
Rural Male Rural Female Urban Male Urban Female
50-54 11.7 8.7 15.4 8.4
55-59 18.1 11.7 24.3 13.6
60-64 26.9 20.3 37.0 19.3
65-69 41.0 30.9 54.6 35.1
70-74 66.0 54.3 71.1 50.0
如果您遇到混乱的姓氏而不是具有所需词汇顺序的东西,您可以使用“[”
以正确的顺序使用字符向量> c2 <- c("Rural Male", "Rural Female", "Urban Male" , "Urban Female")
> VA3 <- VA2[ , sample(1:4)]
> VA3
Rural Male Rural Female Urban Male Urban Female
55-59 18.1 11.7 24.3 13.6
65-69 41.0 30.9 54.6 35.1
70-74 66.0 54.3 71.1 50.0
60-64 26.9 20.3 37.0 19.3
50-54 11.7 8.7 15.4 8.4
> VA3[ , c2]
Rural Male Rural Female Urban Male Urban Female
55-59 18.1 11.7 24.3 13.6
65-69 41.0 30.9 54.6 35.1
70-74 66.0 54.3 71.1 50.0
60-64 26.9 20.3 37.0 19.3
50-54 11.7 8.7 15.4 8.4
答案 1 :(得分:1)
如果您不希望按照@DWin建议的列名来订购数据,而只想对数字数据进行排序,您可以尝试:
# get data
data <- VADeaths[sample(1:5), ]
# order data by first row's numeric values
data <- data[order(data[,1]),]
dotchart(data)
注意:这将仅按第一列对数据帧进行排序!如果没有为每列指定不同的rownames,就无法对表中的每一列进行排序,这对于表类来说是绝对不可能的。
如果您坚持原来的问题:我建议按列拆分数据,绘制每个已排序列的点图并将其堆积在布局中。