更改 Python Matplotlib 中颜色条的颜色

我有一个代码,可以为我提供预测值与实际值作为浓度函数的散点图。数据是从 Excel csv 电子表格中提取的。


这是代码:


import matplotlib.pyplot as plt

from numpy import loadtxt



dataset = loadtxt("ColorPlot.csv", delimiter=',')

x = dataset[:,0]

y = dataset[:,1]

z = dataset[:,2]


scaled_z = (z - z.min()) / z.ptp()


colors = plt.cm.viridis(scaled_z)

sc=plt.scatter(x, y, c=colors)

plt.clim(0, 100)

plt.colorbar()

plt.xlabel("Actual")

plt.ylabel("Predicted")


plt.show()

这样我就得到了一个很好的图表:

https://img1.mukewang.com/64e4749f0001046d06360472.jpg

但是,如果我将颜色更改为类似的颜色

colors = plt.cm.plasma(scaled_z)

我得到下面的图表,但颜色条保持不变。

https://img1.mukewang.com/64e474a80001e06e06080470.jpg

我尝试了很多不同的东西,例如 cmap 或 edgecolors,但我不知道如何更改它。我希望保持代码像现在一样简单,因为我想根据我的 Excel 电子表格数据轻松更改 z 的第三个变量。

还有一种方法可以让颜色条的比例从 Excel 电子表格中获取比例,而无需我手动指定 0-100?


动漫人物
浏览 1386回答 3
3回答

一只斗牛犬

要获得正确的颜色条,请使用以下代码:colormap = plt.cm.get_cmap('plasma') # 'plasma' or 'viridis'colors = colormap(scaled_z)sc = plt.scatter(x, y, c=colors)sm = plt.cm.ScalarMappable(cmap=colormap)sm.set_clim(vmin=0, vmax=100)plt.colorbar(sm)plt.xlabel("Actual")plt.ylabel("Predicted")plt.show()对于我随机生成的数据,我得到了以下图:现在替换'plasma'并'viridis'检查其他变体。

郎朗坤

您不应该缩放数据,除非您希望颜色条不正确。一旦您从分散调用中获得了 PathCollection,您就可以在其上调用set_cmap和set_clim,并且颜色栏应该跟踪。(您还可以显式地将颜色条与 PathCollection 关联以避免歧义)import matplotlib.pyplot as pltimport numpy as npx = np.random.randn(100)y = np.random.randn(100)z = np.random.randn(100)sc=plt.scatter(x, y, c=z, cmap='viridis')plt.clim(0, 100)plt.colorbar(sc)plt.xlabel("Actual")plt.ylabel("Predicted")sc.set_cmap('plasma')sc.set_clim(-1, 1)plt.show()

森栏

你的代码给我返回一个错误TypeError: You must first set_array for mappable...以下是对我有用的最简单的语法:import matplotlib.pyplot as pltimport numpy as npa = np.random.random(100)b = np.random.random(100)scaled_z = (a + b)/aplt.figure()plt.scatter(a, b, c = scaled_z, cmap = 'plasma') ## you can directly change the colormap hereplt.colorbar()plt.tight_layout()plt.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python