标签: contourf

使用Matplotlib绘制3D图

我只是试图用3D绘制曲面及其轮廓,就像在这个例子中一样.

这是我用来做的代码:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
from matplotlib import cm
import numpy

def plot_3d_contour(x_dim, y_dim, x_steps, y_steps, scalar_field, file_path):
    fig = plt.figure()

    x, y = numpy.mgrid[-x_dim/2:x_dim/2:x_steps*1j, -y_dim/2:y_dim/2:y_steps*1j]
    v_min = numpy.min(scalar_field)
    v_max = nupmy.max(scalar_field)

    ax = fig.gca(projection='3d')

    cset = ax.contourf(x, y, scalar_field, zdir='z', offset=v_min, cmap=cm.coolwarm)
    cset = ax.contourf(x, y, scalar_field, zdir='x', offset=-x_dim/2-1, cmap=cm.coolwarm)
    cset = ax.contourf(x, y, scalar_field, zdir='y', offset=y_dim/2+1, cmap=cm.coolwarm)

    ax.plot_surface(x, y, scalar_field, rstride=10, cstride=10, alpha=0.3)

    ax.set_xlabel('X')
    ax.set_xlim(-x_dim/2-1, x_dim/2+1)
    ax.set_ylabel('Y')
    ax.set_ylim(-y_dim/2-1, y_dim/2+1)
    ax.set_zlabel('Z')
    ax.set_zlim(v_min, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib mplot3d contourf

22
推荐指数
1
解决办法
8988
查看次数

在matplotlib中分层构图和surface_plot

我在分层和zorderpython中苦苦挣扎.我正在使用带有三个相关元素的matplotlib进行3D绘图:surface_plot一个行星的A ,一个surface_plot围绕该行星的环,以及一个contourf显示行星的阴影投射到环上的图像.

我希望图形能够精确地显示这种情况在现实生活中的样子,环绕着行星,阴影位于相应位置的环上.如果影子在给定POV的行星后面,我希望阴影被行星阻挡,反之亦然,如果阴影位于行星前面,对于给定的POV.

需要说明的是,这只是一个分层问题.我的行星,戒指和阴影都正确地绘制.但是,阴影永远不会显示在地球的前面.它就好像行星正在"阻挡"阴影,即使行星在层次方面应该位于阴影之下.

我已经尝试了我能想到的每一件事,zorder并重新排列调用各种绘图元素的顺序.环DO正确地显示在行星前面,但阴影不会.

我的实际代码很长.这里是相关部分:

绘图设置:

def setup_saturn_plot(ax3, elev, azim, drawz, drawxy,view):
    ax3.set_aspect('equal','box')
    ax3.view_init(elev=elev, azim=azim)
    if(view=="top" or view == "Top" or view == "TOP"):
        ax3.dist = 5.5
    if(view=="star" or view == "Star" or view == "STAR"):
        ax3.dist = 5.0 #4.5 is best value
    proj3d.persp_transformation = orthographic_proj

    # hide grid and background
    ax3.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
    ax3.w_yaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
    ax3.w_zaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
    ax3.grid(False)

    # hide z axis in …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib z-order contourf

13
推荐指数
1
解决办法
347
查看次数

如何用contourf()制作动画?

我正在尝试动画一些时间相关数据的空间坐标的wigner函数.wigner函数是2维的,所以我使用contourf()来绘制它.我将数据存储在HDF5文件中,可以动态制作Wigner,但我无法弄清楚如何设置动画.我能够找到的所有动画教程和示例(例如这一个这个)都严格用于线图.具体来说,他们的animate(i)功能使用line.set_data(),我似乎无法找到相应的contourf().

如何使用contourf()?制作的图像动画?

什么是contourf()等效set_data()

python animation matplotlib contourf

12
推荐指数
3
解决办法
6665
查看次数

Python matplotlib colorbar科学记谱法基础

我正在尝试在matpllotlib contourf图上自定义颜色条.虽然我能够使用科学记数法,但我试图改变符号的基础 - 主要是因为我的刻度将在(-100,100)而不是(-10,10)的范围内.

例如,这会产生一个简单的情节......

import numpy as np
import matplotlib.pyplot as plt

z = (np.random.random((10,10)) - 0.5) * 0.2

fig, ax = plt.subplots()
plot = ax.contourf(z)
cbar = fig.colorbar(plot)

cbar.formatter.set_powerlimits((0, 0))
cbar.update_ticks()

plt.show()
Run Code Online (Sandbox Code Playgroud)

像这样:

在此输入图像描述

但是,我希望颜色条上方的标签为1e-2,数字范围为-10到10.

我该怎么做?

python matplotlib colorbar contourf

10
推荐指数
1
解决办法
3630
查看次数

子图用不同的colormaps matlab

我试图用两个不同的contourf子图来制作一个使用完全不同的colormap的图.但是,对于我目前拥有的代码(为其中一个子图创建自定义颜色图),子图使用相同的颜色图.任何想法如何解决这一问题?

h = figure;
subplot(2,1,1)
title('GEFS 20 Member Mean Vorticity');
axesm('eqdcylin','maplonlimit',[-180 179],'maplatlimit',[0 90]);
%eqdcylin
contourm(gLat, gLon, squeeze(meanhx(x,:,:))', 16,'Color',[0.05 0.05 0.05],'LineWidth',2);
hold on
contourfm(gLat, gLon, squeeze(vmeanx(x,:,:))', 30, 'LineStyle', 'none'); 
shading flat;
lm=worldlo('POline');
  for i=1:length(lm);
  lm(i).otherproperty = {'color','m','LineWidth',1.5};
  end
displaym(lm);
gridm on;
tightmap;
set(h, 'Position', [1 1 2200 1100]);
colormap(b2r(-5*10^-5, 5*10^-5));
freezeColors;
cbfreeze(colorbar)




%caxis([-5*10^-5 5*10^-5])

colorbar;


subplot(2,1,2)
title('GEFS 20 Member Vorticity Variance');
axesm('eqdcylin','maplonlimit',[-180 179],'maplatlimit',[0 90]);
%eqdcylin
contourm(gLat, gLon, squeeze(meanhx(x,:,:))', 16,'Color',[0.05 0.05 0.05],'LineWidth',2);
hold on
contourfm(gLat, gLon, squeeze(vvarx(x,:,:))', 30, 'LineStyle', 'none'); 
shading flat; …
Run Code Online (Sandbox Code Playgroud)

matlab subplot matlab-figure contourf

8
推荐指数
1
解决办法
3117
查看次数

更新 matplotlib 中颜色条的范围

我想更新contourf函数内的绘图,效果很好。然而,数据的范围发生了变化,因此我还必须更新颜色条。这就是我未能做到的地方。

请参阅以下最小工作示例:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)

# Random data
data = np.random.rand(10, 10)

# Plot data
levels = np.linspace(0., 1., 100)
plot = ax.contourf(data, levels=levels)
clist = plot.collections[:]

# Create colorbar
cbar = plt.colorbar(plot)
cbar_ticks = np.linspace(0., 1., num=6, endpoint=True)
cbar.set_ticks(cbar_ticks)

plt.show()

def update():
    # Remove old plot
    for c in clist:
        ax.collections.remove(c)
        clist.remove(c)

    # Create new data and plot
    new_data   = 2.*np.random.rand(10, 10)
    new_levels = np.linspace(0., 2., …
Run Code Online (Sandbox Code Playgroud)

python matplotlib colorbar contourf

8
推荐指数
1
解决办法
2万
查看次数

Matplotlib 标准化颜色条 (Python)

我正在尝试使用 matplotlib (当然还有 numpy)绘制轮廓图。它有效,它绘制了它应该绘制的内容,但不幸的是我无法设置颜色条范围。问题是我有很多图,并且需要所有图都具有相同的颜色条(相同的最小值和最大值,相同的颜色)。我复制并粘贴了在互联网上找到的几乎所有代码片段,但没有成功。到目前为止我的代码:

    import numpy as np;
    import matplotlib as mpl;
    import matplotlib.pyplot as plt;
    [...]
    plotFreq, plotCoord = np.meshgrid(plotFreqVect, plotCoordVect);

    figHandler = plt.figure();
    cont_PSD = plt.contourf(plotFreq, plotCoord, plotPxx, 200, linestyle=None);


    normi = mpl.colors.Normalize(vmin=-80, vmax=20);

    colbar_PSD = plt.colorbar(cont_PSD);
    colbar_PSD.set_norm(normi);
    #colbar_PSD.norm = normi;
    #mpl.colors.Normalize(vmin=-80, vmax=20);

    plt.axis([1, 1000, -400, 400]);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,颜色条规范有三种不同的行,但它们都不起作用。范围仍然是自动设置的...我的意思是其他一切都正常,为什么颜色条不行?我什至没有收到错误或警告。

谢谢,itpdg

编辑1:图片,与plt.clim(-80,20):

在此输入图像描述

python numpy matplotlib colorbar contourf

6
推荐指数
1
解决办法
2万
查看次数

matplotlib:为半径指定颜色

我有一个磁盘的 3D 图。现在我想根据数组中存储的值以颜色绘制表面。例如圆盘的半径是300mm。该数组可能是这样的:

arr = np.array([[ 114.28, 14],
                [ 128.57, 16],
                [ 142.85,19],
                [ 157.13,20],
                [ 171.41,21],
                [ 185.69,22],
                [ 199.97,24],
                [ 214.25,27],
                [ 228.53,29],
                [ 242.81,30],
                [ 257.09,31],
                [ 271.37,34],
                [ 288.65,35],
                [ 299.93,36],
                [ 300,38]])
Run Code Online (Sandbox Code Playgroud)

这意味着对于半径 = 114.28,我的值为 14。我想以某种颜色(例如蓝色)在半径 114.28 处绘制一个圆。第二个半径是 128.57。对于半径 128.57,分配值 16。这意味着我想用另一种颜色绘制一个圆圈,例如在图的表面上绘制橙色等等。

我尝试用轮廓图解决这个问题(感谢bazingaa)。它看起来正是我想要的。不幸的是,我刚刚意识到这并不是真正解决我的问题。也许我应该解释一下我想要实现的目标。我想展示某些参数(例如速度)如何沿光盘分布。在这种情况下,随着速度向外侧增加,等高线图也会纠正。但也可能发生这样的情况:参数必须可视化,而这些参数并不总是向外部持续增加。我尝试了这种情况,只是在数组中间设置了一个比之前的值更小的值(我将值 27 从 arr 更改为 14),除了图例发生变化之外,等高线图中没有任何反应。也许轮廓图毕竟不是正确的方法?也许我必须绘制单独的圆圈并为其指定颜色,并在圆圈之间进行插值以填补空白。

等值线图

import numpy as np
import matplotlib as mlp
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d

ri = 100
ra = 300
h=20

# input xy coordinates
xy …
Run Code Online (Sandbox Code Playgroud)

python matplotlib contour python-3.x contourf

6
推荐指数
1
解决办法
815
查看次数

Matlab:如何在 coutour 图上设置对数刻度

我有一些数据要显示为等高线图,其中包含值的对数刻度(矩阵Z)和标记的计数。这就是我的做法:

[C, h1] = contourf(X, Y, log(Z)); 
clabel(C,h1);
Run Code Online (Sandbox Code Playgroud)

这是我的结果:

图片

我的问题是:如何在轮廓上获得正确的标签?我不想要这里描述的颜色条。

编辑:这是我的例子:

X = 1:1:20;
Y = X; 
Z = zeros(size(Y));
for i = 1:size(Y,2);
    Z(i, :) = 10^i;
end

[C, h1] = contourf(X, Y, Z); 
clabel(C,h1);
Run Code Online (Sandbox Code Playgroud)

我的真实数据如下所示: 真的

我可以设置我想要的任何计数线标签,但它们将不可见,因为我的数据是指数级的(顺便说一下,在这个图中可见的标签是真实的,我想在下一个情节)。

现在,由于我的数据是指数形式,我必须在显示值(矩阵 Z)上使用对数刻度来正确显示数据。这是我的方法(也许还有另一种更好的方法,我不知道,我还没有找到其他任何东西):

[C, h1] = contourf(X, Y, log(Z)); 
clabel(C,h1);
Run Code Online (Sandbox Code Playgroud)

这是我的照片的样子: 日志数据

现在看起来不错——你可以看到我的数据是如何变化的。然而,标签是错误的。我现在可以将它们设置为您喜欢的任何向量:

  1. 0:5:45 - 我会得到我现在所拥有的。
  2. 10^[0:5:45](我想要这些标签)。但是现在我绘制的数据范围是(0, 45)(因为我计算了它的对数)。因此,大多数标签将不会显示(它们超出数据范围),并且会放错位置的标签。

理想情况下,我希望能够像这样:

[C, h1] = contourf(X, Y, Z, 'ZScale', 'Log'); 
clabel(C,h1);
Run Code Online (Sandbox Code Playgroud)

并在底部获取带有标签 10、10^5、10^10 等的图片。

总而言之,我需要执行以下操作之一:

  1. 找到一种以编程方式设置对数刻度的方法,让 matlab 担心等值线。

  2. 能够在不移动它们的情况下手动更改等值线上的标签(new_label = …

matlab plot label scale contourf

5
推荐指数
1
解决办法
4969
查看次数

MATLAB R2019a 中的轮廓函数中“ShowText”和“LineStyle”之间的冲突?

我使用的代码如下。但是当我在 MATLAB R2014a 和 R2019a(在同一台计算机,Win7 64 位)中运行我的代码时,数字是不同的。MATLAB R2019a中的函数'ShowText''LineStyle'函数之间似乎存在冲突contourf?我想要的是带有文本且没有线条的图形(如 R2014a 的图形)。我怎样才能在 R2019a 中获得它?

for i = 1 : 10
    for j = 1 : 10
        res(i, j) = i * j;
    end
end
contourf(res, 'ShowText', 'on', 'LineStyle', 'none');
Run Code Online (Sandbox Code Playgroud)

图使用 R2014a

图由 R2014a

图使用 R2019a

图由 R2019a

图使用 R2019acontourf(res, 'ShowText', 'on')只使用

图由 R2019a 仅使用“contourf(res, 'ShowText', 'on')

matlab linestyle matlab-figure contourf showtext

5
推荐指数
1
解决办法
173
查看次数