访问python ggplot中的轴或图

时间:2013-10-29 18:07:06

标签: python matplotlib pandas python-ggplot

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()的一些变体而没有成功。

3 个答案:

答案 0 :(得分:5)

自2013年提出此问题以来,可能会发生一些变化。从ggplot生成matplotlib图的方法是

g.make()

之后,可以通过

获得图形和轴
fig = plt.gcf()
ax = plt.gca()

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

然后,可以在matplotlib中添加其他功能,如this question的答案所示。

最后,可以使用通常的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()

答案 1 :(得分:3)

[这已经过时了当前的ggpy]

现在有一个scale_y_log()。如果您想在matplotlib中执行某些操作,可以使用

获取当前图形/轴
g = ggplot(...)
fig = g.draw()
#or
g.draw() # or print(g)
fig = plt.gcf() 
ax = plt.gca()

您的版本失败,因为ggplots在print(g)方法(调用ggplot.__repr__())的ggplot.draw()上绘制了图表,所以在构建之后就没有简单的matplotlib数字了ggplot对象,但仅在print(或g.draw())之后。 g.draw()也会返回该数字,因此您无需使用plt.gcf()

答案 2 :(得分:0)

你有没有尝试过:

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

不确定它是否正常工作,只是通过查看代码来猜测......