如何在python的loglog轴上的散点图中添加背景图像?

时间:2019-01-14 11:19:32

标签: python matplotlib

如何在具有对数坐标轴的散点图上添加背景图像?我的问题是背景图像也以我不想的日志样式重新缩放。

ax3 = fig2.add_subplot(1, 1, 1)
pathimage=directory+'\Robertson.PNG'
img = mpimg.imread(directory+'\Robertson.PNG')  
ax3.scatter(rf_layer,qc_layer)
ax3.set_title(filename, y=1.1,fontsize=12)
ax3.set_yscale('log')
ax3.set_xscale('log')
ax3.legend(Legend,loc=9, bbox_to_anchor=(0.5, -0.2),ncol=len(layerdepth))
ax3.set_ylim([1, 100])
ax3.set_xlim([0.1, 10])
ax3.set_xlabel('Rf in %')
ax3.set_ylabel('qc in MPa')          
ax3.imshow(img,extent=[0.1,10,1,100])

1 个答案:

答案 0 :(得分:1)

您可以使用双轴(未设置为对数标度)来执行此操作。在这种情况下,我们要使x和y轴都成对,因此我们可以堆叠命令,如here所示:

ax4 = ax3.twinx().twiny()

另一种选择是只在与第一个实例相同的位置(从注释中的@ImportanceOfBeingErnest开始)创建一个新的Axes实例。例如:

ax4 = fig.add_subplot(111, label="ax4")

我们还需要使ax3透明,以便我们可以看到下面的图片(facecolor='None')。

我们还需要将zorder设置为ax3上方的ax4

这是一个有效的示例:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

# Dummy data
rf_layer = 0.1 + np.random.rand(20) * 9.9
qc_layer = 1. + np.random.rand(20) * 99.

fig2 = plt.figure()

# Make ax3 transparent so we can see image behind
ax3 = fig2.add_subplot(1, 1, 1, facecolor='None')

pathimage='./stinkbug.png'
img = mpimg.imread(pathimage)

ax3.scatter(rf_layer, qc_layer)
ax3.set_title('my title', y=1.1, fontsize=12)
ax3.set_yscale('log')
ax3.set_xscale('log')
ax3.set_ylim([1, 100])
ax3.set_xlim([0.1, 10])
ax3.set_xlabel('Rf in %')
ax3.set_ylabel('qc in MPa')          

# Create second axes
ax4 = ax3.twinx().twiny()

# Or alternatively
# ax4 = fig.add_subplot(111, label="ax4")

# Add image to twin axes
ax4.imshow(img)

# Fix zorder so ax3 on top of ax4
ax3.set_zorder(10)
ax4.set_zorder(1)

# Turn off ticks from twin axes
ax4.set_yticks([])
ax4.set_xticks([])

plt.show()

enter image description here