gpt4 book ai didi

org-mode babel 输出图形中的 Python 与 R

转载 作者:行者123 更新时间:2023-11-28 22:19:05 24 4
gpt4 key购买 nike

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

我很难理解我在 python 代码的条形创建部分所做的事情,因为 R_plot 工作正常,这意味着图表在相同的 org-mode :export :results :file 设置下嵌入到报告中。

我在 python 代码上做错了什么?如果我在交互模式下运行 python 代码,它会毫无问题地生成图表,但由于某种原因,当我通过单元格 block 运行时,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

+END_SRC

最佳答案

我认为您的 python 代码块 header 值是错误的。 :results <file name> file之间有区别和 :file <file name> .根据文档(为清楚起见进行了编辑):

:results file

There are four classes of :results header arguments. Each ‘src’ code block can take only one option per class. [...]

Collection [...]

  • value Default. Functional mode. Result is the value returned by the last statement in the ‘src’ code block. Languages like Python may require an explicit return statement in the ‘src’ code block. Usage example: :results value.

Type [...]

  • file Interpret as path to a file. Inserts a link to the file. Usage example: :results value file.

:file <file name>

An external :file that saves the results of execution of the code block. [...] Some languages, such as ‘R’, ‘dot’, ‘ditaa’, and ‘gnuplot’, automatically wrap the source code in additional boilerplate code. Such code wrapping helps recreate the output, especially graphics output, by executing just the :file contents.

在 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

关于org-mode babel 输出图形中的 Python 与 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50054520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com