How can I add a python's ggplot object to a ma

2019-02-26 10:01发布

My pandas DataFrame results_print has 2-dim arrays that are images. I print them like so:

n_rows = results_print.shape[0]
n_cols = results_print.shape[1]
f, a = plt.subplots(n_cols, n_rows, figsize=(n_rows, n_cols))
methods = ['img', 'sm', 'rbd', 'ft', 'mbd', 'binary_sal', 'sal']
for r in range(n_rows):
    for c, cn in zip(range(len(methods)), methods):
        a[c][r].imshow(results_print.at[r,cn], cmap='gray')

Now I created a python ggplot image object:

gg = ggplot(aes(x='pixels'), data=DataFrame({'pixels': results_print.at[6,'mbd'].flatten()})) + \
    geom_density(position='identity', stat='density') + \
    xlab('pixels') + \
    ylab('') + \
    ggtitle('Density of pixels') + \
    scale_y_log()

How can I add the gg as an element to my matplotlib grid?

1条回答
成全新的幸福
2楼-- · 2019-02-26 10:33

I think the solution would be to first draw the ggplot part. Then obtain the matplotlib figure object via plt.gcf() and the axes via plt.gca(). Resize the ggplot axes to fit into a grid and finally draw the rest of the matplotlib plots to that figure.

enter image description here

import ggplot as gp
import matplotlib.pyplot as plt
import numpy as np
# make ggplot
g = gp.ggplot(gp.aes(x='carat', y='price'), data=gp.diamonds)
g = g + gp.geom_point()
g = g + gp.ylab(' ')+ gp.xlab(' ')
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")
ax.set_position([0.1, 0.55, 0.4, 0.4])

#plot the rest of the maplotlib plots
for i in [2,3,4]:
    ax2 = fig.add_subplot(2,2,i)
    ax2.imshow(np.random.rand(23,23))
    ax2.set_title("matplotlib plot")
plt.show()
查看更多
登录 后发表回答