在ggplot中移动“组”的所有数据点

问题描述 投票:3回答:1

我甚至很难说清楚问题-

我认为,只要表明自己的目标,这会更容易:举个例子:

require(tidyverse)
df <- data.frame(planet = rep(c("mars", "jupiter"), each = 10),
                 date = seq(as.Date("2020-01-01"), as.Date("2020-01-10"), length.out = 10) %>% rep(2),
                 someNumbers = c(1:10, 6:15)
                 )

df
    planet       date someNumbers
1     mars 2020-01-01           1
2     mars 2020-01-02           2
3     mars 2020-01-03           3
4     mars 2020-01-04           4
5     mars 2020-01-05           5
6     mars 2020-01-06           6
7     mars 2020-01-07           7
8     mars 2020-01-08           8
9     mars 2020-01-09           9
10    mars 2020-01-10          10
11 jupiter 2020-01-01           6
12 jupiter 2020-01-02           7
13 jupiter 2020-01-03           8
14 jupiter 2020-01-04           9
15 jupiter 2020-01-05          10
16 jupiter 2020-01-06          11
17 jupiter 2020-01-07          12
18 jupiter 2020-01-08          13
19 jupiter 2020-01-09          14
20 jupiter 2020-01-10          15

如果我密谋

ggplot(df, aes(date, someNumbers, group = planet)) + geom_bar(stat = "identity", position = "dodge", aes(fill = planet))

enter image description here


我可以看到两个行星在someNumbers中遵循相同的顺序。我想做的是将所有mars蓝色条向左移动4-5天,以便我可以轻松地从视觉上比较序列。

我可以通过:


df.mars <- subset(df, planet == "mars") 
df.jupiter <- subset(df, planet == "jupiter")

df.mars$date <- df.mars$date - 5 #subset mars and manually minus 5

bind_rows(df.mars, df.jupiter) %>% ggplot(aes(date, someNumbers, group = planet)) + geom_bar(stat = "identity", position = "dodge", aes(fill = planet))

enter image description here

但是,我实际上是将date的基础值更改为mars

我可以在不实际更改基础date值的情况下实现同一件事,而只是将所有mars geom_bar()左右移动任意量吗?理想情况下,我将有两个x轴标签:一个用于mars,一个用于jupiter

Rant:当我使用covid19数据集时出现了这个问题。我正在绘制按国家/地区分组的条形图:

Y-axis = #cases
X-axis = Date

我想将我的所有USA条向左移动n Days,这样我就可以按照“美国趋势跟随意大利,而n Days落后”的说法发表声明]]

我甚至很难说清楚问题-我认为如果我只展示我的目标会更容易:举个例子:require(tidyverse)df

r ggplot2 categories
1个回答
5
投票

您可以使用辅助轴。

bind_rows(df.mars, df.jupiter) %>% 
  ggplot(aes(date, someNumbers, fill = planet)) +
  geom_col(position = 'dodge') +
  scale_x_date('Mars date', sec.axis = sec_axis(~. - 5, 'Jupiter date'))
© www.soinside.com 2019 - 2024. All rights reserved.