6

python ggplot 很棒,但仍然很新,我发现需要使用传统的 matplotlib 技术来修改我的绘图。但我不确定如何将轴实例传递给 ggplot,或者从中取回一个。

所以假设我建立了一个这样的情节:

import ggplot as gp

(显式导入)

p = gp.ggplot(gp.aes(x='basesalary', y='compensation'), data = df)
p + gp.geom_histogram(binwidth = 10000)      

到目前为止没有问题。但现在假设我想要对数刻度的 y 轴。我希望能够做到这一点:

plt.gca().set_yscale('log')

不幸plt.gca()的是,不访问由ggplot. 我最终得到了两个数字:来自 ggplot 的线性比例直方图,以及一个带有对数比例 y 轴的空图。

我已经尝试了一些变体,但都gca()没有gcf()成功。

4

3 回答 3

5

自 2013 年提出这个问题以来,可能已经发生了一些变化。从 ggplot 生成 matplotlib 图形的方法是

g.make()

之后,可以通过以下方式获得图形和轴

fig = plt.gcf()
ax = plt.gca()

或者,如果有更多轴,axes = fig.axes.

然后,可以在 matplotlib 中添加其他功能,如this question 's answer中所示。

最后,可以使用常用savefig命令保存绘图。

完整示例:

import ggplot as gp
import matplotlib.pyplot as plt

# produce ggplot
g = gp.ggplot(gp.aes(x='carat', y='price'), data=gp.diamonds)
g = g + gp.geom_point()
g = g + gp.ylab(' ')+ gp.xlab(' ')
# Make
g.make()

# obtain figure from ggplot
fig = plt.gcf()
ax = plt.gca()
# adjust some of the ggplot axes' parameters
ax.set_title("ggplot plot")
ax.set_xlabel("Some x label")
plt.savefig(__file__+".png")
plt.show()
于 2017-05-26T17:27:15.593 回答
3

[这与当前的 ggpy 已过时]

现在有一个scale_y_log(). 如果你想在 中做某事matplotlib,你可以得到当前的图形/轴

g = ggplot(...)
fig = g.draw()
#or
g.draw() # or print(g)
fig = plt.gcf() 
ax = plt.gca()

您的版本失败,因为 ggplotsprint(g)ggplot.__repr__()方法(调用)中绘制了图,所以在构造 ggplot 对象之后ggplot.draw()没有简单的图形,但只有在(或)之后。也返回数字,所以你不需要使用matplotlibprintg.draw()g.draw()plt.gcf()

于 2014-01-21T20:36:47.010 回答
0

你试过了吗:

p = gp.ggplot(gp.aes(x='basesalary', y='compensation'), data = df)
p + gp.geom_histogram(binwidth = 10000) + gp.scale_y_log()

不知道它是否像那样工作,只是通过查看代码来猜测......

于 2014-01-13T21:22:39.050 回答