在Julia

时间:2019-12-08 14:55:36

标签: dataframe plot time-series julia

我有一个时间序列,记录了1975-1985年和2000-2005年。我只想有一个只有这些年的情节,即没有1986-1999年之间的所有时间。最重要的是,我希望1985年和2000年之间没有联系,并且颜色不同。

不幸的是,我只设法制作了一个包含所有年份的情节。我正在使用数据框和绘图包。有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

从您的问题中还不清楚100%的数据是什么样的(1986-99年有missing吗?)以及期望的输出是什么(您想在图表的中间留出空隙吗? ),但有两个选择:

# Packages to use
using Dates, DataFrames, Plots

# Example data
df = DataFrame(date = Date(1975):Year(1):Date(2005),
               data = rand(31))

# Option 1 - plot with no data in the middle (straight line interpolation)
plot(df[.!in(1986:1999).(year.(df.date)), :date], 
     df[.!in(1986:1999).(year.(df.date)), :data])

Option 1

# Option 2 - plot line in two parts with gap in the middle
plot(df[in(1970:1985).(year.(df.date)), :date],
     df[in(1970:1985).(year.(df.date)), :data], color = "blue")
 plot!(df[in(2000:2015).(year.(df.date)), :date],
      df[in(2000:2015).(year.(df.date)), :data], label = "", color = "blue")

Option2

# Option 3 - plot continuous line and generate xticks manually
plot(df[.!in(1986:1999).(year.(df.date)), :data],
    xticks = (1:length(df[.!in(1986:1999).(year.(df.date)), :date]),
            year.(df[.!in(1986:1999).(year.(df.date)), :date])))

Option 3

已编辑添加:

如果实际上缺少数据,则可以通过以下操作更简单地生成选项3:

# Create example column with missing data 
df[:, :data_missing] = allowmissing(df.data)
df[in(1986:1999).(year.(df.date)), :data_missing] .= missing

# Plot option 3 
plot(df.date, df.data_missing)

再次编辑以添加: 最后,如果您想在两种和不同的颜色之间留出空隙,则需要选择选项2:

plot(df[in([1970:1986; 2000:2015]).(year.(df.date)), :data_missing])
plot!(13:18, df[in(2000:2015).(year.(df.date)), :data_missing], label = "",
    xticks = (1:18, year.(df[in([1970:1986; 2000:2015]).(year.(df.date)), :date])))

Option 4