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()
的一些变体而没有成功。
答案 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()
不确定它是否正常工作,只是通过查看代码来猜测......