天道酬勤,学无止境

Pyplot 等高线图 - clabel 间距(Pyplot contour plot - clabel spacing)

问题

我在使用 matplotlib/pyplot/底图时遇到了麻烦。 我在地图上绘制等高线(气压)。 我使用 clabel 来显示等高线的值。 但问题是:value 和等高线之间的 padding 太多了。 我找到了参数“inline_spacing”,我已将其设置为零。 但是仍然有很多可用空间。 有任何想法吗?

自由空间轮廓标签

蟒蛇代码:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import pygrib

filename   = "file.grib2"
grbs       = pygrib.open('/data/' + filename)
grb        = grbs[2]
data       = grb.values
datac      = data*0.01
lats, lons = grb.latlons()

fig = plt.figure()
m = Basemap(projection='stere',lon_0=5,lat_0=90.0,\
            llcrnrlon=-25.0,urcrnrlon=60.0,llcrnrlat=30.0,urcrnrlat=60.0,resolution='l')

x, y = m(lons, lats)

levs = range(940,1065,5)
S1=plt.contour(x,y,datac,levs,linewidths=0.5,colors='b')
plt.clabel(S1,inline=1,inline_spacing=0,fontsize=8,fmt='%1.0f',colors='b')

m.drawmapboundary(fill_color='w')
m.drawcoastlines(linewidth=0.2)

plt.savefig('test.png', bbox_inches='tight',pad_inches=0.05, dpi=100)

谢谢。

回答1

“inline_spacing”参数可以设置为负值。 它给了我一个警告,但尝试 -2 或 -3 应该可以解决您的问题。

回答2
cb = plt.clabel(S1,inline=1,inline_spacing=0,fontsize=8,fmt='%1.0f',colors='b')
[txt.set_bbox(dict(boxstyle='square,pad=0',fc='red')) for txt in cb]

Matplotlib Text 类创建一个 bbox。 您需要设置pad = 0 。然后inline_spacing工作。

参考问题!

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • matplotlib 等高线图标签重叠轴(matplotlib contour plot labels overlap axes)
    问题 我正在制作一些带有contour轮廓图,这些contour通过clabel标记。 问题是轮廓标签往往与轴重叠: (其他一些标签很乱,请忽略)。 对于左图,10^-3 和 10 是有问题的。 在右边,10^3 是唯一的问题。 这是生成其中之一的代码: fig = plt.figure(figsize=(6,3)) ax = fig.add_subplot(121) ax.set_xscale('log') ax.set_yscale('log') ax.set_xlabel(r'$T_e$ (eV)', fontsize=10) ax.set_ylabel(r'$n_e$ (1/cm$^3$)', fontsize=10) ax.set_xlim(0.1, 1e4) ax.set_ylim(1e16, 1e28) CS = ax.contour(X, Y, Z, V, colors='k') ax.clabel(CS, inline=True, inline_spacing=3, rightside_up=True, colors='k', fontsize=8, fmt=fmt) 有什么方法可以让clabel在放置时表现得更好? 回答1 考虑到文档中的示例患有相同的疾病,这表明解决这个问题并非轻而易举。 似乎您必须忍受自动放置,使用manual放置或弄脏手。 作为妥协
  • 21.等值线图(Counter Plot)、Contour Demo、Creating a “meshgrid”、Calculation of the Values、等
    21.等值线图(Counter Plot) 21.1.Contour Demo 21.2.Creating a “meshgrid” 21.3.Calculation of the Values 21.4.Changing the Colours and the Line Style 21.5.Filled Contours 21.6.Individual Colours 21.等值线图(Counter Plot) 两个变量函数的等值线(或等高线)是函数具有常数值的曲线。它是平行于x,y平面的函数f(x,y)的三维图的横截面。 例如在地理和气象学使用登高线。在制图中,等高线连接高于给定水平的相等高度的点,例如平均海平面。 我们还可以更一般地说,具有两个变量的函数的等值线是连接具有相同值的点的曲线。 contour和contourf都是画三维等高线图的,不同点在于contour() 是绘制轮廓线,contourf()会填充轮廓。 21.1.Contour Demo 举例说明简单的等值线绘图: 图像上的等值线, 以及用于等值线的色条(colorbar)以及标记的等高线。 import matplotlib import numpy as np import matplotlib.cm as cm import matplotlib.pyplot as plt delta = 0.025
  • Matplotlib:多个轮廓变量的轮廓图的多个图例(Matplotlib: Multiple legends for contour plot for multiple contour variables)
    问题 我需要在同一页面上绘制多个变量的多个等高线图。 我可以用 MATLAB 做到这一点(参见下面的 MATLAB 代码)。 我无法让 matplotlib 显示多个图例。 任何帮助将非常感激。 蟒蛇代码: import numpy as np from matplotlib import cm as cm from matplotlib import pyplot as plt delta = 0.25 x = np.arange(-3.0, 3.0, delta) y = np.arange(-2.0, 2.0, delta) X, Y = np.meshgrid(x, y) Z1 = X*np.exp(-X**2-Y**2) Z2 = Y*np.exp(-X**2-Y**2) plt.figure() CS = plt.contour(X, Y, Z1, colors='k') plt.clabel(CS, inline=1, fontsize=10) CS = plt.contour(X, Y, Z2, colors='r') plt.clabel(CS, inline=1, fontsize=10) plt.legend(['case 1', 'case 2']) plt.show() MATLAB 代码: [X,Y] = meshgrid(-2:.2:2,-2:.2:3
  • 将水流箭头添加到 Matplotlib 等高线图(Adding water flow arrows to Matplotlib Contour Plot)
    问题 我正在使用 Matplotlib 生成地下水高程等高线。 见下文 这是我现在所拥有的; 如何添加如下图所示的水流箭头? 我想添加箭头使其看起来像这样: 如果有人有一些想法和/或代码示例,将不胜感激。 回答1 您将需要最新 (>= 1.2) 版本的 matplotlib,但 streamplot 可以做到这一点。 您只需要采用头部的负梯度(也就是地表含水层的“地下水位”)网格。 作为从头部的随机点观察生成的快速示例: import numpy as np from scipy.interpolate import Rbf import matplotlib.pyplot as plt # Make data repeatable np.random.seed(1981) # Generate some random wells with random head (water table) observations x, y, z = np.random.random((3, 10)) # Interpolate these onto a regular grid xi, yi = np.mgrid[0:1:100j, 0:1:100j] func = Rbf(x, y, z, function='linear') zi = func(xi, yi) # -- Plot ----
  • Pyplot contour plot - clabel spacing
    I have trouble with matplotlib / pyplot / basemap. I plot contour lines (air pressure) on a map. I use clabel to show the value of the contour lines. But the problem is: the padding between the value and the contour line is too much. I have found the parameter "inline_spacing", which i have set to zero. But there is still to much free space. Any ideas? Python Code: import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap import pygrib filename = "file.grib2" grbs = pygrib.open('/data/' + filename) grb = grbs[2] data = grb.values datac =
  • 计算和绘制矢量场(Computing and drawing vector fields)
    问题 我正在尝试使用以下公式为给定对象绘制势场: U=-α_goal*e^(-((x-x_goal )^2/a_goal +(y-y_goal^2)/b_goal ) ) 使用以下代码 # Set limits and number of points in grid xmax = 10.0 xmin = -xmax NX = 20 ymax = 10.0 ymin = -ymax NY = 20 # Make grid and calculate vector components x = linspace(xmin, xmax, NX) y = linspace(ymin, ymax, NY) X, Y = meshgrid(x, y) x_obstacle = 0 y_obstacle = 0 alpha_obstacle = 1 a_obstacle = 1 b_obstacle = 1 P = -alpha_obstacle * exp(-(X - x_obstacle)**2 / a_obstacle + (Y - y_obstacle)**2 / b_obstacle) Ey,Ex = gradient(P) print Ey print Ex QP = quiver(X, Y, Ex, Ey) show() 此代码计算势场。 我怎样才能很好地绘制这个势场? 另外
  • Matlab 图形绘制 - 图例和带有标签的曲线(Matlab graph plotting - Legend and curves with labels)
    问题 如何绘制如下图所示的图形? 这里的图例(绿色/蓝色)在每条曲线上绘制了一些值(0.10 到 0.40)。 是否有任何可能的解决方案或提示来做到这一点? 图参考: 回答1 使用 clabel(轮廓标签)可以在线条内绘制数据标签,尽管这需要您使用 contour 命令绘制数据。 虽然如果您不能将其绘制为等高线图,那么您应该能够将您的绘图数据转换为等高线矩阵格式,请参阅等高线算法帮助页面底部的矩阵定义。 这是一个定义数据点的简单 2 行向量,您应该能够将此矩阵输入 clabel 函数以内联打印数据标签。 对于下面的示例 - 我使用 plot 命令绘制了 3 条线,将线句柄保存在数组 h 中。 然后我根据绘制的数据创建了一个等高线矩阵,例如,如果红线有 50 个数据点,那么 C(1,1)=0.44; % data value to plot on the line C(2,1)=50; % number of data points C(1,2:51)=line1x; % x data points for the red line C(2,2:51)=line1y; % y data points for the red line 我手动测试了这个想法,但我相信如果需要,您可以编写一个简单的函数来根据您的数据自动创建这个矩阵。
  • Matplotlib轮廓Clabel位置(Matplotlib Contour Clabel Location)
    问题 我想控制等高线图上matplotlib clabel的位置,但不使用clabel中的manual = True标志。 例如,我想指定一个x坐标,并在通过此线的点处创建标签。 我看到您可以使用get_position()获取各个标签的位置,但是我对此感到困惑。 任何帮助将不胜感激。 谢谢! 回答1 不,matplotlib中没有内置的方法可以做到这一点。 您应该居住在默认位置,或者使用手册和使用鼠标进行完全交互。 您可能希望将此文件作为错误报告提交到上游,以便他们改进算法。 有多种方法可以解决此问题。 第一个是通过编程将文本放置在轮廓图上。 这样,您将无法可靠地删除文本下方的行。 假设您有轮廓c ,则可以在c.collections找到轮廓线。 对于每个轮廓线,调用get_paths并将您的文本放在该路径上。 另一个选择是替换用于手动放置的代码(在matplotlib.contour.BlockingContourLabeler )或调整查找标签位置的代码(在matplotlib.contour.locate_label ),但是这两个函数都很密集。 如果您可以为locate_label提出locate_label替代方案, locate_label只需覆盖绘图宏中的旧方法即可 def your_locate_label(self, linecontour
  • matplotlib:颜色条调整图像大小?(matplotlib: colour bar resizing image?)
    问题 我假设我有一个非常简单的问题,在过去的一个小时里一直让我发疯。 因此,我正在尝试生成具有以下轴长度 x=37,y=614 的等高线图。 我可以生成一个等高线图没问题,但是当我添加一个颜色条时,图像的大小会调整为我假设的颜色条的大小。 没有色条的图像: 带颜色条的图像: 图形被调整大小,我不知道为什么。 如何绘制像我的第一个图形一样的图形,但使用第二个图形的配色方案和颜色​​条? 代码: import matplotlib import numpy as np import matplotlib.cm as cm import matplotlib.mlab as mlab import matplotlib.pyplot as plt from matplotlib import pylab y = np.arange(1, 615) x = np.arange(1, 37) z = np.loadtxt('145_contact_matrix_605.txt') fig = plt.figure() ax = plt.subplot(111) CS = ax.contour(x, y, z) plt.clabel(CS, inline=1, fontsize=10) # COLOUR BAR CODE im_out = ax.imshow(z, cmap=cm.jet)
  • 如何在matplotlib中为轮廓图创建图例?(How do you create a legend for a contour plot in matplotlib?)
    问题 我似乎在任何地方都找不到答案! 我在这里找到了讨论,但是尝试这样做却得到TypeError: 'NoneType' object is not iterable : >>> import numpy as np >>> import matplotlib.pyplot as plt >>> x, y = np.meshgrid(np.arange(10),np.arange(10)) >>> z = x + y >>> cs = plt.contourf(x,y,z,levels=[2,3]) >>> cs.collections[0].set_label('test') >>> plt.legend() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/pyplot.py", line 2791, in legend ret = gca().legend(*args, **kwargs) File "/opt/local/Library/Frameworks/Python
  • 从matplotlib中的轮廓获取坐标?(Get coordinates from the contour in matplotlib?)
    问题 背景 从此处的文档示例中,您可以轻松地使用代码段生成以下轮廓图。 import matplotlib import numpy as np import matplotlib.cm as cm import matplotlib.mlab as mlab import matplotlib.pyplot as plt matplotlib.rcParams['xtick.direction'] = 'out' matplotlib.rcParams['ytick.direction'] = 'out' delta = 0.025 x = np.arange(-3.0, 3.0, delta) y = np.arange(-2.0, 2.0, delta) X, Y = np.meshgrid(x, y) Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) # difference of Gaussians Z = 10.0 * (Z2 - Z1) # Create a simple contour plot with labels using default colors. The # inline argument to
  • Get coordinates from the contour in matplotlib?
    Background From the documentation example here, one can easily produce the following contour plot with the code snippet. import matplotlib import numpy as np import matplotlib.cm as cm import matplotlib.mlab as mlab import matplotlib.pyplot as plt matplotlib.rcParams['xtick.direction'] = 'out' matplotlib.rcParams['ytick.direction'] = 'out' delta = 0.025 x = np.arange(-3.0, 3.0, delta) y = np.arange(-2.0, 2.0, delta) X, Y = np.meshgrid(x, y) Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) # difference of Gaussians Z = 10.0 * (Z2 - Z1) #
  • matplotlib.pyplot的全函数解释 API
    matplotlib.pyplot Pyplot功能概述 https://matplotlib.org/stable/api/pyplot_summary.html pyplot matplotlib.pyplot 是matplotlib的基于状态的接口。 matplotlib.pyplot.plotting()[资源] 功能 描述 acorr 绘制x的自相关。 angle_spectrum 绘制角度光谱。 annotate 用文本text注释点xy。 arrow 在轴上添加一个箭头。 autoscale 将轴视图自动缩放为数据(切换)。 axes 在当前图形上添加轴,使其成为当前轴。 axhline 在轴上添加一条水平线。 axhspan 在轴上添加水平跨度(矩形)。 axis 获取或设置某些轴属性的便捷方法。 axline 添加无限长的直线。 axvline 在轴上添加一条垂直线。 axvspan 在轴上添加垂直跨度(矩形)。 bar 绘制条形图。 bar_label 标记条形图。 barbs 绘制一个2D倒刺区域。 barh 绘制水平条形图。 box 打开或关闭当前轴上的轴框。 boxplot 制作一个盒子和晶须图。 broken_barh 绘制矩形的水平序列。 cla 清除当前轴。 clabel 标注等高线图。 clf 清除当前数字。 clim 设置当前图像的颜色限制。
  • matplotlib 等高线图:对数刻度中的成比例颜色条级别(matplotlib contour plot: proportional colorbar levels in logarithmic scale)
    问题 是否可以像下图那样在对数刻度中设置颜色条的级别? 这是一些可以实现的示例代码: import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import LogNorm delta = 0.025 x = y = np.arange(0, 3.01, delta) X, Y = np.meshgrid(x, y) Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) Z = 1e6 * (Z1* Z2) fig=plt.figure() ax1 = fig.add_subplot(111) lvls = np.logspace(0,4,20) CF = ax1.contourf(X,Y,Z, norm = LogNorm(), levels = lvls ) CS = ax1.contour(X,Y,Z, norm = LogNorm(), colors = 'k', levels = lvls ) cbar = plt.colorbar(CF, ticks=lvls, format='%.4f') plt.show() 我在
  • Matplotlib: Multiple legends for contour plot for multiple contour variables
    I need to make multiple contours plots of several variables on the same page. I can do this with MATLAB (see below for MATLAB code). I cannot get matplotlib to show multiple legends. Any help would be much appreciated. Python code: import numpy as np from matplotlib import cm as cm from matplotlib import pyplot as plt delta = 0.25 x = np.arange(-3.0, 3.0, delta) y = np.arange(-2.0, 2.0, delta) X, Y = np.meshgrid(x, y) Z1 = X*np.exp(-X**2-Y**2) Z2 = Y*np.exp(-X**2-Y**2) plt.figure() CS = plt.contour(X, Y, Z1, colors='k') plt.clabel(CS, inline=1, fontsize=10) CS = plt.contour(X, Y, Z2, colors='r
  • 如何平滑matplotlib等高线图?(How to smooth matplotlib contour plot?)
    问题 我有以下形状的numpy数组:(33,10)。 当我绘制轮廓时,会得到如下丑陋的图像: 而contour()似乎没有关于平滑或某种插值功能的任何论据。 我以某种方式期望提供轮廓图的工具也应该提供平滑处理。 在MPL中有直接的方法吗? 回答1 正如其他人已经指出的那样,您需要对数据进行插值。 有许多不同的方法可以做到这一点,但是对于初学者来说,请考虑scipy.ndimage.zoom 。 作为一个快速的例子: import numpy as np import scipy.ndimage import matplotlib.pyplot as plt data = np.loadtxt('data.txt') # Resample your data grid by a factor of 3 using cubic spline interpolation. data = scipy.ndimage.zoom(data, 3) plt.contour(data) plt.show() 回答2 如果您的数据稀疏,Joe Kingtons的回答很好。 如果您的数据比较嘈杂,则应考虑对其进行过滤: from numpy import loadtxt from scipy.ndimage.filters import gaussian_filter from matplotlib
  • Matplotlib 无法在 Django 上渲染多个等高线图(Matplotlib can't render multiple contour plots on Django)
    问题 每当(至少)有 2 个人尝试在我的应用程序中生成等高线图时,根据第一个人设法绘制的距离,其中至少有一个会收到随机错误..(“未知元素 o”,“ContourSet 必须是在当前轴中”只是两种可能性) 以下是可能产生错误的缩减测试,如果您尝试一次在 2 个或更多选项卡中加载此页面,第一个将正确呈现,而第二个将产生错误。 (我发现最简单的方法是用鼠标中键单击 chrome 中的刷新页面按钮几次) 视图.py def home(request): return render(request, 'home.html', {'chart': _test_chart()}) def _test_chart(): import base64 import cStringIO import matplotlib matplotlib.use('agg') from matplotlib.mlab import bivariate_normal import matplotlib.pyplot as plt import numpy as np from numpy.core.multiarray import arange delta = 0.5 x = arange(-3.0, 4.001, delta) y = arange(-4.0, 3.001, delta) X, Y = np
  • Python:带有 imshow 的 2D 颜色图(Python: 2D color map with imshow)
    问题 我正在尝试使用颜色在二维图形上表示两个变量的函数。 我在这里遇到了这个例子: from numpy import exp,arange from pylab import meshgrid,cm,imshow,contour,clabel,colorbar,axis,title,show # the function that I'm going to plot def z_func(x,y): return (1-(x**2+y**3))*exp(-(x**2+y**2)/2) x = arange(-3.0,3.0,0.1) y = arange(-3.0,3.0,0.1) X,Y = meshgrid(x, y) # grid of point Z = z_func(X, Y) # evaluation of the function on the grid im = imshow(Z,cmap=cm.RdBu) # drawing the function # adding the Contour lines with labels cset = contour(Z,arange(-1,1.5,0.2),linewidths=2,cmap=cm.Set2) clabel(cset,inline=True,fmt='%1.1f',fontsize=10)
  • Python3快速入门(十六)——Matplotlib绘图
    Python3快速入门(十六)——Matplotlib绘图 一、Matplotlib简介 1、Matplotlib简介 Matplotlib是 Python 2D-绘图领域使用最广泛的套件,可以简易地将数据图形化,并且提供多样化的输出格式。matplotlib有两个接口,一个是状态机层的接口,通过pyplot模块来进行管理;一个是面向对象的接口,通过pylab模块将所有的功能函数全部导入其单独的命名空间内。 2、Matplotlib安装 使用conda安装如下:conda install matplotlib 二、Matplotlib图表结构 1、Matplotlib图表结构简介 Matplotlib基本图表结构包括坐标轴(X轴、Y轴)、坐标轴标签(axisLabel)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、绘图区(axes)、画布(figure)。 2、Figure Figure代表一个绘制面板,其中可以包涵多个Axes(即多个图表)。Axes表示一个图表 ,一个Axes包涵:titlek、xaxis、yaxis。为了支持pylab中的gca()等函数,Figure对象内部保存有当前轴的信息,因此不建议直接对Figure.axes属性进行列表操作,而应该使用add_subplot, add_axes, delaxes等方法进行添加和删除操作。 # -*-
  • Matplotlib快速入门--小白
    Matplotlib 目录 Matplotlib基本用法figure图像设置坐标轴legend图例Annotation注解坐标轴刻度Scatter散点图Bar柱状图Contours等高线图3D图像subplot多合一显示subplot分格显示图中图次坐标轴结束 基本用法 首先来看一个matplotlib最基本的用法 这里需要导入两个库 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-1,1,50) # 制作横坐标点 y = 2*x+1 # 函数y plt.plot(x,y) plt.show() # 将图显示出来 运行代码,可以看到如下结果 另外说明一下图中下面几个按钮的作用 按钮一:还原图,即回到最初始的状态 按钮二:返回上一步 按钮三:返回下一步 按钮四:移动图形 按钮五:可以用一个矩形框住某个部分,来达到局部放大的效果 按钮六:配置 按钮七:保存图片 figure图像 细心的小伙伴可以看见前面的图中有一个Figure 1,如果我们想要多个figure图像怎么实现呢? import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3,3,50) # 制作横坐标点 y1 = 2*x+1 # 函数y1 y2 = x**2