将 R ggplot2 代码转换为 Python plotnine - 无法绘制图形

问题描述

我有一个可用的 R 代码,它使用来自自定义函数的数据生成箱线图。 我试图将它转换为 Python plotnine,但我无法让它工作并绘制图形。 你能帮我弄清楚吗?

代码粘贴在下面... 非常感谢!!!打呼噜

import numpy as np
import pandas as pd
from scipy import stats as st
import plotnine as pn



file_path = r'C:\Users\snirh\OneDrive\Desktop\KarnieliR'
geb_data= pd.read_csv(file_path + r'\Master_Data_File.csv')

# R stat function that mtache produce the desiered data for the Box plot
#min.mean.se.max <- function(x) {
#  r <- c(mean(x) - SE(x)*1.96,mean(x) - SE(x),mean(x),mean(x) + SE(x),mean(x) + SE(x)*1.96)
#  names(r) <- c("ymin","lower","middle","upper","ymax")
#  r
#}

#my translation of the R code above to python
def mean_sem_ci(data):
    middle= np.mean(data)
    my_sem= st.sem(data)
    ymin= middle- my_sem*1.96
    lower= middle - my_sem
    upper= middle + my_sem
    ymax= middle + my_sem*1.96
    #result_dict = {'middle':middle,'upper': upper,'lower': lower,'ymax': ymax,'ymin': ymin} #output format option 1
     #result_df = pd.Series([ymin,lower,middle,upper,ymax],index= ['ymin','lower','middle','upper','ymax']) #output format option 2
     #result_df2= pd.DataFrame(result_dict,columns= ['ymin','ymax']) #output format option 3
     result_arr= np.array([(ymin,ymax)],dtype=[('ymin',float),('lower',('middle',('upper',('ymax',float)]) #output format option 4
    return result_arr




# ggplot2 code for Box plots from R that use the data from the R function above
#p1 <- ggplot(aes(y = GG,x = factor(Temporal_scale,levels = c('Small','Medium','Large','Extra Large'))),data = geb_data)
#p1 <- p1 + stat_summary(fun.data = min.mean.se.max,geom = "Boxplot",position = "dodge",width=rel(0.5),color="grey 25") + 
  #ggtitle("fig 3 temporal scales") + 
 # xlab("Spatial Scale") + 
  #ylab("Heterogenity Magnitude")+
  #coord_cartesian(
   # xlim = NULL,#  ylim = c(-0.6,0.6),#  expand = TRUE,# default = FALSE,#  clip = "on"
  #)+
 # theme(panel.background = element_rect(fill = 'white',colour = 'black'),panel.grid=element_line(NA))
 #p1

# my attempt to convert the R code above to python using plotnine to generate the same Boxplot
fig1= (pn.ggplot( data = geb_data,mapping= pn.aes(y = 'GG',x = 'Temporal scale')) + 
       pn.stats.stat_summary(na_rm = True,fun_data = mean_sem_ci,geom = 'Boxplot',position = 'dodge',width = 0.5,color = 'oarnge')+
       pn.labels.xlab('Spatial Scale')+
       pn.labels.xlab('Heterogeneity Magnitude')+
       pn.coords.coord_cartesian(ylim= (-0.6,0.6))+
       pn.themes.theme_seaborn(style= 'whitegrid',context= 'paper',font_scale=2))

fig1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)