Python ggplot устанавливает диапазон оси для даты и времени

Я пытаюсь построить данные временных рядов в Python с помощью ggplot и не могу исправить масштаб.

Вот моя последняя работа - сначала я установил желаемые максимальное и минимальное значения оси x как xmin и xmax:

xmin = pd.to_datetime ('2011-04-01')
xmax = pd.to_datetime ('2011-08-01')

Затем из фрейма данных fishdf я пытаюсь построить график моей временной переменной ('tottime' - ось x) относительно числовой переменной ('rx', ось y):

fig=(ggplot(fishdf,aes('tottime','rx')) + \
    geom_line() + \
    geom_point() + \
    ggtitle(PIT) + \
    scale_x_date(breaks='7 days',
        labels=date_format('%m -%d'),
        limits=(xmin,xmax))) + \
    scale_y_continuous(limits=(0,235))
outfig= r"C:\a\Projects\Shad Telemetry\Connecticut River\CumDat\Python\figs\%s.png"%(PIT)
ggsave(fig,outfig)   

Это отлично работает, когда я не включаю команду limits =, но с ограничениями я получаю сообщение об ошибке

TypeError: требуется float

Я пробовал различные способы настройки / форматирования xmin и xmax, но, похоже, не могу заставить это работать. Есть простое решение? Я видел похожие вопросы в другом месте, но ответы, похоже, не работают для меня (или нет ответов?)


person TCS    schedule 31.10.2014    source источник


Ответы (1)


Насколько мне удалось определить, это ошибка в ggplot Python. Я смог перенести свои данные в R и запустить очень похожий код, который работал. Это сложнее, чем следующее (несколько других), но, по сути, этот код работал и позволил мне сгенерировать 500 графиков из 4 типов данных, все с общими осями. Чтобы было ясно, это код R, а не Python:

xlimits<-as.POSIXct(c('2011-04-15','2011-08-01'),tz='GMT')
for(i in as.vector(PITs2011$PIT))
{
  plot<-paste("C:\\etc\\",i,".png", sep="")
  png(plot,width=7.5, height=5, units="in",res=300)
  title=paste(i,'Release Location=',Tags$ReleaseLocation[Tags$PIT==i])
  Tagi=Tags[Tags$PIT==i,]
  PITi=Clean2011[Clean2011$PIT==i,]  #THIS SHOULD REALLY BE Radioi
  nr<-nrow(PITi)
  TIRISi=FWRES[FWRES$PIT==i,]
  nt<-nrow(TIRISi)
  Mobilei=Mobile[Mobile$PIT==i,]
  nm<-nrow(Mobilei)
  p<-''
  if((nt==0) & (nm==0) & (nr==0)) {  #First group has only radio data and also Tags data (true for all)
    p<-ggplot(data=Tagi,aes(x=time, y=rx)) +#Need to modify this for fish with only ReleaseTime (no radio)
     geom_point(data=Tagi,aes(color='PIT'), shape=21, size=4) +
     scale_colour_manual(name="",  
        values = c("Radio"="blue", "PIT"="red"))+
     scale_x_datetime(limits=xlimits)+
     scale_y_continuous(limits=c(0,235))+
     ggtitle(title)
    }else if # etc...I then subsetted for the various data types that were available for each plot.
person TCS    schedule 25.01.2015