我正在尝试使用相同颜色条和方案的matplotlib制作两个散点图。这是我创建数据的代码,
import numpy as np
import matplotlib.pyplot as plt
import random
x = np.arange(0,10)
y = np.arange(0,10)
actual = np.zeros(10, )
predicted = np.zeros(10, )
for i in range(10):
actual[i] = random.choice([1, 2, 3, 4])
predicted[i] = random.choice([0, 1, 3])
然后我创建了第一个散点图
plt.scatter(x, y, c=actual)
cbar = plt.colorbar(ticks=[1, 2, 3, 4])
cbar.ax.set_yticklabels(["b", "c", "d", "e"])
第二个散点图,
plt.scatter(x, y, c=predicted)
cbar = plt.colorbar(ticks=[0, 1, 2, 3])
cbar.ax.set_yticklabels(["a", "b", "c", "d"])
我想创建具有相同颜色条的散点图,即ticks=[0,1,2,3,4]
,标签为["a", "b", "c", "d", "e"]
,以及与每个刻度/标签对应的相同颜色。但是,我无法这样做。例如,对第二个绘图执行此操作会使颜色栏保持不变,因为c
变量仅包含0
,1
和3
,但不包含2
和4
。有什么想法吗?
答案 0 :(得分:1)
执行vmin
时使用vmax
和scatter
,并将两者设置为相同。这样,无论您要绘制的数据如何,都可以修复颜色条的上限和下限。
例如:
import numpy as np
import matplotlib.pyplot as plt
import random
x = np.arange(0,10)
y = np.arange(0,10)
actual = np.zeros(10, )
predicted = np.zeros(10, )
for i in range(10):
actual[i] = random.choice([1, 2, 3, 4])
predicted[i] = random.choice([0, 1, 3])
cbticks = range(5)
cblabels = ["a", "b", "c", "d", "e"]
plt.subplot(211)
plt.scatter(x, y, c=actual, vmin=0, vmax=4)
cbar = plt.colorbar(ticks=cbticks)
cbar.ax.set_yticklabels(cblabels)
plt.subplot(212)
plt.scatter(x, y, c=predicted, vmin=0, vmax=4)
cbar = plt.colorbar(ticks=cbticks)
cbar.ax.set_yticklabels(cblabels)
plt.show()