|
From: Dyah r. m. <dya...@gm...> - 2014-05-21 01:57:41
|
I am a newbie in python and I try to plot data like below :
base_dir = 'C:/DATA2013/Day_E/'
nc_fnames = ['20130203.faieb3p4g.nc',
'20130203.faieb3p4g.nc','20130203.faieb3p4g.nc']
# beams
ibeams = [0,1,2]
# Change directory
os.chdir(base_dir)
for i, fname in enumerate(nc_fnames):
# Open file
fd = nc.Dataset(fname, 'r')
# Read variables
beam = fd.variables['beam'][:]
rng = fd.variables['range'][:]
tim = fd.variables['time'][:]
pwr = fd.variables['pwr'][:]
nfft = fd.variables['nfft'][0]
pn = fd.variables['pnoise'][:]
# Close netCDF file
fd.close()
# Specify beam
ibeam = ibeams[i]
# Time convertion
tim = tim/3600.0
#Plot
p_plot = pwr[ibeam]
for it in range(len(tim)):
p_plot[it] = p_plot[it] - pn[ibeam][it] - 10.*np.log10(nfft)
p_plot = p_plot.transpose()
#Specify subplot
pl.subplot(311 + i)#Contour plot
pl.contourf(tim, rng, p_plot) #Plot colorbar
pl.colorbar()
# Set X and Y axis lower/upper limit
set_xy = range(4)
set_xy[0] = 18.0 # x min
set_xy[1] = 30.0 # x max
set_xy[2] = 90.0 # y min
set_xy[3] = 170.0 # y max
pl.axis(set_xy)
# Set labels
pl.xlabel('time (hours)')
pl.ylabel('range (km)')
pl.show()
The result looks like three panels with different colorbar for each panel.
How do I make only one colorbar for all panels? Thank you in advance.
|
|
From: Alex G. <ale...@co...> - 2014-05-21 02:04:56
|
I would consider using the AxesGrid toolkit [1], which makes it very easy to have a single colorbar for multiple plots. [1] - http://matplotlib.org/1.3.1/mpl_toolkits/axes_grid/users/overview.html Thanks, Alex On Tue, May 20, 2014 at 8:04 PM, Alex Goodman <ale...@co...>wrote: > I would consider using the AxesGrid toolkit [1], which makes it very easy > to have a single colorbar for multiple plots. > > [1] - > http://matplotlib.org/1.3.1/mpl_toolkits/axes_grid/users/overview.html > > Thanks, > Alex > > > On Tue, May 20, 2014 at 7:57 PM, Dyah rahayu martiningrum < > dya...@gm...> wrote: > >> I am a newbie in python and I try to plot data like below : >> >> base_dir = 'C:/DATA2013/Day_E/' >> nc_fnames = ['20130203.faieb3p4g.nc', '20130203.faieb3p4g.nc','20130203.faieb3p4g.nc'] >> # beams >> ibeams = [0,1,2] >> # Change directory >> os.chdir(base_dir) >> for i, fname in enumerate(nc_fnames): >> >> # Open file >> fd = nc.Dataset(fname, 'r') >> >> # Read variables >> beam = fd.variables['beam'][:] >> rng = fd.variables['range'][:] >> tim = fd.variables['time'][:] >> pwr = fd.variables['pwr'][:] >> nfft = fd.variables['nfft'][0] >> pn = fd.variables['pnoise'][:] >> >> # Close netCDF file >> fd.close() >> >> # Specify beam >> ibeam = ibeams[i] >> >> # Time convertion >> tim = tim/3600.0 >> >> #Plot >> p_plot = pwr[ibeam] >> >> for it in range(len(tim)): >> p_plot[it] = p_plot[it] - pn[ibeam][it] - 10.*np.log10(nfft) >> >> p_plot = p_plot.transpose() >> #Specify subplot >> pl.subplot(311 + i)#Contour plot >> pl.contourf(tim, rng, p_plot) #Plot colorbar >> pl.colorbar() >> # Set X and Y axis lower/upper limit >> set_xy = range(4) >> set_xy[0] = 18.0 # x min >> set_xy[1] = 30.0 # x max >> set_xy[2] = 90.0 # y min >> set_xy[3] = 170.0 # y max >> pl.axis(set_xy) >> # Set labels >> pl.xlabel('time (hours)') >> pl.ylabel('range (km)') >> >> pl.show() >> >> >> The result looks like three panels with different colorbar for each >> panel. How do I make only one colorbar for all panels? Thank you in advance. >> >> >> ------------------------------------------------------------------------------ >> "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE >> Instantly run your Selenium tests across 300+ browser/OS combos. >> Get unparalleled scalability from the best Selenium testing platform >> available >> Simple to use. Nothing to install. Get started now for free." >> http://p.sf.net/sfu/SauceLabs >> _______________________________________________ >> Matplotlib-users mailing list >> Mat...@li... >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >> >> > > > -- > Alex Goodman > Graduate Research Assistant > Department of Atmospheric Science > Colorado State University > -- Alex Goodman Graduate Research Assistant Department of Atmospheric Science Colorado State University |
|
From: Benjamin R. <ben...@ou...> - 2014-05-21 13:10:43
|
In v1.3, we added the ability to provide a list of axes objects to pyplot.colorbar() (and maybe fig.colorbar()?). All of the axes objects in that list would then get resized similarly to make room for the colorbar. http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.colorbar The AxesGrid option is also very nice, and I use it a lot. Cheers! Ben Root On Tue, May 20, 2014 at 10:04 PM, Alex Goodman <ale...@co...>wrote: > I would consider using the AxesGrid toolkit [1], which makes it very easy > to have a single colorbar for multiple plots. > > [1] - > http://matplotlib.org/1.3.1/mpl_toolkits/axes_grid/users/overview.html > > Thanks, > Alex > > > On Tue, May 20, 2014 at 8:04 PM, Alex Goodman <ale...@co...>wrote: > >> I would consider using the AxesGrid toolkit [1], which makes it very easy >> to have a single colorbar for multiple plots. >> >> [1] - >> http://matplotlib.org/1.3.1/mpl_toolkits/axes_grid/users/overview.html >> >> Thanks, >> Alex >> >> >> On Tue, May 20, 2014 at 7:57 PM, Dyah rahayu martiningrum < >> dya...@gm...> wrote: >> >>> I am a newbie in python and I try to plot data like below : >>> >>> base_dir = 'C:/DATA2013/Day_E/' >>> nc_fnames = ['20130203.faieb3p4g.nc', '20130203.faieb3p4g.nc','20130203.faieb3p4g.nc'] >>> # beams >>> ibeams = [0,1,2] >>> # Change directory >>> os.chdir(base_dir) >>> for i, fname in enumerate(nc_fnames): >>> >>> # Open file >>> fd = nc.Dataset(fname, 'r') >>> >>> # Read variables >>> beam = fd.variables['beam'][:] >>> rng = fd.variables['range'][:] >>> tim = fd.variables['time'][:] >>> pwr = fd.variables['pwr'][:] >>> nfft = fd.variables['nfft'][0] >>> pn = fd.variables['pnoise'][:] >>> >>> # Close netCDF file >>> fd.close() >>> >>> # Specify beam >>> ibeam = ibeams[i] >>> >>> # Time convertion >>> tim = tim/3600.0 >>> >>> #Plot >>> p_plot = pwr[ibeam] >>> >>> for it in range(len(tim)): >>> p_plot[it] = p_plot[it] - pn[ibeam][it] - 10.*np.log10(nfft) >>> >>> p_plot = p_plot.transpose() >>> #Specify subplot >>> pl.subplot(311 + i)#Contour plot >>> pl.contourf(tim, rng, p_plot) #Plot colorbar >>> pl.colorbar() >>> # Set X and Y axis lower/upper limit >>> set_xy = range(4) >>> set_xy[0] = 18.0 # x min >>> set_xy[1] = 30.0 # x max >>> set_xy[2] = 90.0 # y min >>> set_xy[3] = 170.0 # y max >>> pl.axis(set_xy) >>> # Set labels >>> pl.xlabel('time (hours)') >>> pl.ylabel('range (km)') >>> >>> pl.show() >>> >>> >>> The result looks like three panels with different colorbar for each >>> panel. How do I make only one colorbar for all panels? Thank you in advance. >>> >>> >>> ------------------------------------------------------------------------------ >>> "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE >>> Instantly run your Selenium tests across 300+ browser/OS combos. >>> Get unparalleled scalability from the best Selenium testing platform >>> available >>> Simple to use. Nothing to install. Get started now for free." >>> http://p.sf.net/sfu/SauceLabs >>> _______________________________________________ >>> Matplotlib-users mailing list >>> Mat...@li... >>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >>> >>> >> >> >> -- >> Alex Goodman >> Graduate Research Assistant >> Department of Atmospheric Science >> Colorado State University >> > > > > -- > Alex Goodman > Graduate Research Assistant > Department of Atmospheric Science > Colorado State University > > > ------------------------------------------------------------------------------ > "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE > Instantly run your Selenium tests across 300+ browser/OS combos. > Get unparalleled scalability from the best Selenium testing platform > available > Simple to use. Nothing to install. Get started now for free." > http://p.sf.net/sfu/SauceLabs > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > |
|
From: dydy2014 <dya...@gm...> - 2014-06-01 09:40:28
|
Dear all,
It is still the same problem. Actually my code like below :
import os
import netCDF4 as nc
import numpy as np
import matplotlib.pylab as pl
base_dir = 'C:/DATA2011/' # Note PC
nc_file1 = '20110301.faifb1p16m2.nc' # Single beam data
nc_file2 = '20110301.faifb1p16m3.nc' # Single beam data
nc_file3 = '20110301.faifb1p16m4.nc' # Single beam data
# Change directory
os.chdir(base_dir)
# Open netCDF file
fd1 = nc.Dataset(nc_file1, 'r')
fd2 = nc.Dataset(nc_file2, 'r')
fd3 = nc.Dataset(nc_file3, 'r')
# Read variables from the netCDF file
date1 = fd1.variables['date'][:]
beam1 = fd1.variables['beam'][:]
az1 = fd1.variables['az'][:]
ze1 = fd1.variables['ze'][:]
rng1 = fd1.variables['range'][:]
tim1 = fd1.variables['time'][:]
pwr1 = fd1.variables['pwr'][:]
dpl1 = fd1.variables['dpl'][:]
nfft1 = fd1.variables['nfft'][0]
pn1 = fd1.variables['pnoise'][:]
# Read variables from the netCDF file
date2 = fd2.variables['date'][:]
beam2 = fd2.variables['beam'][:]
az2 = fd2.variables['az'][:]
ze2 = fd2.variables['ze'][:]
rng2 = fd2.variables['range'][:]
tim2 = fd2.variables['time'][:]
pwr2 = fd2.variables['pwr'][:]
dpl2 = fd2.variables['dpl'][:]
nfft2 = fd2.variables['nfft'][0]
pn2 = fd2.variables['pnoise'][:]
# Read variables from the netCDF file
date3 = fd3.variables['date'][:]
beam3 = fd3.variables['beam'][:]
az3 = fd3.variables['az'][:]
ze3 = fd3.variables['ze'][:]
rng3 = fd3.variables['range'][:]
tim3 = fd3.variables['time'][:]
pwr3 = fd3.variables['pwr'][:]
dpl3 = fd3.variables['dpl'][:]
nfft3 = fd3.variables['nfft'][0]
pn3 = fd3.variables['pnoise'][:]
# Close netCDF file
fd1.close()
fd2.close()
fd3.close()
# Speify which beam to show
ibeam1 = 0
ibeam2 = 0
ibeam3 = 0
# Time convertion from seconds to hours
tim1 = tim1/3600.0
tim2 = tim2/3600.0
tim3 = tim3/3600.0
# Select data of the specified beam, and transpose
p_plot1 = pwr1[ibeam1]
for it1 in range(len(tim1)):
p_plot1[it1] = p_plot1[it1] - pn1[ibeam1][it1] - 10.*np.log10(nfft1)
p_plot1 = p_plot1.transpose()
# Select data of the specified beam, and transpose
p_plot2 = pwr2[ibeam2]
for it2 in range(len(tim2)):
p_plot2[it2] = p_plot2[it2] - pn2[ibeam2][it2] - 10.*np.log10(nfft2)
p_plot2 = p_plot2.transpose()
# Select data of the specified beam, and transpose
p_plot3 = pwr3[ibeam3]
for it3 in range(len(tim3)):
p_plot3[it3] = p_plot3[it3] - pn3[ibeam3][it3] - 10.*np.log10(nfft3)
p_plot3 = p_plot3.transpose()
# Count max SNR (single beam)
pthres1 = 2.0
N_total1 = 0
N_signal1 = 0
for j in range(len(tim1)):
if 18.0 <= tim1[j] <= 30.0:
for i in range(len(rng1)):
N_total1 = N_total1 + 1
if 200.0 <= rng1[i] <= 550 :
if p_plot1[i][j] > pthres1:
ipthres1 = i
jpthres1 = j
N_signal1 = N_signal1 + 1
# Count max SNR (single beam)
pthres2 = 2.0
N_total2 = 0
N_signal2 = 0
for j in range(len(tim2)):
if 18.0 <= tim2[j] <= 30.0:
for i in range(len(rng2)):
N_total2 = N_total2 + 1
if 200.0 <= rng2[i] <= 550 :
if p_plot2[i][j] > pthres2:
ipthres2 = i
jpthres2 = j
N_signal2 = N_signal2 + 1
# Count max SNR (single beam)
pthres3 = 2.0
N_total3 = 0
N_signal3 = 0
for j in range(len(tim3)):
if 18.0 <= tim3[j] <= 30.0:
for i in range(len(rng3)):
N_total3 = N_total3 + 1
if 200.0 <= rng3[i] <= 550 :
if p_plot3[i][j] > pthres3:
ipthres3 = i
jpthres3 = j
N_signal3 = N_signal3 + 1
fig = pl.figure()
#Plot contour
axs1=fig.add_subplot(3,1,1)
v1 = np.linspace(0., 50., 10., endpoint=True)
axs1=pl.contourf(tim1, rng1, p_plot1, v1, cmap1=pl.cm.jet)
x1 = pl.colorbar(ticks=v1)
print x1
# Set X and Y axis lower/upper limit
set_xy1 = range(4)
set_xy1[0] = 18.0 # x min
set_xy1[1] = 30.0 # x max
set_xy1[2] = 200.0 # y min
set_xy1[3] = 550.0 # y max
pl.axis(set_xy1)
axs2=fig.add_subplot(3,1,2)
v2 = np.linspace(0., 50., 10., endpoint=True)
axs2=pl.contourf(tim2, rng2, p_plot2, v2, cmap2=pl.cm.jet)
x2 = pl.colorbar(ticks=v2)
print x2
# Set X and Y axis lower/upper limit
set_xy2 = range(4)
set_xy2[0] = 18.0 # x min
set_xy2[1] = 30.0 # x max
set_xy2[2] = 200.0 # y min
set_xy2[3] = 550.0 # y max
pl.axis(set_xy2)
axs3=fig.add_subplot(3,1,3)
v3 = np.linspace(0., 50., 10., endpoint=True)
axs3=pl.contourf(tim3, rng3, p_plot3, v3, cmap3=pl.cm.jet)
x3 = pl.colorbar(ticks=v3)
print x3
# Set X and Y axis lower/upper limit
set_xy3 = range(4)
set_xy3[0] = 18.0 # x min
set_xy3[1] = 30.0 # x max
set_xy3[2] = 200.0 # y min
set_xy3[3] = 550.0 # y max
pl.axis(set_xy3)
pl.show()
# Set X and Y axis lower/upper limit
set_xy1 = range(4)
set_xy1[0] = 18.0 # x min
set_xy1[1] = 30.0 # x max
set_xy1[2] = 200.0 # y min
set_xy1[3] = 550.0 # y max
pl.axis(set_xy1)
Could somebody help me to make the code shorter by using loop and the image
only show one colorbar for three image?.
Recent result :
<http://matplotlib.1069221.n5.nabble.com/file/n43464/figure_1.png>
--
View this message in context: http://matplotlib.1069221.n5.nabble.com/One-colorbar-for-many-plot-tp43430p43464.html
Sent from the matplotlib - users mailing list archive at Nabble.com.
|