我正在尝试使用强度/色标绘制函数,结果显示出离散的而不是连续的颜色(例如,白色最大)。强度和黑色为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;
}
}
答案 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')
但是,通常,如果需要连续图像,则宁愿确实绘制图像,
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")
您可能会注意到两者之间几乎没有视觉上的差异,但是imshow
方法的速度快了很多(很多很多),因为不需要使用轮廓算法。