为了账号安全,请及时绑定邮箱和手机立即绑定

更改 Python Matplotlib 中颜色条的颜色

更改 Python Matplotlib 中颜色条的颜色

动漫人物 2023-08-22 16:40:29
我有一个代码,可以为我提供预测值与实际值作为浓度函数的散点图。数据是从 Excel csv 电子表格中提取的。这是代码:import matplotlib.pyplot as pltfrom numpy import loadtxtdataset = 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()这样我就得到了一个很好的图表:但是,如果我将颜色更改为类似的颜色colors = plt.cm.plasma(scaled_z)我得到下面的图表,但颜色条保持不变。我尝试了很多不同的东西,例如 cmap 或 edgecolors,但我不知道如何更改它。我希望保持代码像现在一样简单,因为我想根据我的 Excel 电子表格数据轻松更改 z 的第三个变量。还有一种方法可以让颜色条的比例从 Excel 电子表格中获取比例,而无需我手动指定 0-100?
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

要获得正确的颜色条,请使用以下代码:


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()

对于我随机生成的数据,我得到了以下图:

https://img1.sycdn.imooc.com//64e474ba0001098603800261.jpg

现在替换'plasma''viridis'检查其他变体。



查看完整回答
反对 回复 2023-08-22
?
郎朗坤

TA贡献1921条经验 获得超9个赞

您不应该缩放数据,除非您希望颜色条不正确。一旦您从分散调用中获得了 PathCollection,您就可以在其上调用set_cmap和set_clim,并且颜色栏应该跟踪。(您还可以显式地将颜色条与 PathCollection 关联以避免歧义)


import matplotlib.pyplot as plt

import numpy as np



x = 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()

https://img1.sycdn.imooc.com//64e474ca000146bc05890456.jpg

查看完整回答
反对 回复 2023-08-22
?
森栏

TA贡献1810条经验 获得超5个赞

你的代码给我返回一个错误TypeError: You must first set_array for mappable...


以下是对我有用的最简单的语法:


import matplotlib.pyplot as plt

import numpy as np


a = np.random.random(100)

b = np.random.random(100)


scaled_z = (a + b)/a


plt.figure()

plt.scatter(a, b, c = scaled_z, cmap = 'plasma') ## you can directly change the colormap here

plt.colorbar()

plt.tight_layout()

plt.show()


查看完整回答
反对 回复 2023-08-22
  • 3 回答
  • 0 关注
  • 1385 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信