我有以下数据显示了不同领域的白人与黑人之间的百分比一致性。我想创建一个分组的哑铃图,其中“国家”值和“州”值彼此相邻,以便于比较。
Domain = c("A", "B", "C", "D", "E", "F", "G",
"A", "B", "C", "D", "E", "F", "G", "A", "B", "C", "D", "E", "F",
"G", "A", "B", "C", "D", "E", "F", "G")
Area = c("State", "State",
"State", "State", "State", "State", "State", "National", "National",
"National", "National", "National", "National", "National", "State",
"State", "State", "State", "State", "State", "State", "National",
"National", "National", "National", "National", "National", "National"
race = c("White", "White", "White", "White", "White", "White",
"White", "White", "White", "White", "White", "White", "White",
"White", "Black", "Black", "Black", "Black", "Black", "Black",
"Black", "Black", "Black", "Black", "Black", "Black", "Black",
"Black")
pct_agreement = c(0.557610213756561, 0.735042750835419,
0.567375898361206, 0.633762538433075, 0.64091557264328, 0.750356614589691,
0.564539015293121, 0.651861846446991, 0.697574973106384, 0.653521358966827,
0.713940441608429, 0.680985689163208, 0.751584351062775, 0.642535984516144,
0.488484561443329, 0.581625580787659, 0.456939995288849, 0.580652594566345,
0.630399644374847, 0.711643815040588, 0.347775995731354, 0.627996683120728,
0.668737232685089, 0.610245823860168, 0.690373718738556, 0.705771028995514,
0.738830924034119, 0.550933301448822)
当我的代码如下时,我得到一个图形,其中所有点都很好地对齐:
df <- data.frame(Domain, Area, race, pct_agreement)
ggplot(df) +
geom_point(aes(x=Domain, y=pct_agreement, color=Area),
position=position_dodge(width=1)) +
coord_flip()
但是,当我尝试根据受访者是黑人还是白人而使形状有所不同时,一切突然看起来就很奇怪。这是一个错误吗?有什么办法可以解决它或解决它?
我也不确定如何在“哑铃”的两端之间添加一条线-我尝试使用geom_line(aes(group = Area)),但是导致所有哑铃都被连接了。
ggplot(df) +
geom_point(aes(x=Domain, y=pct_agreement, color=Area, shape=race),
position=position_dodge(width=1)) +
coord_flip()
注意:我浏览了本网站上的很多帖子,以寻找答案,并且许多建议使用构面。这对我不起作用,因为我的老板希望在一张图表上全部显示。
最佳答案
闪避是基于组发生的,对于两个域,每个类别都有两个类别变量(race
和Area
),因此将点闪避到四个不同的位置。您可以通过显式设置组的美观程度来避免这种情况。
首先是数据:
Domain = c("A", "B", "C", "D", "E", "F", "G",
"A", "B", "C", "D", "E", "F", "G", "A", "B", "C", "D", "E", "F",
"G", "A", "B", "C", "D", "E", "F", "G")
Area = c("State", "State",
"State", "State", "State", "State", "State", "National", "National",
"National", "National", "National", "National", "National", "State",
"State", "State", "State", "State", "State", "State", "National",
"National", "National", "National", "National", "National", "National")
race = c("White", "White", "White", "White", "White", "White",
"White", "White", "White", "White", "White", "White", "White",
"White", "Black", "Black", "Black", "Black", "Black", "Black",
"Black", "Black", "Black", "Black", "Black", "Black", "Black",
"Black")
pct_agreement = c(0.557610213756561, 0.735042750835419,
0.567375898361206, 0.633762538433075, 0.64091557264328, 0.750356614589691,
0.564539015293121, 0.651861846446991, 0.697574973106384, 0.653521358966827,
0.713940441608429, 0.680985689163208, 0.751584351062775, 0.642535984516144,
0.488484561443329, 0.581625580787659, 0.456939995288849, 0.580652594566345,
0.630399644374847, 0.711643815040588, 0.347775995731354, 0.627996683120728,
0.668737232685089, 0.610245823860168, 0.690373718738556, 0.705771028995514,
0.738830924034119, 0.550933301448822)
df <- data.frame(Domain, Area, race, pct_agreement)
现在情节:
library(tidyverse)
ggplot(df) +
geom_point(
aes(
x=Domain, y=pct_agreement, color=Area, shape=race,
group = Area
),
position=position_dodge(width=1)
) +
coord_flip()
由reprex package(v0.3.0)创建于2019-11-08
用线连接点很难。我认为这值得一个单独的问题。我发布了一个here.