在颜色条图上添加辅助独立轴

时间:2020-10-19 16:09:11

标签: python matplotlib colorbar

enter image description here我尝试将第二个x轴作为nm比例添加到图的顶部,可以使用诸如nm = 495.04-x * 0.059的相关函数从像素获得该比例我想了办法,但尝试了很多次却失败了... 谢谢

代码:

import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm

data = pd.read_csv('BS3053_BFI.dat', sep='.', delimiter='\t',engine = 'python', skiprows=0, header=None)  

data = pd.DataFrame(data).transpose()
pixel_x = data.shape[1]  # pixels in x direction
pixel_y = data.shape[0]  # pixels in y direction

fig = plt.figure()
ax1 = fig.add_subplot(111)
im = ax1.imshow(data, cmap=plt.cm.gnuplot2,extent=[0,1024,257,0],interpolation=None)# ,,
ax1.set_xlabel('Pixel', fontsize=12)[![enter image description here][1]][1]
ax1.set_ylabel('CCD height', fontsize=12)
ax1.set_ylim([0, 257])
ax1.set_yticklabels([])
ax1.tick_params(direction='in',axis='both', length=.1)
ax1.text(0,259, r'BS3053, Slit width 70 $\mu m$', fontsize=10)

# create an axes on the right side of ax. The width of cax will be 5%
# of ax and the padding between cax and ax will be fixed at 0.05 inch.
divider = make_axes_locatable(ax1)
cax = divider.append_axes("right", size="4%", pad=0.05)
plt.colorbar(im, cax=cax);
plt.show()

1 个答案:

答案 0 :(得分:0)

有时候,一种简单的思维方式可以使您的生活变得轻松... 解决了。​​

'''

import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.axes_grid1 import make_axes_locatable 
from matplotlib.ticker import AutoLocator


data = pd.read_csv('BS2350_slit_60um.dat', sep='.', delimiter='\t',engine = 'python', skiprows=0, header=None)  
data = pd.DataFrame(data).transpose()
pixel_x = data.shape[1]  # pixels in x direction
pixel_y = data.shape[0]  # pixels in y direction
fig = plt.figure(figsize=(6.4, 6.4))
ax = fig.add_subplot(111)
ax.set_aspect('auto')
im = ax.imshow(data, cmap=plt.cm.gnuplot2,aspect='equal',extent=[0,1024,257,0],interpolation=None)# ,,
ax.set_xlabel('Pixel', fontsize=12)
ax.set_ylabel('CCD height', fontsize=12)
ax.set_ylim([0, 257])
#ax.set_xticklabels([])
ax.set_yticklabels([])
ax.tick_params(direction='in',axis='both', length=.1)
#ax.text(0,259, r'slit width, 40 $\mu m$, minimum slit height', fontsize=10)
#print(data[1][:])

pixel = np.linspace(0,1024)
def pixelTonm(pixel):
    nm = 495.04-pixel*0.059
    return nm 
def nmTopixel(nm):
    pixel = (495.04-nm) / 0.059
    return pixel
    
ax2 = ax.secondary_xaxis('top', functions=(pixelTonm,nmTopixel))   
ax2.set_xlabel('Wavelength / nm', fontsize=12)
ax2.tick_params(direction='out',axis='x', length=2)

# create an axes on the right side of ax. The width of cax will be 5%
# of ax and the padding between cax and ax will be fixed at 0.05 inch.
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="2.5%", pad=0.05)
plt.colorbar(im, cax=cax);
plt.savefig('slit_40um_rf_.jpg') [![Afert adding the second axis on the top, and how it looks like][1]][1]
plt.show()

'''