【问题标题】:Contour labels in PythonPython中的轮廓标签
【发布时间】:2015-01-26 07:57:55
【问题描述】:

我想绘制一系列等高线,但是标签所在的位置和线之间的间距会随着页面的增加而增加。我已经绘制了一个附加的示例。我不想要小数点,因此使用 fmt,但这似乎改变了不同点的间距(理想情况下,我希望等高线断点和书写之间有大约半厘米的间隙。

顺便说一句,我还尝试使用手动位置,以便将每个标签绘制在某个位置,但由于有两条具有相同值的单独等高线,我不确定这是否可行。谢谢!

这是我的代码;

from netCDF4 import Dataset
import numpy as np
from matplotlib import pyplot as plt

#############################
#                           #
#       Parameter Setup     #
#                           #
#############################

    myfile = '/home/ubuntu/Documents/Control/puma/run/Control.nc'   #Control U
myfile2 =  '/home/ubuntu/Documents/Control_Trop_40K/puma/run/ControlTrop.nc'    #Perturbed U
Title = 'U'
Units = '!U'
Variable = 'ua'

#############################
#############################
Import = Dataset(myfile, mode='r') 
Import2 = Dataset(myfile2, more='r')

latt = Import.variables['lat'][:]
level = Import.variables['lev'][:] 
UControl = Import.variables[Variable][:]
#UPerturbed = Import2.variables[Variable][:]


#UChange = UPerturbed - UControl
#UChange = np.mean(UChange[:,:,:,0], axis=0)
UControl = np.mean(UControl[:,:,:,0], axis=0)


Contourrange = [10]
CS=plt.contour(latt,level,UControl,Contourrange, colors='k')
plt.clabel(CS, fontsize=10, inline=1,fmt = '%1.0f',ticks=Contourrange)



plt.gca().invert_yaxis()
plt.yscale('log', nonposy='clip')
plt.xticks(np.round((np.arange(-90, 91, 30)), 2))
plt.xlim(xmin=-90)
plt.yticks([900,800,700,600,500,400,300,200,100,50])
plt.gca().set_yticklabels([900,800,700,600,500,400,300,200,100,50])


plt.xlabel('Latitude')        
plt.ylabel('Pressure (hPa)')    
plt.title(Title)
plt.show()

图片如下:

【问题讨论】:

  • Edit = 我发现了 inline_spacing,这有帮助,但它似乎仍然在图表的较高位置更加分离(可能是因为它是对数轴)
  • 您看过plt.clabelinline_spacing 参数吗?我认为这可以控制您要执行的操作。
  • 我手动设置了这个,但它似乎并没有始终如一地设置正确的像素数量 - 靠近顶部的值仍然间隔更大
  • 将此参数设置为 6,并添加更多行,它仍然将这些行间隔更多onedrive.live.com/redir?resid=4A445014A6259A95%2149415

标签: python matplotlib contour


【解决方案1】:

您正在手动定义应为勾号的值:

plt.yticks([900,800,700,600,500,400,300,200,100,50])  

由于您还选择了对数刻度,并且由于您指定的增量是恒定的,matplotlib 需要改变刻度之间的间距以符合您的要求。

如果你绝对不想要这种行为,要么去掉日志选项,要么让matplotlib 自动为你设置刻度。或者,您可以为plt.yticks 函数提供一组呈指数增加/减少的数字。像这样:

plt.yticks([10^3,10^2,10^1])  

您必须确保使用正确的基数(我只是假设基数为 10),并且您必须找到合适的数字来跨越您的值范围。

【讨论】:

  • @James Warner,我无法运行您的代码,因为它依赖于您未提供的数据。改进您的问题以包含独立数据,我将尝试改进我的答案并测试其适当性。
  • 另外,我看到您还有另一个问题,它只是对这个问题的编辑。您应该在有人将其标记为重复之前将其删除。您上面的 cmets 已经反映了您的进度状态。将来考虑编辑/评论您的问题,而不是编写新问题。
猜你喜欢
  • 2022-01-24
  • 2016-01-12
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
相关资源
最近更新 更多