Python:xticks和标签粘贴在子批的一侧
我在一个图形上绘制了3张地图。由于某种原因,当我标记X轴时,数字都被塞满在图的一侧。是否有人将这些值隔开Python:xticks和标签粘贴在子批的一侧,python,matplotlib,Python,Matplotlib,我在一个图形上绘制了3张地图。由于某种原因,当我标记X轴时,数字都被塞满在图的一侧。是否有人将这些值隔开 for j in xrange(0,3): data = mydatalist[j] a.append(fig.add_subplot(3,2,j+1))] m.append(Basemap(projection='mill', llcrnrlat=-90, urcrnrlat=90, \ llcrnrlon=30,ur
for j in xrange(0,3):
data = mydatalist[j]
a.append(fig.add_subplot(3,2,j+1))]
m.append(Basemap(projection='mill', llcrnrlat=-90, urcrnrlat=90, \
llcrnrlon=30,urcrnrlon=390, resolution='c', ax=a[j]))
x=np.linspace(30,390,288)
y = np.linspace(-90, 90, 234)
x, y = np.meshgrid(x, y)
x, y = m[j](x,y)
cintervals = [-0.1,-0.09, -0.08, -0.07, -0.06,-0.05, -0.04, -0.03, -0.02,-0.01,\
0, 0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1]
mesh = m[j].contourf(x,y,data,cintervals, cmap=plt.cm.jet)
xlab=np.concatenate([np.arange(30,181,30),np.arange(-150,31,30)])
plt.xticks(np.linspace(30, 390, 13),xlab)
plt.tick_params(labelsize=8)
plt.show()
切换到Gall赤平投影解决了我的问题,尽管我不确定为什么它在Miller投影上不起作用。切换到Gall赤平投影解决了我的问题,虽然我不知道为什么米勒投影不起作用。你的问题是地图坐标和纬度/经度之间的坐标不匹配 您可以指定要沿x轴显示的x记号,其间距根据
np.linspace(30, 390, 13)
但是-如果您查看x
中的值(即您在contourf
线上绘制的实际x坐标),您会看到它们从0
到40030154.74248523
要避免这种情况,请更换
plt.xticks(np.linspace(30, 390, 13),xlab)
与
注意-您可以通过一个小得多但完整的示例来产生这种效果,这可能有助于您隔离问题。请看一下如何生成一个。目前,您的代码没有运行,因为它缺少
a
、m
、mydatalist
和所需的导入
我在下面输入了您可能提供的代码—保留子地块循环—尽管实际上,即使只有一个地块,而不是子地块,您也可能获得相同的效果
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
x=np.linspace(30,390,288)
y = np.linspace(-90, 90, 234)
xg, yg = np.meshgrid(x, y)
fig = plt.figure()
for j in xrange(0,3):
a = fig.add_subplot(3,2,j+1)
m = Basemap(projection='mill', llcrnrlat=-90, urcrnrlat=90, llcrnrlon=30,urcrnrlon=390, resolution='c', ax=a)
m.drawcoastlines() # Just put something on the map - doesn't need to be your complex contour plot
x, y = m(xg,yg)
#You can see the problem with using hard-coded 30,390 if you print this
#x=30 and x=390 are both in the lowest 0.001% of the x axis
#print x
xlab=np.concatenate([np.arange(30,181,30),np.arange(-150,31,30)])
plt.xticks(np.linspace(30,390,13),xlab)
#Working version commented below
#plt.xticks(np.linspace(min(x[0]),max(x[0]), len(xlab)),xlab)
plt.tick_params(labelsize=8)
plt.show()
您的问题是地图坐标和lat/long之间的坐标不匹配 您可以指定要沿x轴显示的x记号,其间距根据
np.linspace(30, 390, 13)
但是-如果您查看x
中的值(即您在contourf
线上绘制的实际x坐标),您会看到它们从0
到40030154.74248523
要避免这种情况,请更换
plt.xticks(np.linspace(30, 390, 13),xlab)
与
注意-您可以通过一个小得多但完整的示例来产生这种效果,这可能有助于您隔离问题。请看一下如何生成一个。目前,您的代码没有运行,因为它缺少
a
、m
、mydatalist
和所需的导入
我在下面输入了您可能提供的代码—保留子地块循环—尽管实际上,即使只有一个地块,而不是子地块,您也可能获得相同的效果
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
x=np.linspace(30,390,288)
y = np.linspace(-90, 90, 234)
xg, yg = np.meshgrid(x, y)
fig = plt.figure()
for j in xrange(0,3):
a = fig.add_subplot(3,2,j+1)
m = Basemap(projection='mill', llcrnrlat=-90, urcrnrlat=90, llcrnrlon=30,urcrnrlon=390, resolution='c', ax=a)
m.drawcoastlines() # Just put something on the map - doesn't need to be your complex contour plot
x, y = m(xg,yg)
#You can see the problem with using hard-coded 30,390 if you print this
#x=30 and x=390 are both in the lowest 0.001% of the x axis
#print x
xlab=np.concatenate([np.arange(30,181,30),np.arange(-150,31,30)])
plt.xticks(np.linspace(30,390,13),xlab)
#Working version commented below
#plt.xticks(np.linspace(min(x[0]),max(x[0]), len(xlab)),xlab)
plt.tick_params(labelsize=8)
plt.show()
这是一个猜测,但是
x
的长度是288,而xticks
的长度是13。@Scott改为plt.xticks(np.linspace(30390288),xlab)
没有什么区别。你可以发布一个mydatalist[j]的小样本吗
和a
和m
在进入循环之前是否为空?@Scott mydatalist[j]是一个形状为234*288的数组。a和m在进入循环之前是空的。这是一个猜测,但是x
的长度是288,而xticks
的长度是13。@Scott更改为plt.xticks(np.linspace(30,390,288),xlab)
没有什么区别。你可以发布一个mydatalist[j]的小样本吗
和a
和m
在进入循环之前是否为空?@Scott mydatalist[j]是一个形状为234*288的数组。a和m在进入循环之前是空的。这是一个猜测,但是x
的长度是288,而xticks
的长度是13。@Scott更改为plt.xticks(np.linspace(30,390,288),xlab)
没有什么区别。你可以发布一个mydatalist[j]的小样本吗
和a
和m
在进入循环之前是否为空?@Scott mydatalist[j]是一个形状为234*288的数组。a和m在进入循环之前为空。