Python与R在组织模式下的babel输出图形

Python与R在组织模式下的babel输出图形,python,org-mode,export-to-pdf,org-babel,Python,Org Mode,Export To Pdf,Org Babel,我正试图在组织模式下写一份报告。 从csv文件(单列三行,浮点数)读取数据,在条形图中进行比较,将图表嵌入到报告中,以便将其导出到latex,然后再导出到pdf 我很难理解我在python代码的条形图创建部分所做的工作,因为R_plot工作正常,这意味着图表以相同的组织模式嵌入到报告中:导出:结果:文件设置 我在python代码中犯了什么错误?如果我在交互模式下运行python代码,它会毫不费事地生成图表,但由于某些原因,在按单元格块运行时py_comparison.png不会被保存 #+NAM

我正试图在组织模式下写一份报告。 从csv文件(单列三行,浮点数)读取数据,在条形图中进行比较,将图表嵌入到报告中,以便将其导出到latex,然后再导出到pdf

我很难理解我在python代码的条形图创建部分所做的工作,因为R_plot工作正常,这意味着图表以相同的组织模式嵌入到报告中:导出:结果:文件设置

我在python代码中犯了什么错误?如果我在交互模式下运行python代码,它会毫不费事地生成图表,但由于某些原因,在按单元格块运行时py_comparison.png不会被保存

#+NAME: R_plot
#+BEGIN_SRC R :exports both :results output graphics :file r_comparison.png
# graph in R
library("ggplot2")
performance <- read.csv("comparison.csv", header=FALSE)$V1
df <- data.frame(resource = c("1node1core", "1node8core", "2node8core"), performance = performance)
p <- ggplot(data = df, aes(x=resource, y=performance)) +
     geom_bar(stat="identity", fill="steelblue") + 
     theme_minimal() +
     ggtitle("Computation time (min) vs. Resource (type)")
p
#+END_SRC

#+NAME: python_plot
#+BEGIN_SRC python :exports both :results output graphics :file py_comparison.png
import matplotlib.pyplot as plt; plt.rcdefaults()
import matplotlib.pyplot as plt
import csv

objects = ['1node1core', '1node8core', '2node8core']
y_pos = list(range(0, len(objects)))

performance = []
with open('comparison.csv', newline='') as csvfile:
  reader = csv.reader(csvfile)
  for row in reader:
    f_row = float(row[0])
    performance.append(f_row)

plt.bar(y_pos, performance, align='center', alpha=0.5)
plt.xticks(y_pos, objects)
plt.ylabel('Time')
plt.title('Resource vs. Time')

plt.show()
#+END_SRC
#+名称:R#U绘图
#+BEGIN_SRC R:导出两者:结果输出图形:文件R_comparison.png
#R中的图
图书馆(“ggplot2”)

性能我认为python代码块的头值是错误的。
:结果文件
:文件
之间存在差异。根据文件(为清晰起见进行了修订):

有四类:结果头参数。每个“src”代码 块在每个类中只能使用一个选项。[……]

收藏[…]

  • 默认值。功能模式。结果是“src”代码块中最后一条语句返回的值。像Python这样的语言可能会 在“src”代码块中需要显式返回语句。用法 示例::结果值
类型[…]

  • 文件解释为文件的路径。插入指向该文件的链接。用法示例::结果值文件

外部:保存代码执行结果的文件 块[…]一些语言,如“R”、“dot”、“ditaa”和“gnuplot”, 自动将源代码包装到其他样板代码中。 这种代码包装有助于重新创建输出,尤其是图形 输出,只执行:文件内容

在python中,
plt.show()
(或就此而言,
savefig
)的结果是
None
,图像只是一个副作用,因此不会插入任何内容。在R中,它之所以能工作是因为上面提到的样板纸包装器

因此,在python中,您需要保存并返回图像,而不是显示图像。像这样的方法应该会奏效:

#+NAME: python_plot
#+BEGIN_SRC python :results img.png file

import matplotlib.pyplot as plt
plt.plot(range(5))
plt.savefig('img.png')
return 'img.png'

#+END_SRC