亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更改 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 關注
  • 1436 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號