在散点图中合并两个变量而不进行分离。

huangapple go评论62阅读模式
英文:

Combine 2 variables in scatterplot without dodge

问题

To achieve the layout from Layout 1 but with different shapes for the "observer" without the extra dodge, you can modify your code as follows:

final_data$day <- as.factor(final_data$day)

p <- ggplot(data = final_data) +
  aes(x = treatment, y = count, color = day, shape = observer) +
  geom_point(size = 2, position = position_dodge(width = 0.5))

plot(p)

By using position = position_dodge(width = 0.5) instead of position = position_jitterdodge(dodge.width = 0.5, jitter.width = 0.1), you'll only dodge the points on the "day" variable, not on the "observer" variable. This should give you the desired layout with different shapes for the "observer" while maintaining the dodge effect for the "day" variable.

英文:

I want to create a scatterplot that combines both days (in color) as observer (shape) in a scatterplot. However, with my current code the points will not only dodge on day (which I want), but also on observer (which i dont want). Here is my dataframe

structure(list(sample = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 1, 2, 3, 
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 
37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 25, 26, 27, 28, 
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 
45, 46, 47, 48), treatment = c(&quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, 
&quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;d&quot;, 
&quot;d&quot;, &quot;d&quot;, &quot;d&quot;, &quot;d&quot;, &quot;d&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;b&quot;, &quot;b&quot;, 
&quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;d&quot;, &quot;d&quot;, &quot;d&quot;, 
&quot;d&quot;, &quot;d&quot;, &quot;d&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, 
&quot;b&quot;, &quot;b&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;d&quot;, &quot;d&quot;, &quot;d&quot;, &quot;d&quot;, &quot;d&quot;, 
&quot;d&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, &quot;b&quot;, 
&quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;, &quot;d&quot;, &quot;d&quot;, &quot;d&quot;, &quot;d&quot;, &quot;d&quot;, &quot;d&quot;), 
day = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), levels = c(&quot;2&quot;, 
&quot;6&quot;), class = &quot;factor&quot;), observer = c(&quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, 
&quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, 
&quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, 
&quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, 
&quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, 
&quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, 
&quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, 
&quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, 
&quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, 
&quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS1&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, 
&quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, 
&quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, 
&quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;, &quot;OBS2&quot;), count = c(1.94000836127381, 
2.07418521661429, 0.812685661255674, 0.199532997122114, 0.720956738045624, 
2.25080298569014, 1.1066027850052, 4.1487948134003, 5.06163333946851, 
8.45581635201957, 1.39519183814535, 5.22744057847467, 77.578763434025, 
81.5688787451947, 57.7998831807876, 72.5246292216229, 53.7941684202605, 
18.1902377363129, 7.2040245328528, 18.7399963681316, 12.0408266827075, 
16.9381875648501, 4.94300230430152, 7.7656112238281, 0.426353706529969, 
1.58200029160696, 0.546681932009987, 0.100208840148698, 0.444814277410285, 
1.61429066532657, 0.927880542016121, 0.0246114786607196, 
2.28109051907718, 4.06940300139814, 1.36067523536742, 2.75085205976752, 
27.7361069969966, 45.1989664871625, 32.2395897650876, 69.6007356941801, 
4.34439825647985, 2.21082387173822, 2.40563040116718, 6.19711117695116, 
0.190884751182731, 4.99307548525574, 2.27313622832564, 6.45085822279649, 
3.62337602915357, 9.29131381820146, 17.3474341955159, 0.654156425021601, 
18.2284156894217, 8.1096329723588, 2.59461805212543, 11.635214608248, 
10.338591963394, 17.096512619713, 2.29518753169706, 13.6312931040208, 
2.40586814654832, 18.2260582559852, 0.813121453291961, 86.1680580200406, 
86.1245441941217, 75.7365169486812, 51.2171310942499, 62.4301976210013, 
38.1836807429795, 31.2339903053221, 7.92988025761869, 8.27444313173916, 
3.52366209108204, 2.79169044391839, 3.868126588607, 0.563527045569289, 
15.1194456070968, 4.28505182586694, 0.825225268886448, 8.24445472788982, 
2.5334457992282, 3.73731910584408, 1.48367595357901, 1.40416105449322, 
1.2076803985627, 12.5666113109268, 0.523344806332173, 36.4416339714133, 
16.9721558868451, 43.7864681289392, 39.3637375577211, 4.59273514657034, 
33.3793562892502, 27.6940745715846, 3.93496345638513, 2.57838139836976
), length = c(556, 304, 878, 457, 271, 176, 814, 362, 353, 
411, 132, 305, 502, 187, 915, 132, 430, 879, 673, 361, 447, 
956, 920, 327, 591, 502, 659, 781, 624, 833, 484, 387, 486, 
853, 114, 739, 618, 228, 677, 925, 460, 645, 353, 987, 315, 
113, 333, 449, 808, 356, 590, 753, 361, 868, 878, 995, 644, 
149, 651, 719, 911, 550, 882, 879, 784, 490, 573, 889, 992, 
459, 849, 541, 680, 291, 699, 506, 678, 327, 194, 198, 506, 
926, 472, 124, 916, 447, 385, 685, 677, 397, 953, 579, 458, 
107, 142, 207), yield = c(3, 10, 9, 9, 9, 2, 5, 5, 4, 10, 
3, 2, 4, 7, 6, 4, 6, 8, 7, 9, 6, 8, 4, 10, 6, 8, 5, 8, 2, 
4, 8, 8, 8, 6, 3, 5, 9, 5, 2, 9, 7, 5, 8, 2, 4, 3, 2, 2, 
3, 10, 5, 8, 4, 4, 8, 8, 10, 3, 5, 4, 10, 3, 7, 7, 10, 10, 
9, 2, 6, 5, 10, 10, 8, 2, 2, 4, 4, 2, 6, 2, 5, 7, 10, 8, 
8, 3, 6, 3, 9, 9, 9, 4, 5, 5, 3, 8)), row.names = c(NA, -96L
), class = c(&quot;tbl_df&quot;, &quot;tbl&quot;, &quot;data.frame&quot;))

I can create a scatterplot as followed

final_data$day &lt;- as.factor(final_data$day)
p &lt;- ggplot(data = final_data)+
aes(x = treatment, y = count, color = day)+
geom_point(size = 2, position = position_jitterdodge(dodge.width = 0.5, jitter.width = 0.1))
plot(p)

在散点图中合并两个变量而不进行分离。

But now I only want to change the shape of my points (per observer), but I don't want the extra dodge for these points. This is what happens when I change my code.

final_data$day &lt;- as.factor(final_data$day)
p &lt;- ggplot(data = final_data)+
aes(x = treatment, y = count, color = day)+
geom_point(aes(shape = observer), size = 2, position = position_jitterdodge(dodge.width = 0.5, jitter.width = 0.1))
plot(p)

在散点图中合并两个变量而不进行分离。

How can I keep the layout from Layout 1, but with the different shape for the "observer". In other words, only dodge for days, not for observers.

I tried several codes, but nothing works for this. Hope you can help.

Thanks
M

答案1

得分: 1

你需要明确设置group aes,即使用group=day来仅按day来分组避免点重叠:

library(ggplot2)

ggplot(data = final_data) +
  aes(x = treatment, y = count, color = day, group = day) +
  geom_point(aes(shape = observer),
    size = 2,
    position = position_jitterdodge(dodge.width = 0.5, jitter.width = 0.1)
  )

在散点图中合并两个变量而不进行分离。


<details>
<summary>英文:</summary>
You have to explicitly set the `group` aes, i.e. use `group=day` to dodge the points by `day` only:

library(ggplot2)

ggplot(data = final_data) +
aes(x = treatment, y = count, color = day, group = day) +
geom_point(aes(shape = observer),
size = 2,
position = position_jitterdodge(dodge.width = 0.5, jitter.width = 0.1)
)


[![enter image description here][1]][1]
[1]: https://i.stack.imgur.com/iTo1i.png
</details>

huangapple
  • 本文由 发表于 2023年4月19日 23:40:26
  • 转载请务必保留本文链接:https://go.coder-hub.com/76056422.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定