簡體   English   中英

將Colorbar添加到python中的散點圖時出現ValueError

[英]ValueError while adding colorbar to scatter plot in python

嗨,我有一個包含多列的數據文件,並且我想添加一個帶有色條的第三軸。 我想做的是將第1列繪制為y,將第5列繪制為x軸,也想在數據點上添加第4列帶有顏色,但是我遇到以下錯誤:

ValueError: to_rgba: Invalid rgba arg "124.12834"
to_rgb: Invalid rgb arg "124.12834"
gray (string) must be in range 0-1

我的數據文件如下:

10.0    -1000.0 1300.0  2800.0  124.12834       426.450106      207.905003
10.0    -1000.0 1200.0  2000.0  127.856047      426.794984      230.104389
10.0    -500.0  1300.0  2800.0  123.074804      426.255793      205.883523
10.0    -500.0  1200.0  2000.0  127.10481       426.453441      228.650902
10.0    0.0     1300.0  2800.0  122.240729      425.953329      204.735877
10.0    0.0     1200.0  2000.0  126.435714      426.086112      227.646258
10.0    500.0   1200.0  2000.0  125.835211      425.704534      226.969429

我使用的代碼是:

import numpy as np
import matplotlib.pyplot as plt

with open("test_data1.dat") as f:
    data = f.read()

data = data.split('\n')

x = [row.split('\t')[5] for row in data]
y = [row.split('\t')[1] for row in data]
z = [row.split('\t')[4] for row in data]          

cm = plt.cm.get_cmap('RdYlBu')
fig, ax = plt.subplots()
sc = ax.scatter(x, y, c=z, vmin=10, vmax=15,s=35.0,cmap=cm)
fig.colorbar(sc)
plt.show()

請注意,它不會在保護所有屬性的情況下復制數據,因此您可以獲取以下數據,這是代碼中的數據字符串:

['10.0\t-1000.0\t1300.0\t2800.0\t124.12834\t426.450106\t207.905003',
 '10.0\t-1000.0\t1200.0\t2000.0\t127.856047\t426.794984\t230.104389',
 '10.0\t-500.0\t1300.0\t2800.0\t123.074804\t426.255793\t205.883523',
 '10.0\t-500.0\t1200.0\t2000.0\t127.10481\t426.453441\t228.650902',
 '10.0\t0.0\t1300.0\t2800.0\t122.240729\t425.953329\t204.735877',
 '10.0\t0.0\t1200.0\t2000.0\t126.435714\t426.086112\t227.646258',
 '10.0\t500.0\t1200.0\t2000.0\t125.835211\t425.704534\t226.969429']

謝謝

我刪除所有split()'\\t' ,因為我的文本編輯器自動將'\\ t'更改為空格。

string.split(s [,sep [,maxsplit]):如果不存在可選的第二個參數sep或“無”,則單詞由任意空格字符字符串(空格,制表符,換行符,返回值,換頁符)分隔。

它可以正確顯示該圖,這是代碼:

import numpy as np
import matplotlib.pyplot as plt

data = open("test_data1.dat").read().split('\n')

x = [row.split()[5] for row in data]
y = [row.split()[1] for row in data]
z = [row.split()[4] for row in data]          

cm = plt.cm.get_cmap('RdYlBu')
fig, ax = plt.subplots()
sc = ax.scatter(x, y, c=z, vmin=10, vmax=15,s=35.0,cmap=cm)
fig.colorbar(sc)
plt.show()

這是圖表: 圖

該錯誤對我而言未發生,可能是您未正確分割任何行(將其打印以進行檢查),或者您可以嘗試重新安裝matplotlib

您只是將值作為字符串而不是浮點數來獲取。 您必須使用:

x = [float(row.split('\t')[5]) for row in data]
y = [float(row.split('\t')[1]) for row in data]
z = [float(row.split('\t')[4]) for row in data]

此外,[1]會為您提供第二行,因為python中的索引以0開頭。 因此,也許您沒有獲得想要的列。

如果要使點具有不同的顏色,則必須調整范圍vmin=10, vmax=15,以適合您的值或將其保留為空白,然后matplotlib自動調整它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM