【问题标题】:Formatting lollipop graph格式化棒棒糖图
【发布时间】:2020-03-15 15:21:52
【问题描述】:

我有以下代码和后续图表。我该怎么做:

1) 使我的 PY 轴包含所有 PY(即包括 2009、2011、2013、2015 和 2017)

2) 按升序排列(即 2009 年在顶部,2018 年在底部

3) 更改我的 Perc 轴的比例,可能是 0.2 而不是 0.25,并且可能添加更多网格线

数据:

structure(list(PY = structure(c(1230768000, 1262304000, 1293840000, 1325376000, 1356998400, 1388534400, 1420070400, 1451606400, 1483228800, 1514764800, 1546300800), class = c("POSIXct", "POSIXt"), tzone = "UTC"), Perc = c(0.197, 0.266, 0.2, 0.3, 0.397, 0.553, 0.57, 0.621, 0.556, 0.6, 0.293)), row.names = c(NA, -11L), class = c("tbl_df", "tbl", "data.frame"))

代码:

ggplot(Ult_sum, aes(x=PY, y=Perc)) +
  geom_segment( aes(x=PY, xend=PY, y=0, yend=1.0), color="skyblue") +
  geom_point( color="blue", size=4, alpha=0.6) +
#  theme_light() +
  coord_flip() +
  theme(
    panel.grid.major.y = element_blank(),
     panel.border = element_blank(),
    axis.ticks.y = element_blank()    
  )

图表:

作为奖励,我还收到以下警告/错误:

Warning messages:
1: Removed 1 rows containing missing values (geom_segment). 
2: Removed 1 rows containing missing values (geom_point).

这似乎无缘无故地删除了我的 PY 2019。想法?

【问题讨论】:

  • 请编辑您的问题以包含重现您的问题所需的数据 - 使用 dput(Ult_sum) 将数据转换为易于导入的格式
  • 添加了我的数据视图。让我知道这是否足够。
  • 我想我做到了! (对不起,我是新手)

标签: r ggplot2 graph


【解决方案1】:

试试这个。第一个情节复制了问题中给出的代码。第二个图是调整后的图:

library(ggplot2)
library(dplyr)
library(forcats)
library(stringr)

# data
Ult_sum <- structure(list(PY = structure(c(1230768000, 1262304000, 1293840000, 
                                1325376000, 1356998400, 1388534400, 1420070400, 1451606400, 1483228800, 
                                1514764800, 1546300800), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
               Perc = c(0.197, 0.266, 0.2, 0.3, 0.397, 0.553, 0.57, 0.621, 
                        0.556, 0.6, 0.293)), row.names = c(NA, -11L), class = c("tbl_df", 
                                                                                "tbl", "data.frame"))
# code given
ggplot(Ult_sum, aes(x=PY, y=Perc)) +
  geom_segment( aes(x=PY, xend=PY, y=0, yend=1.0), color="skyblue") +
  geom_point( color="blue", size=4, alpha=0.6) +
  #  theme_light() +
  coord_flip() +
  theme(
    panel.grid.major.y = element_blank(),
    panel.border = element_blank(),
    axis.ticks.y = element_blank()    
  )

# Adjust plot
Ult_sum <- Ult_sum %>% 
   mutate(PY = as.Date(PY),
          PY = factor(PY),
          PY = fct_rev(PY))

ggplot(Ult_sum, aes(x=PY, y=Perc)) +
  geom_segment( aes(x=PY, xend=PY, y=0, yend=1.0), color="skyblue") +
  geom_point(color="blue", size=4, alpha=0.6) +
  scale_x_discrete(labels = function(x) str_extract(x, "^\\d{4}")) +
  scale_y_continuous(breaks = seq(0, 1, by = .2), minor_breaks = seq(0, 1, .05)) +
  coord_flip() +
  theme(
    panel.border = element_blank(),
    axis.ticks.y = element_blank()    
  )

由reprex package (v0.3.0) 于 2020-03-15 创建

【讨论】:

  • 你使用 data.frame 会抛出我,因为你的格式是你想要的。这有效,但删除了'19:Ult_sum PYa&lt;- factor(Ult_sum$PY) ggplot(Ult_sum, aes(x=fct_rev(PYa), y=Perc)) + geom_segment( aes(x=fct_rev(PYa), xend=fct_rev(PYa), y=0, yend=1.0), color="skyblue") + geom_point( color="blue", size=4, alpha=0.6) + scale_y_continuous(breaks = seq(0, 1, by = .2), minor_breaks = seq(0, 1, .05))+ # theme_light() + coord_flip() + theme( panel.grid.major.y = element_blank(), panel.border = element_blank(), axis.ticks.y = element_blank() )
  • 嗯。我认为 2019 年的值或日期本身的值存在问题。这肯定是您收到警告的原因,这意味着 R 由于丢失而丢弃了一个原始数据。但是从您的数据图片中,我无法弄清楚问题所在。首先检查您的数据。第二。手动设置。第三。正如理查德在评论中提到的那样,将您的数据集放在您的问题中。
  • 我按照@RichardTelford 提到的方式添加了数据。对吗?
  • 是的。美好的。我去看看。
  • 嗨。只需编辑代码并将数据放入其中。然而。您的数据看起来不错。没有收到任何警告。还检查了您的代码。从第一张图片可以看出。至少在我的机器上,2019 年会出现在您的代码中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多