Python中连续而不是离散的强度梯度描述函数

时间:2019-02-16 20:33:13

标签: python matplotlib

我正在尝试使用强度/色标绘制函数,结果显示出离散的而不是连续的颜色(例如,白色最大)。强度和黑色为0。这似乎并不受“ np.linspace”中点的数量的影响,这有点让我感到困惑。

public class Answer {

  public static void main(String[] args) {
    LinkedList list = new LinkedList(1, new LinkedList(2, new LinkedList(1, new LinkedList(2, new LinkedList(3, null)))));
    System.out.println(list);
    LinkedList withoutOne = list.removeAll(1);
    System.out.println(withoutOne);
    LinkedList withoutTwo = list.removeAll(2);
    System.out.println(withoutTwo);
    LinkedList withoutThree = list.removeAll(3);
    System.out.println(withoutThree);
  }
}

class LinkedList {
  private int value;
  private LinkedList next;

  public LinkedList(int value, LinkedList next) {
    this.value = value;
    this.next = next;
  }

  public LinkedList removeAll(int value) {
    if (this.next == null) {
      return (this.value == value) ? null : new LinkedList(this.value, null);
    } else if (this.value == value) {
      return this.next.removeAll(value);
    } else {
      return new LinkedList(this.value, this.next.removeAll(value));
    }
  }

  @Override
  public String toString() {
    String res = "LinkedList:";
    for (LinkedList link = this; link != null; link = link.next) {
      res += " " + link.value;
    }
    return res;
  }
}

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

plt.contourf应该如图所示是离散的-这样您就可以看到轮廓。对于这种情况,您可以选择以下一种方法:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

x = y = np.linspace(0, 4*np.pi, 2000)

def cos(x, y):
    return np.cos(x)**2

def squared(x, y):
    return x**2

X, Y = np.meshgrid(x, y)
Z = cos(X, Y)

plt.imshow(Z, vmin = 0., vmax = 1., cmap=plt.cm.gray_r) # gray_r to reverse color and make it as you show in your images
plt.show()

答案 1 :(得分:2)

在这里您正在绘制填充的轮廓图。如果要显示离散轮廓,轮廓图最有意义。例如。天气图通常以这种样式显示等压线,或者地理地图通过“轮廓”显示等高线。

默认情况下,matplotlib选择〜8个轮廓,但实际数量可能会因数据规模而异。

您可以通过levels自变量选择级别数(大约)。因此,增加该数字将为您显示更连续的渐变。

plt.contourf(Z, levels = 121, cmap = 'Greys')

enter image description here

但是,通常,如果需要连续图像,则宁愿确实绘制图像,

dx = dy = np.diff(x)[0]
extent = x.min()-dx/2, x.max()+dx/2, y.min()-dx/2, y.max()+dx/2
plt.imshow(Z, cmap = 'Greys', extent=extent, aspect="auto")

enter image description here

您可能会注意到两者之间几乎没有视觉上的差异,但是imshow方法的速度快了很多(很多很多),因为不需要使用轮廓算法。