ggplot日期x轴校正

时间:2018-12-18 01:45:21

标签: r datetime ggplot2

我有一个看起来像这样的数据集:

                   pollster    enddate rawpoll_clinton rawpoll_trump
4208               EPIC-MRA  1/26/2016            51.2          48.8
4168               EPIC-MRA  3/22/2016            56.0          44.0
4162               EPIC-MRA   8/4/2016            57.3          42.7
1187               EPIC-MRA  9/13/2016            52.1          47.9
747                EPIC-MRA  10/3/2016            57.3          42.7
368                EPIC-MRA 10/24/2016            54.7          45.3
124                EPIC-MRA  11/3/2016            52.5          47.5
3132 Glengariff Group, Inc.  5/26/2016            52.9          47.1
2282 Glengariff Group, Inc.   8/1/2016            56.5          43.5
789  Glengariff Group, Inc.  9/28/2016            54.5          45.5
436  Glengariff Group, Inc. 10/11/2016            58.0          42.0

我正在尝试制作一个在每次调查中都有单独一行的图,以显示批准如何随时间变化。

我用于“克林顿”的代码如下:

ggplot(data = mich_polls, aes(x = enddate, y = rawpoll_clinton, group=2)) + 
  geom_line(aes(colour = pollster, size = 1.5))+
  theme(axis.text.x = element_text(angle = 40, hjust = 1))

但是,这只会生成日期轴混乱,时间顺序混乱的图形:

enter image description here

为解决此问题,我尝试将enddate变量转换为Date格式,但最终结果很奇怪。大多数尝试都会生成NA值的列表。以下两个产生了奇怪的结果:

as.Date(data.frame(as.factor(mich_polls$enddate), stringsAsFactors = FALSE)[[1]], 
                   format = "%d/%m/%Y")

给出:

 [1] NA           NA           "2016-04-08" NA           "2016-03-10" NA           "2016-03-11"
 [8] NA           "2016-01-08" NA           "2016-11-10"

我也尝试过:

as.Date(data.frame(as.factor(mich_polls$enddate),
                   stringsAsFactors = FALSE)[[1]], format = "%d/%m/%Y")

给出:

[1] "2016-01-26" "2016-03-22" NA           "2016-09-13" NA           "2016-10-24" NA          
 [8] "2016-05-26" NA           "2016-09-28" "2016-10-11"

有人可以建议如何修复数据格式还是建议另一种制作我的折线图的方法?

2 个答案:

答案 0 :(得分:0)

您可以像这样直接应用"/usr/local/lib/python3.6/site-packages/flex/utils.py", line 125, in get_type_for_value raise ValueError("Unable to identify type of {0}".format(repr(value))) ValueError: Unable to identify type of Serializer4ModelA(many=True):

as.Date()

在绘图中使用mich_polls$enddate <- as.Date(mich_polls$enddate, format="%m/%d/%y") 和选项scale_x_date(),您可以在其中应用date_breaks"2 weeks"之类的值;只需加载"1 month"后再查看?scale_x_date

library(ggplot2)

产量:

enter image description here


数据:

library(ggplot2)
ggplot(data = mich_polls, aes(x = enddate, y = rawpoll_clinton, group=2)) + 
  geom_line(aes(colour = pollster, size = 1.5)) +
  scale_x_date(date_breaks="1 month") +
  theme(axis.text.x = element_text(angle = 40, hjust = 1))

答案 1 :(得分:0)

在处理日期时,我遇到了类似的问题。这是一个很长的方法,但它很简单且有效。试试看:

1。将日期加载到数据框中

 df = data.frame(Date = (file$enddate)

2。创建一个新变量,并在Date上使用因数

new_var <- factor(df$Date)

3。使用character.Date

new_var <- as.character.Date(new_var)

4。最后使用as.Date

new_var <- as.Date(new_var,"%d/%m/%Y) #In your case use month date and year

5。将此附加到您的原始dataframe上并照常打印