【问题标题】:Limiting Axis for ggplotggplot的限制轴
【发布时间】:2019-11-12 23:20:13
【问题描述】:

我正在尝试绘制我的数据集婚姻,其中包括状态、年份和比率。但是,我试图专注于特定的年份间隔,以便图表看起来不那么拥挤。

marriage<-read.csv(file="~/Desktop/datah.csv", header=T, sep=",",check.names=FALSE)
marriage
marriage <- marriage %>%
     gather(key=year, value=rate, `2017`:`1990`)
ggplot(marriage, aes(x=year, y=rate, group=State)) +
     geom_point(aes(color=State)) +
     geom_line(aes(color=State)) +
     theme_bw()

我已尝试添加以下内容以尝试将 x 和 y 轴限制在上面的最后一行代码

+ylim(0,2)
+scale_x_continuous(limits=c(2000, 2005))
+xlim(2010, 2015)
+scale_x_continous(breaks = seq(2000, 2005, 5))

但我明白了,错误:提供给连续刻度的离散值

我也试过把它变成数字

marriage$variable=as.numeric(levels(marriage$variable))[marriage$variable]

我收到以下错误 $

这是数据的前几行

                  State 2017 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000 1999 1995 1990
1               Alabama  7.0  7.1  7.4  7.8  7.8  8.2  8.4  8.2  8.3  8.6  8.9  9.2  9.2  9.4  9.6  9.9  9.4 10.1 10.8  9.8 10.6
2                Alaska  6.9  7.1  7.4  7.5  7.3  7.2  7.8  8.0  7.8  8.4  8.5  8.2  8.2  8.5  8.1  8.3  8.1  8.9  8.6  9.0 10.2
3               Arizona  5.8  5.9  5.9  5.8  5.4  5.6  5.7  5.9  5.6  6.0  6.4  6.5  6.6  6.7  6.5  6.7  7.6  7.5  8.2  8.8 10.0
4              Arkansas  9.5  9.9 10.0 10.1  9.8 10.9 10.4 10.8 10.7 10.6 12.0 12.4 12.9 13.4 13.4 14.3 14.3 15.4 14.8 14.4 15.3
5           California   6.3  6.5  6.2  6.4  6.5  6.0  5.8  5.8  5.8  6.7  6.2  6.3  6.4  6.4  6.1  6.2  6.5  5.8  6.4  6.3  7.9
6              Colorado  7.3  7.4  6.8  7.1  6.5  6.8  7.0  6.9  6.9  7.4  7.1  7.2  7.6  7.4  7.8    8  8.2  8.3  8.2  9.0  9.8
7           Connecticut  5.6  5.6  5.3  5.4    5  5.2  5.5  5.6  5.9  5.4  5.5  5.5  5.8  5.8  5.5  5.7  5.4  5.7  5.8  6.6  7.9
8              Delaware  5.5  5.6  5.7    6  6.6  5.8  5.2  5.2  5.4  5.5  5.7  5.9  5.9  6.1    6  6.4  6.5  6.5  6.7  7.3  8.4
9  District of Columbia  8.2  8.1  8.2 11.8 10.8  8.4  8.7  7.6  4.7  4.1  4.2    4  4.1  5.2  5.1  5.1  6.2  4.9  6.6  6.1  8.2
10              Florida  7.8  8.1  8.2  7.3    7  7.2  7.4  7.3  7.5  8.0  8.5  8.6  8.9  9.0    9  9.4  9.3  8.9  8.7  9.9 10.9
11              Georgia  6.9  6.8  6.2  ---  ---  6.5  6.6  7.3  6.6  6.0  6.8  7.3  7.0  7.9    7  6.5  6.1  6.8  7.8  8.4 10.3
12               Hawaii 15.3 15.6 15.9 17.7 16.3 17.5 17.6 17.6 17.2 19.1 20.8 21.9 22.6 22.6   22 20.8 19.6 20.6 18.9 15.7 16.4
13                Idaho  7.8  8.1  8.2  8.4  8.2  8.2  8.6  8.8  8.9  9.5 10.0 10.1 10.5 10.8 10.9   11 11.2 10.8 12.1 13.1 13.9

【问题讨论】:

  • 听起来你的year 列很可能在你gather() 之后是分类的。 gather() 中的 convert 参数可能对此有所帮助。
  • @MatthewR 我查看了该链接并尝试实现它并收到此错误。 marriage$variable=as.numeric(levels(marriage$variable))[marriage$variable] $tmp, variable, value = numeric(0)) 中的错误:替换有 0 行,数据有 1071 –
  • 为了让人们帮助您解释超出猜测的错误消息,reproducible example 将是必要的
  • 我相信这个问题实际上是关于读取文件而不是 ggplot2。我认为症状是情节,但问题是文件输入。在read.csv() 中尝试na.strings = "---"

标签: r ggplot2 scale axis-labels


【解决方案1】:

试试

scale_x_continous(breaks = seq(2000, 2015, 5)

抱歉不能评论没有足够的代表

【讨论】:

  • 我知道你不能评论,但仍然输出相同的错误错误:离散值提供给连续刻度
【解决方案2】:

变量 'year' 存储为gather 之后的字符。你可以在reshape中调整(更新到pivot_longer):

    marriage <-
      marriage %>%
      pivot_longer(
        cols = `2017`:`1990`,
        names_to = 'year',
        values_to = 'rate'
      ) %>%
      mutate(
        year = as.numeric(year)
      )

ggplot 调用应该从那里运行。

【讨论】:

  • 当我尝试运行它时出现此错误,婚姻错误 %>% pivot_longer(cols = 2017:1990, names_to = "year", : 找不到函数 "% >%"
  • 管道运算符%&gt;%来自magrittr,是tidyverse的一部分
  • 我现在安装了正确的软件包,但我收到以下错误:2017 2014 > 没有通用类型。致电rlang::last_error() 以查看回溯。
【解决方案3】:

我认为ggplot() 实际上会在自动使用合适的间隔时做得不错。如果您想让它自己做,请尝试将年份转换为日期。一个简单的方法是使用来自lubridatemake_date()

library(dplyr)
library(tidyr)
library(lubridate)
library(ggplot2)

读入数据(根据问题更新进行编辑)

这是基于编辑的数据。这应该把它带进来,就像你拥有它一样。请注意我显然使用了与您不同的方法。

我认为您需要像我一样添加 na.strings = "---" 以便 NA 字段正确读取。

另外,我必须在单引号内添加哥伦比亚特区。这可能是您遇到的问题。

data <- "State 2017 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000 1999 1995 1990
Alabama  7.0  7.1  7.4  7.8  7.8  8.2  8.4  8.2  8.3  8.6  8.9  9.2  9.2  9.4  9.6  9.9  9.4 10.1 10.8  9.8 10.6
Alaska  6.9  7.1  7.4  7.5  7.3  7.2  7.8  8.0  7.8  8.4  8.5  8.2  8.2  8.5  8.1  8.3  8.1  8.9  8.6  9.0 10.2
Arizona  5.8  5.9  5.9  5.8  5.4  5.6  5.7  5.9  5.6  6.0  6.4  6.5  6.6  6.7  6.5  6.7  7.6  7.5  8.2  8.8 10.0
Arkansas  9.5  9.9 10.0 10.1  9.8 10.9 10.4 10.8 10.7 10.6 12.0 12.4 12.9 13.4 13.4 14.3 14.3 15.4 14.8 14.4 15.3
California   6.3  6.5  6.2  6.4  6.5  6.0  5.8  5.8  5.8  6.7  6.2  6.3  6.4  6.4  6.1  6.2  6.5  5.8  6.4  6.3  7.9
Colorado  7.3  7.4  6.8  7.1  6.5  6.8  7.0  6.9  6.9  7.4  7.1  7.2  7.6  7.4  7.8    8  8.2  8.3  8.2  9.0  9.8
Connecticut  5.6  5.6  5.3  5.4    5  5.2  5.5  5.6  5.9  5.4  5.5  5.5  5.8  5.8  5.5  5.7  5.4  5.7  5.8  6.6  7.9
Delaware  5.5  5.6  5.7    6  6.6  5.8  5.2  5.2  5.4  5.5  5.7  5.9  5.9  6.1    6  6.4  6.5  6.5  6.7  7.3  8.4
'District of Columbia'  8.2  8.1  8.2 11.8 10.8  8.4  8.7  7.6  4.7  4.1  4.2    4  4.1  5.2  5.1  5.1  6.2  4.9  6.6  6.1  8.2
Florida  7.8  8.1  8.2  7.3    7  7.2  7.4  7.3  7.5  8.0  8.5  8.6  8.9  9.0    9  9.4  9.3  8.9  8.7  9.9 10.9
Georgia  6.9  6.8  6.2  ---  ---  6.5  6.6  7.3  6.6  6.0  6.8  7.3  7.0  7.9    7  6.5  6.1  6.8  7.8  8.4 10.3
Hawaii 15.3 15.6 15.9 17.7 16.3 17.5 17.6 17.6 17.2 19.1 20.8 21.9 22.6 22.6   22 20.8 19.6 20.6 18.9 15.7 16.4
Idaho  7.8  8.1  8.2  8.4  8.2  8.2  8.6  8.8  8.9  9.5 10.0 10.1 10.5 10.8 10.9   11 11.2 10.8 12.1 13.1 13.9"

marriage <- read.table(textConnection(data), header = TRUE, na.strings = "---") %>%
  as_tibble() %>%
  rename_all(~ sub("X", "", .))

此时,marriage 应该是您的数据。我将稍作修改以转换为日期。

marriage <- marriage %>%
  gather(key=year, value=rate, `2017`:`1990`)%>%
  mutate(year = make_date(year))

情节

您的绘图代码没有更改。轴是自然处理的。

ggplot(marriage, aes(x=year, y=rate, group=State)) +
  geom_point(aes(color=State)) +
  geom_line(aes(color=State)) +
  theme_bw()

【讨论】:

  • 从这里得到以下错误,is_string(x) 中的错误:找不到对象 '2017'
  • 我已经更新了原始问题以反映数据集的前几行,我确实有一年以下的列,但这会导致 R 错误地读取文件,这就是我不得不摆脱的原因我的 csv 文件中的所有内容。我有一排年份和一列州。
  • 数据集显然去了所有 51 个州,所以我添加了几个州,以便您可以关注以下问题。当我在定义数据后运行命令时,我不断收到错误消息“扫描错误(文件 = 文件,什么 = 什么,sep = sep,报价 = 报价,dec = dec,:第 9 行没有 22 个元素”。第 9 行确实有 22 个值。格鲁吉亚是唯一的州缺失值,即使我任意输入值,我仍然会收到错误。关于导致此问题的任何想法?
  • 当我输入更多状态时,y 轴开始显得不堪重负。所以我已经对 30 个州进行了分析,y 轴列出了 21 年各州结婚率的每个值。所以我认为我仍然需要找到一种方法来限制我的轴或至少改变尺度。
  • 那是由于数据类型。它仍然认为这些事情是绝对的。您需要将 x 转换为日期并确保 y 是数字。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 2017-03-17
  • 2023-03-30
  • 1970-01-01
  • 2021-03-06
相关资源
最近更新 更多